code-coordinator 0.5.510__tar.gz → 0.5.512__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 (908) hide show
  1. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/code_coordinator.egg-info/SOURCES.txt +2 -0
  4. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/code_coordinator.egg-info/scm_file_list.json +2 -0
  5. code_coordinator-0.5.512/code_coordinator.egg-info/scm_version.json +8 -0
  6. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/board_schema.py +235 -0
  7. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/drive_queue.py +136 -11
  8. code_coordinator-0.5.512/coord/drive_sessions_snapshot.py +177 -0
  9. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/serve_app.py +226 -0
  10. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_board_read_path.py +22 -7
  11. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_board_schema.py +122 -0
  12. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_config_effective.py +127 -0
  13. code_coordinator-0.5.512/tests/test_drive_sessions_snapshot.py +120 -0
  14. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_serve.py +390 -0
  15. code_coordinator-0.5.510/code_coordinator.egg-info/scm_version.json +0 -8
  16. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/.claude/commands/board.md +0 -0
  17. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/.claude/commands/complete-session.md +0 -0
  18. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/.claude/commands/coordinator.md +0 -0
  19. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/.githooks/_lib.sh +0 -0
  20. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/.githooks/post-checkout +0 -0
  21. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/.githooks/post-commit +0 -0
  22. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/.githooks/post-merge +0 -0
  23. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  24. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/.github/coord-ci-acceptance.yml +0 -0
  25. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/.github/workflows/auto-release.yml +0 -0
  26. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/.github/workflows/publish.yml +0 -0
  27. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/.github/workflows/test.yml +0 -0
  28. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/.gitignore +0 -0
  29. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/CLAUDE.md +0 -0
  30. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/GOAL.md +0 -0
  31. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/LICENSE +0 -0
  32. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/MANIFEST.in +0 -0
  33. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/README.md +0 -0
  34. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/code_coordinator.egg-info/dependency_links.txt +0 -0
  35. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/code_coordinator.egg-info/entry_points.txt +0 -0
  36. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/code_coordinator.egg-info/requires.txt +0 -0
  37. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/code_coordinator.egg-info/top_level.txt +0 -0
  38. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/__init__.py +0 -0
  39. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/_board_mapping.py +0 -0
  40. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/acceptance.py +0 -0
  41. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/acceptance_drivers.py +0 -0
  42. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/agent.py +0 -0
  43. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/agent_app.py +0 -0
  44. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/agent_update.py +0 -0
  45. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/agents/opencode/.gitignore +0 -0
  46. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/agents/opencode/agents/work.md +0 -0
  47. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/agents/opencode/routing.jsonc +0 -0
  48. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/approved_work.py +0 -0
  49. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/audit.py +0 -0
  50. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/auto_loop.py +0 -0
  51. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/backup.py +0 -0
  52. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/block_log.py +0 -0
  53. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/board_service.py +0 -0
  54. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/board_wire.py +0 -0
  55. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/brain.py +0 -0
  56. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/branch_model.py +0 -0
  57. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/bug_intake.py +0 -0
  58. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/cargo_cache.py +0 -0
  59. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/ci_fix.py +0 -0
  60. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/ci_github.py +0 -0
  61. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/ci_gitlab.py +0 -0
  62. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/ci_store.py +0 -0
  63. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/claim.py +0 -0
  64. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/claude_setup_token.py +0 -0
  65. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/cli.py +0 -0
  66. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/client.py +0 -0
  67. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/codegen.py +0 -0
  68. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/commands/__init__.py +0 -0
  69. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/commands/_common.py +0 -0
  70. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/commands/acceptance.py +0 -0
  71. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/commands/agent_ops.py +0 -0
  72. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/commands/audit.py +0 -0
  73. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/commands/backup.py +0 -0
  74. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/commands/chat.py +0 -0
  75. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/commands/ci.py +0 -0
  76. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/commands/codegen.py +0 -0
  77. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/commands/dispatch.py +0 -0
  78. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/commands/dispatch_workers.py +0 -0
  79. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/commands/dr.py +0 -0
  80. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/commands/drive.py +0 -0
  81. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/commands/drive_queue.py +0 -0
  82. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/commands/gate_a.py +0 -0
  83. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/commands/gates.py +0 -0
  84. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/commands/issues.py +0 -0
  85. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/commands/lifecycle.py +0 -0
  86. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/commands/machine.py +0 -0
  87. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/commands/merge.py +0 -0
  88. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/commands/milestone.py +0 -0
  89. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/commands/plan_followup.py +0 -0
  90. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/commands/plans.py +0 -0
  91. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/commands/portal.py +0 -0
  92. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/commands/pr.py +0 -0
  93. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/commands/release.py +0 -0
  94. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/commands/repo.py +0 -0
  95. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/commands/report.py +0 -0
  96. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/commands/review.py +0 -0
  97. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/commands/scorecard.py +0 -0
  98. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/commands/sessions.py +0 -0
  99. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/commands/setup.py +0 -0
  100. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/commands/status.py +0 -0
  101. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/commands/store_migrate.py +0 -0
  102. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/commands/terminal.py +0 -0
  103. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/commands/test_gate.py +0 -0
  104. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/commands/tui.py +0 -0
  105. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/comments.py +0 -0
  106. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/config.py +0 -0
  107. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/config_reload.py +0 -0
  108. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/confirm_test.py +0 -0
  109. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/conflict_fix.py +0 -0
  110. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/dao.py +0 -0
  111. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/dashboard/__init__.py +0 -0
  112. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/dashboard/fixture.py +0 -0
  113. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/dashboard/index.html +0 -0
  114. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/dashboard/server.py +0 -0
  115. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/dashboard/terminal.py +0 -0
  116. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/db.py +0 -0
  117. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/dead_end.py +0 -0
  118. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/decomposition_chat.py +0 -0
  119. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/deploy/README.md +0 -0
  120. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/deploy/coord-agent.service +0 -0
  121. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/deploy/coord-backup.service +0 -0
  122. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/deploy/coord-backup.timer +0 -0
  123. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/deploy/coord-db-backup.service +0 -0
  124. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/deploy/coord-db-backup.sh +0 -0
  125. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/deploy/coord-db-backup.timer +0 -0
  126. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/deploy/coord-dr-verify.service +0 -0
  127. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/deploy/coord-dr-verify.timer +0 -0
  128. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/deploy/coord-drive-queue.service +0 -0
  129. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/deploy/coord-drive-queue.timer +0 -0
  130. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/deploy/coord-failure-notify.service +0 -0
  131. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/deploy/coord-fleet-watchdog.service +0 -0
  132. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/deploy/coord-fleet-watchdog.timer +0 -0
  133. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/deploy/coord-notify.service +0 -0
  134. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/deploy/coord-notify.timer +0 -0
  135. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/deploy/coord-release-propagate.service +0 -0
  136. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/deploy/coord-release-propagate.timer +0 -0
  137. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/deploy/coord-release-window.service +0 -0
  138. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/deploy/coord-release-window.timer +0 -0
  139. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/deploy/coord-serve.service +0 -0
  140. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/deploy/coord-web-dist-build.service +0 -0
  141. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/deploy/coord-web-dist-build.timer +0 -0
  142. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/deploy/coord-web.service +0 -0
  143. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/deploy_manifest.py +0 -0
  144. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/deploy_units.py +0 -0
  145. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/deprecation_telemetry.py +0 -0
  146. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/deps.py +0 -0
  147. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/diagnose.py +0 -0
  148. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/dispatch.py +0 -0
  149. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/dispatch_liveness.py +0 -0
  150. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/dist_name.py +0 -0
  151. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/dr_promote.py +0 -0
  152. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/dr_verify.py +0 -0
  153. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/drive.py +0 -0
  154. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/drive_state.py +0 -0
  155. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/events.py +0 -0
  156. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/failure_class.py +0 -0
  157. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/failure_classifier.py +0 -0
  158. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/filelock.py +0 -0
  159. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/fleet_config_health.py +0 -0
  160. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/forge_availability.py +0 -0
  161. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/freshness.py +0 -0
  162. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/gate_a.py +0 -0
  163. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/gate_b.py +0 -0
  164. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/gate_snapshot.py +0 -0
  165. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/gates.py +0 -0
  166. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/gen_board_fixture.py +0 -0
  167. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/github_ops.py +0 -0
  168. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/github_throttle.py +0 -0
  169. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/goal.py +0 -0
  170. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/graph_health.py +0 -0
  171. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/health/__init__.py +0 -0
  172. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/health/aggregate.py +0 -0
  173. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/health/checks/__init__.py +0 -0
  174. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/health/checks/_ci_pin.py +0 -0
  175. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/health/checks/agent_install.py +0 -0
  176. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/health/checks/cargo_targets.py +0 -0
  177. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/health/checks/claude_binary.py +0 -0
  178. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/health/checks/config_drift.py +0 -0
  179. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/health/checks/coord_tui_ci_pin.py +0 -0
  180. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/health/checks/coord_web_ci_pin.py +0 -0
  181. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/health/checks/deploy_lane_facts.py +0 -0
  182. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/health/checks/disk.py +0 -0
  183. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/health/checks/fleet_board.py +0 -0
  184. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  185. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/health/checks/fleet_phantom.py +0 -0
  186. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/health/checks/fleet_unit_drift.py +0 -0
  187. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/health/checks/graph.py +0 -0
  188. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/health/checks/graphify_cli.py +0 -0
  189. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/health/checks/index_lock.py +0 -0
  190. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/health/checks/issues_sync_staleness.py +0 -0
  191. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/health/checks/plan_usage.py +0 -0
  192. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/health/checks/pr_churn.py +0 -0
  193. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/health/checks/release_cordon.py +0 -0
  194. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/health/checks/repo_state.py +0 -0
  195. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/health/checks/spawned_coord.py +0 -0
  196. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/health/checks/stalled_pipeline.py +0 -0
  197. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/health/checks/timer_active.py +0 -0
  198. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/health/checks/toolchain.py +0 -0
  199. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/health/checks/unit_drift.py +0 -0
  200. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/health/checks/unit_enablement.py +0 -0
  201. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/health/checks/wedged_drive_queue.py +0 -0
  202. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/health/checks/worktrees.py +0 -0
  203. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/health/cli.py +0 -0
  204. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/health/context.py +0 -0
  205. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/health/fleet_snapshot.py +0 -0
  206. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/health/models.py +0 -0
  207. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/health/pypi.py +0 -0
  208. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/health/registry.py +0 -0
  209. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/health/render.py +0 -0
  210. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/health/units.py +0 -0
  211. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/hooks.py +0 -0
  212. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/housekeeping.py +0 -0
  213. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/interactive.py +0 -0
  214. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/invariant_alarms.py +0 -0
  215. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/issue_store.py +0 -0
  216. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/issues_sync_status.py +0 -0
  217. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/liveness_auditor.py +0 -0
  218. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/machine_fault.py +0 -0
  219. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/machine_metrics.py +0 -0
  220. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/machine_onboard.py +0 -0
  221. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/machine_pause.py +0 -0
  222. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/machine_stats.py +0 -0
  223. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/merge_queue.py +0 -0
  224. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/milestone_chat.py +0 -0
  225. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/milestone_dispatch.py +0 -0
  226. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/milestone_gate.py +0 -0
  227. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/milestone_order.py +0 -0
  228. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/mock_author.py +0 -0
  229. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/models.py +0 -0
  230. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/network.py +0 -0
  231. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/new_issue_chat.py +0 -0
  232. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/notifier/__init__.py +0 -0
  233. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/notifier/baseline.py +0 -0
  234. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/notifier/cli.py +0 -0
  235. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/notifier/collect.py +0 -0
  236. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/notifier/digest.py +0 -0
  237. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/notifier/models.py +0 -0
  238. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/notifier/predicate.py +0 -0
  239. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/notifier/service.py +0 -0
  240. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/notifier/store.py +0 -0
  241. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/notifier/transport.py +0 -0
  242. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/notify.py +0 -0
  243. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/openapi.py +0 -0
  244. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/overlap_fence.py +0 -0
  245. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/overlap_predict.py +0 -0
  246. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/parentage.py +0 -0
  247. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/parentage_github.py +0 -0
  248. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/pipeline.py +0 -0
  249. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/plan_parser.py +0 -0
  250. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/plans.py +0 -0
  251. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/platform_paths.py +0 -0
  252. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/portal_bridge.py +0 -0
  253. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/portal_store.py +0 -0
  254. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/portal_sync.py +0 -0
  255. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/pr_body_lint.py +0 -0
  256. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/prereqs.py +0 -0
  257. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/progress.py +0 -0
  258. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/providers/__init__.py +0 -0
  259. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/providers/base.py +0 -0
  260. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/providers/claude.py +0 -0
  261. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/providers/claude_pty.py +0 -0
  262. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/providers/opencode.py +0 -0
  263. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/queue_diagnose.py +0 -0
  264. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/reconcile.py +0 -0
  265. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/reconcile_tick.py +0 -0
  266. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/refine_chat.py +0 -0
  267. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/release_cordon.py +0 -0
  268. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/release_propagate.py +0 -0
  269. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/release_verify.py +0 -0
  270. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/release_window.py +0 -0
  271. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/repo_dormancy.py +0 -0
  272. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/repo_edit.py +0 -0
  273. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/repo_onboard.py +0 -0
  274. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/reports.py +0 -0
  275. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/rest_schema.py +0 -0
  276. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/restart_cmd.py +0 -0
  277. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/revalidate.py +0 -0
  278. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/review.py +0 -0
  279. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/scorecard.py +0 -0
  280. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/self_health.py +0 -0
  281. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  282. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  283. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  284. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  285. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  286. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/skills/portal-followup/SKILL.md +0 -0
  287. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/skills/release-now/SKILL.md +0 -0
  288. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  289. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  290. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/skills/update-issue/SKILL.md +0 -0
  291. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/smoke.py +0 -0
  292. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/spend_ceiling.py +0 -0
  293. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/split_work.py +0 -0
  294. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/sql.py +0 -0
  295. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/stage_projection.py +0 -0
  296. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/state.py +0 -0
  297. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/store_migrate.py +0 -0
  298. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/store_parity.py +0 -0
  299. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/templates/deploy-cloudflare.node.yml +0 -0
  300. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/test_author.py +0 -0
  301. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/test_chat.py +0 -0
  302. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/test_orchestrator.py +0 -0
  303. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/test_report.py +0 -0
  304. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/tui_release.py +0 -0
  305. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/uat_checks.py +0 -0
  306. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/usage.py +0 -0
  307. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/usage_limits.py +0 -0
  308. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/usage_rollup.py +0 -0
  309. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coord/worker_events.py +0 -0
  310. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/coordinator.example.yml +0 -0
  311. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/deploy/coord-agent.service +0 -0
  312. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/deploy/coord-backup.service +0 -0
  313. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/deploy/coord-backup.timer +0 -0
  314. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/deploy/coord-db-backup.service +0 -0
  315. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/deploy/coord-db-backup.sh +0 -0
  316. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/deploy/coord-db-backup.timer +0 -0
  317. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/deploy/coord-dr-verify.service +0 -0
  318. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/deploy/coord-dr-verify.timer +0 -0
  319. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/deploy/coord-drive-queue.service +0 -0
  320. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/deploy/coord-drive-queue.timer +0 -0
  321. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/deploy/coord-failure-notify.service +0 -0
  322. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/deploy/coord-failure-notify.sh +0 -0
  323. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/deploy/coord-fleet-watchdog.service +0 -0
  324. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/deploy/coord-fleet-watchdog.timer +0 -0
  325. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/deploy/coord-notify.service +0 -0
  326. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/deploy/coord-notify.timer +0 -0
  327. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/deploy/coord-release-propagate.service +0 -0
  328. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/deploy/coord-release-propagate.timer +0 -0
  329. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/deploy/coord-release-window.service +0 -0
  330. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/deploy/coord-release-window.timer +0 -0
  331. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/deploy/coord-serve.service +0 -0
  332. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/deploy/coord-web-dist-build.service +0 -0
  333. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/deploy/coord-web-dist-build.sh +0 -0
  334. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/deploy/coord-web-dist-build.timer +0 -0
  335. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/deploy/coord-web-rollback.sh +0 -0
  336. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/deploy/coord-web.service +0 -0
  337. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/deploy/node-shim.sh +0 -0
  338. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/docs/ADR_COORD_TUI_CI.md +0 -0
  339. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  340. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/docs/ADR_COORD_WEB_CI.md +0 -0
  341. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/docs/ADR_COORD_WEB_DIST.md +0 -0
  342. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
  343. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/docs/AGENT_OPERATIONS.md +0 -0
  344. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/docs/ARCHITECTURE.md +0 -0
  345. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/docs/ARCH_SECURITY_GATES.md +0 -0
  346. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/docs/COCKPIT.md +0 -0
  347. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/docs/CONTROL_CENTER.md +0 -0
  348. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/docs/COST_DISCIPLINE.md +0 -0
  349. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/docs/CROSS_PLATFORM.md +0 -0
  350. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/docs/CUSTOMER_FACING_APPS.md +0 -0
  351. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/docs/CUSTOMER_PORTAL.md +0 -0
  352. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/docs/DATA_STORE_SELECTION.md +0 -0
  353. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/docs/DISASTER_RECOVERY.md +0 -0
  354. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/docs/DRIVE_QUEUE.md +0 -0
  355. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/docs/EPHEMERAL_WORKERS.md +0 -0
  356. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/docs/FORGE_MIGRATION.md +0 -0
  357. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/docs/GRAPHIFY_SETUP.md +0 -0
  358. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/docs/ISSUE_GUIDANCE.md +0 -0
  359. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/docs/MAC_MINI.md +0 -0
  360. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  361. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/docs/NOTIFIER.md +0 -0
  362. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/docs/OPENCODE_VERIFICATION.md +0 -0
  363. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/docs/OPERATING_GOTCHAS.md +0 -0
  364. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/docs/OPERATOR_GUIDES.md +0 -0
  365. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/docs/ORACLE_LOOP.md +0 -0
  366. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/docs/PHONE_WEBAPP.md +0 -0
  367. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/docs/PIPELINE_V2.md +0 -0
  368. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/docs/PLATFORM_EVOLUTION.md +0 -0
  369. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/docs/SECOND_BACKEND.md +0 -0
  370. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/docs/STORE_SERVICE.md +0 -0
  371. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  372. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/docs/WEB_CONTROL_CENTER.md +0 -0
  373. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/docs/WSL_WINDOWS_WORKER.md +0 -0
  374. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/docs/mocks/web/README.md +0 -0
  375. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/docs/mocks/web/_tokens.css +0 -0
  376. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/docs/mocks/web/issue-detail.html +0 -0
  377. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/docs/mocks/web/pipeline-narrow.html +0 -0
  378. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/docs/mocks/web/pipeline-wide.html +0 -0
  379. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/graphify-out/.gitignore +0 -0
  380. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/install-agent.sh +0 -0
  381. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/pyproject.toml +0 -0
  382. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/scripts/audit_review_verdict_overrides.py +0 -0
  383. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  384. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/scripts/azure-workers/build-worker-image.sh +0 -0
  385. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/scripts/azure-workers/coordinator-machine.py +0 -0
  386. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/scripts/azure-workers/dr-down.sh +0 -0
  387. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/scripts/azure-workers/dr-up.sh +0 -0
  388. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/scripts/azure-workers/epic-down.sh +0 -0
  389. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/scripts/azure-workers/epic-up.sh +0 -0
  390. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/scripts/azure-workers/preflight.sh +0 -0
  391. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/scripts/azure-workers/provision-server.sh +0 -0
  392. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/scripts/azure-workers/provision-worker.sh +0 -0
  393. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  394. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  395. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/scripts/azure-workers/throwaway-vm.sh +0 -0
  396. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/scripts/azure-workers/verify-github-token.sh +0 -0
  397. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/scripts/check_gh_argv_containment.py +0 -0
  398. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/scripts/codegen.py +0 -0
  399. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/scripts/coord-test-runner.sh +0 -0
  400. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
  401. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
  402. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
  403. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
  404. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/scripts/coord-venv-rollback.sh +0 -0
  405. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/scripts/drive-batch.sh +0 -0
  406. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/scripts/extract-coord-tui.sh +0 -0
  407. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/scripts/fleet_watchdog.py +0 -0
  408. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/scripts/gen_board_fixture.py +0 -0
  409. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/scripts/gen_mock_index.py +0 -0
  410. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/scripts/lib/provision-core.sh +0 -0
  411. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/scripts/next_release_tag.py +0 -0
  412. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/scripts/provision-machine.sh +0 -0
  413. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/scripts/run_tests_in_populated_home.sh +0 -0
  414. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/scripts/run_tests_without_gh.sh +0 -0
  415. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/scripts/setup-macmini.sh +0 -0
  416. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/scripts/smoke_437_interactive.py +0 -0
  417. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/scripts/verify-provision-noble.sh +0 -0
  418. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/scripts/verify_878_review_capture.py +0 -0
  419. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/scripts/verify_release_published.py +0 -0
  420. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/scripts/verify_release_wheel.py +0 -0
  421. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/setup.cfg +0 -0
  422. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/SMOKE_SET.md +0 -0
  423. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/__init__.py +0 -0
  424. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/acceptance/ms-37/conftest.py +0 -0
  425. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/acceptance/ms-37/contract.md +0 -0
  426. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/acceptance/ms-37/manifest.yml +0 -0
  427. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  428. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  429. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/acceptance/ms-51/contract.md +0 -0
  430. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  431. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  432. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/acceptance/ms-51/manifest.yml +0 -0
  433. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  434. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/acceptance/ms-51/tsconfig.json +0 -0
  435. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  436. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/backends.py +0 -0
  437. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/conftest.py +0 -0
  438. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/fixtures/board-pipeline-basic.json +0 -0
  439. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  440. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  441. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  442. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  443. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/fixtures/playwright/all_pass.json +0 -0
  444. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  445. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/fixtures/playwright/mixed_fail.json +0 -0
  446. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  447. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  448. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/fixtures/playwright/skip.json +0 -0
  449. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/fixtures/playwright/truncated.json +0 -0
  450. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  451. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  452. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  453. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  454. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  455. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  456. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  457. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  458. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_acceptance.py +0 -0
  459. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_acceptance_drivers.py +0 -0
  460. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_agent.py +0 -0
  461. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_agent_api_error.py +0 -0
  462. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_agent_app.py +0 -0
  463. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_agent_branch_base.py +0 -0
  464. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_agent_branch_capture.py +0 -0
  465. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_agent_config_free_1712.py +0 -0
  466. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_agent_deploy_units_endpoint.py +0 -0
  467. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_agent_dirty_worktree.py +0 -0
  468. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  469. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_agent_graph_self_heal.py +0 -0
  470. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_agent_health_h3.py +0 -0
  471. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_agent_idle_restart.py +0 -0
  472. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_agent_push_failure.py +0 -0
  473. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_agent_reap.py +0 -0
  474. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_agent_repos_and_pull.py +0 -0
  475. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_agent_restart_services_endpoint.py +0 -0
  476. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_agent_skills_self_heal.py +0 -0
  477. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_agent_startup_diagnostics.py +0 -0
  478. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_agent_update.py +0 -0
  479. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_agent_update_bluegreen.py +0 -0
  480. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_agent_usage_limit.py +0 -0
  481. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_agent_zero_commit.py +0 -0
  482. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_ambient_home_isolation.py +0 -0
  483. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_approve_capability_reroute_3241.py +0 -0
  484. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_approve_dependency_busy_2804.py +0 -0
  485. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_approve_reject_plan.py +0 -0
  486. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_approve_usage_gate.py +0 -0
  487. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_approved_work_2532.py +0 -0
  488. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_approved_work_2996.py +0 -0
  489. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_assignment_already_recorded_daemon.py +0 -0
  490. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_audit_log.py +0 -0
  491. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_audit_outcome.py +0 -0
  492. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_audit_query.py +0 -0
  493. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_auto_loop.py +0 -0
  494. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_auto_release_publish_2035.py +0 -0
  495. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_backend_selection.py +0 -0
  496. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_backup.py +0 -0
  497. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_base_checkout_restore.py +0 -0
  498. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_block_log.py +0 -0
  499. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_board_cap_762.py +0 -0
  500. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_board_fixture.py +0 -0
  501. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_board_service.py +0 -0
  502. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_board_state.py +0 -0
  503. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_board_wire.py +0 -0
  504. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_brain.py +0 -0
  505. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_branch_model.py +0 -0
  506. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_bug_intake.py +0 -0
  507. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_build_worker_image_env_update.py +0 -0
  508. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cargo_cache.py +0 -0
  509. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_check_gh_argv_containment.py +0 -0
  510. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_ci_acceptance_gate_1950.py +0 -0
  511. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_ci_fix.py +0 -0
  512. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_ci_github.py +0 -0
  513. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_ci_gitlab.py +0 -0
  514. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_ci_parity_2091.py +0 -0
  515. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_ci_store.py +0 -0
  516. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_claim.py +0 -0
  517. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_claude_md_budget.py +0 -0
  518. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_claude_setup_token.py +0 -0
  519. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_acceptance.py +0 -0
  520. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_assign.py +0 -0
  521. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  522. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_assign_interactive_remote.py +0 -0
  523. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_assign_provider.py +0 -0
  524. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  525. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_audit.py +0 -0
  526. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_chat_continue.py +0 -0
  527. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_ci.py +0 -0
  528. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_codegen.py +0 -0
  529. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_decide.py +0 -0
  530. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_diagnose_capability_rules.py +0 -0
  531. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_diagnose_config_provenance.py +0 -0
  532. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_diagnose_forge_availability.py +0 -0
  533. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_diagnose_graph.py +0 -0
  534. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_diagnose_self.py +0 -0
  535. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_diagnose_test_coverage.py +0 -0
  536. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_doctor.py +0 -0
  537. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_doctor_config_free_1801.py +0 -0
  538. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  539. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_doctor_store_backend_3084.py +0 -0
  540. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_drive.py +0 -0
  541. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_drive_queue.py +0 -0
  542. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_escalate.py +0 -0
  543. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_fix_headless_review.py +0 -0
  544. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_gate_a.py +0 -0
  545. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_install_drift.py +0 -0
  546. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_install_skills.py +0 -0
  547. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_issue_comment.py +0 -0
  548. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_issue_create_label.py +0 -0
  549. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_issue_reopen.py +0 -0
  550. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_issue_view_list.py +0 -0
  551. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_merge.py +0 -0
  552. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_milestone_assign.py +0 -0
  553. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_milestone_capture.py +0 -0
  554. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_milestone_chat_add_child.py +0 -0
  555. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_milestone_dispatch.py +0 -0
  556. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_milestone_gate_b.py +0 -0
  557. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_milestone_gate_c.py +0 -0
  558. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_milestone_order.py +0 -0
  559. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  560. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_milestone_ship.py +0 -0
  561. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_network.py +0 -0
  562. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_new_issue_chat.py +0 -0
  563. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_plans.py +0 -0
  564. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_portal.py +0 -0
  565. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_pr.py +0 -0
  566. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_pull_artifact.py +0 -0
  567. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_queue.py +0 -0
  568. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_reattach_sessions.py +0 -0
  569. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_refine_board.py +0 -0
  570. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_release_preflight.py +0 -0
  571. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_release_propagate.py +0 -0
  572. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_release_window.py +0 -0
  573. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_repo_2220.py +0 -0
  574. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
  575. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_scorecard.py +0 -0
  576. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_serve_store_backend_3084.py +0 -0
  577. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_set_review_findings.py +0 -0
  578. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_status_advisory_terminal.py +0 -0
  579. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_status_contested_tag.py +0 -0
  580. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_status_invariant_alarms.py +0 -0
  581. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_status_machine_fault.py +0 -0
  582. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_status_merge_queue.py +0 -0
  583. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_status_provider.py +0 -0
  584. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_status_retried_3340.py +0 -0
  585. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_status_review_finalizing.py +0 -0
  586. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_status_supervisor_3366.py +0 -0
  587. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_status_test_failed_tag.py +0 -0
  588. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_status_usage_limit.py +0 -0
  589. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_sync_comments_873.py +0 -0
  590. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_test_plan.py +0 -0
  591. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_track.py +0 -0
  592. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_tui_update.py +0 -0
  593. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cli_wait.py +0 -0
  594. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_client.py +0 -0
  595. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_client_base_install.py +0 -0
  596. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_client_config_cache_atomic_3052.py +0 -0
  597. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_client_resource_migration_1946.py +0 -0
  598. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_commands_common.py +0 -0
  599. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_comments.py +0 -0
  600. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_completion_summary.py +0 -0
  601. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_config.py +0 -0
  602. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_config_acceptance.py +0 -0
  603. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_config_audit.py +0 -0
  604. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_config_drift_check.py +0 -0
  605. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_config_pricing.py +0 -0
  606. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  607. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_config_usage_gate.py +0 -0
  608. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_confirm_test.py +0 -0
  609. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_conflict_fix.py +0 -0
  610. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_conflict_fix_semantic.py +0 -0
  611. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
  612. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_coord_test.py +0 -0
  613. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
  614. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_coord_test_runner_baseline.py +0 -0
  615. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_coord_test_runner_populated_home.py +0 -0
  616. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_coord_test_runner_routing.py +0 -0
  617. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_coord_test_runner_toolchain.py +0 -0
  618. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_coord_uat.py +0 -0
  619. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_coord_web_sse_restart_live.py +0 -0
  620. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_coordinator_machine.py +0 -0
  621. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_cross_platform_imports.py +0 -0
  622. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_dao.py +0 -0
  623. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_dashboard.py +0 -0
  624. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_dashboard_api.py +0 -0
  625. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_dashboard_fixture.py +0 -0
  626. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_dashboard_server.py +0 -0
  627. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_dashboard_terminal.py +0 -0
  628. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_dashboard_terminal_live.py +0 -0
  629. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_db.py +0 -0
  630. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_dead_end.py +0 -0
  631. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_decomposition_chat.py +0 -0
  632. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_deploy_coord_db_backup.py +0 -0
  633. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_deploy_coord_web_dist.py +0 -0
  634. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_deploy_coord_web_rollback.py +0 -0
  635. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_deploy_db_backup_unit.py +0 -0
  636. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_deploy_drive_queue_unit.py +0 -0
  637. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_deploy_failure_notify_unit.py +0 -0
  638. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_deploy_manifest.py +0 -0
  639. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_deploy_notify_unit.py +0 -0
  640. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_deploy_units_lane.py +0 -0
  641. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_deploy_web_unit.py +0 -0
  642. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_deprecation_telemetry.py +0 -0
  643. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_deps.py +0 -0
  644. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_diagnose.py +0 -0
  645. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_dispatch.py +0 -0
  646. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_dispatch_liveness.py +0 -0
  647. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_dispatch_target_validation.py +0 -0
  648. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_dispatch_workers.py +0 -0
  649. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_dist_name.py +0 -0
  650. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_done_housekeeping.py +0 -0
  651. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_dr_azure_scripts.py +0 -0
  652. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_dr_promote.py +0 -0
  653. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_dr_verify.py +0 -0
  654. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_drive.py +0 -0
  655. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_drive_machine_fault.py +0 -0
  656. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_drive_queue.py +0 -0
  657. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_drive_queue_blocked_rendering.py +0 -0
  658. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_drive_queue_launch_argv.py +0 -0
  659. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_drive_queue_max_parallel_config.py +0 -0
  660. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
  661. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_drive_queue_roll_pending.py +0 -0
  662. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
  663. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_drive_state.py +0 -0
  664. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_drive_tmux.py +0 -0
  665. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_epic_up_capability_detection.py +0 -0
  666. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  667. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_epic_up_image_provenance.py +0 -0
  668. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_errors.py +0 -0
  669. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_events.py +0 -0
  670. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_failure_class.py +0 -0
  671. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_failure_classifier.py +0 -0
  672. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_filelock.py +0 -0
  673. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  674. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_fix_escalation_classifier.py +0 -0
  675. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_fix_of_force_override.py +0 -0
  676. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_fleet_config_health.py +0 -0
  677. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_fleet_health_probes.py +0 -0
  678. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_fleet_health_snapshot.py +0 -0
  679. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_fleet_watchdog.py +0 -0
  680. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_forge_availability.py +0 -0
  681. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_freshness.py +0 -0
  682. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_gate_a.py +0 -0
  683. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_gate_b.py +0 -0
  684. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_gate_snapshot_staleness.py +0 -0
  685. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_gates.py +0 -0
  686. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  687. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_gen_mock_index.py +0 -0
  688. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_generated_rust_fixture.py +0 -0
  689. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_generated_rust_requests.py +0 -0
  690. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_generated_types_fixture.py +0 -0
  691. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_github_ops.py +0 -0
  692. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_github_throttle.py +0 -0
  693. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_goal.py +0 -0
  694. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_graph_health.py +0 -0
  695. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_graph_selfheal_absent_2237.py +0 -0
  696. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_handoff.py +0 -0
  697. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_health_checks.py +0 -0
  698. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_health_cli.py +0 -0
  699. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_health_cli_graph.py +0 -0
  700. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_health_config.py +0 -0
  701. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_health_context.py +0 -0
  702. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_health_coord_tui_ci_pin.py +0 -0
  703. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_health_coord_web_ci_pin.py +0 -0
  704. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_health_deploy_lane_facts.py +0 -0
  705. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_health_fix.py +0 -0
  706. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_health_incident_regression.py +0 -0
  707. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_health_issues_sync_staleness.py +0 -0
  708. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_health_pr_churn.py +0 -0
  709. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_health_pypi.py +0 -0
  710. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_health_registry.py +0 -0
  711. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_health_release_cordon_probe.py +0 -0
  712. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_health_timer_active.py +0 -0
  713. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_health_toolchain.py +0 -0
  714. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_health_unit_drift.py +0 -0
  715. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_health_unit_enablement.py +0 -0
  716. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_health_wedged_drive_queue.py +0 -0
  717. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_hooks.py +0 -0
  718. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_housekeeping.py +0 -0
  719. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_human_attended_437.py +0 -0
  720. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_init.py +0 -0
  721. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_install_agent_venv_2911.py +0 -0
  722. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_integration.py +0 -0
  723. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_interactive_briefing_echo.py +0 -0
  724. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_interactive_pane_log_2541.py +0 -0
  725. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_interactive_prefill_state.py +0 -0
  726. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_interactive_session_relaunch.py +0 -0
  727. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_interactive_test_verdict_backstop.py +0 -0
  728. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_interactive_token_attribution.py +0 -0
  729. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_interactive_worktree.py +0 -0
  730. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_invariant_alarms.py +0 -0
  731. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_issue_store_seam.py +0 -0
  732. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_issues_sync_status.py +0 -0
  733. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_liveness_auditor.py +0 -0
  734. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_liveness_notify.py +0 -0
  735. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_lock_contention_ratchet.py +0 -0
  736. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_machine_fault.py +0 -0
  737. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_machine_metrics.py +0 -0
  738. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_machine_onboard.py +0 -0
  739. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_machine_pause.py +0 -0
  740. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_machine_stats.py +0 -0
  741. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_merge_queue.py +0 -0
  742. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_merge_verify.py +0 -0
  743. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_milestone_chat.py +0 -0
  744. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_milestone_dispatch.py +0 -0
  745. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_milestone_gate.py +0 -0
  746. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_milestone_order.py +0 -0
  747. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_milestone_seam.py +0 -0
  748. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_mock_author.py +0 -0
  749. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_model_tiering.py +0 -0
  750. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_models.py +0 -0
  751. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_models_config_labels.py +0 -0
  752. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_needs_attention.py +0 -0
  753. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_network.py +0 -0
  754. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_new_issue_chat.py +0 -0
  755. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_next_release_tag.py +0 -0
  756. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_node_shim.py +0 -0
  757. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_notifier_baseline.py +0 -0
  758. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_notifier_cli.py +0 -0
  759. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_notifier_collect.py +0 -0
  760. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_notifier_config.py +0 -0
  761. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_notifier_drive_seam.py +0 -0
  762. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_notifier_isolation.py +0 -0
  763. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_notifier_predicate.py +0 -0
  764. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_notifier_quiet_hours.py +0 -0
  765. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_notifier_service.py +0 -0
  766. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_notify.py +0 -0
  767. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_notify_drain.py +0 -0
  768. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_openapi.py +0 -0
  769. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_operational_defaults.py +0 -0
  770. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_overlap_fence.py +0 -0
  771. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_overlap_predict.py +0 -0
  772. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_packaged_deploy_units.py +0 -0
  773. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_parentage.py +0 -0
  774. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_paste_landed.py +0 -0
  775. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
  776. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_pipeline.py +0 -0
  777. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_plan_followup_approve_plan_command.py +0 -0
  778. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_plan_followup_pr_command.py +0 -0
  779. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_plan_followup_review_command.py +0 -0
  780. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_plan_only.py +0 -0
  781. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_plan_parser.py +0 -0
  782. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_platform_paths.py +0 -0
  783. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_portal_bridge.py +0 -0
  784. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_portal_config.py +0 -0
  785. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_portal_store.py +0 -0
  786. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_portal_sync.py +0 -0
  787. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_pr_body_lint.py +0 -0
  788. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_prereqs.py +0 -0
  789. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_production_db_guard.py +0 -0
  790. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_progress.py +0 -0
  791. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_provider_seam.py +0 -0
  792. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_providers.py +0 -0
  793. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_providers_config_labels.py +0 -0
  794. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_providers_pty.py +0 -0
  795. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_provision_core.py +0 -0
  796. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_provision_machine.py +0 -0
  797. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_py_rust_mirror_inventory.py +0 -0
  798. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_quiet_hours.py +0 -0
  799. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_quiet_hours_store_2146.py +0 -0
  800. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_reap_merged_sessions.py +0 -0
  801. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_reap_stale_interactive_tick.py +0 -0
  802. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_reconcile.py +0 -0
  803. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_reconcile_branch.py +0 -0
  804. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_reconcile_completions.py +0 -0
  805. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
  806. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_reconcile_merges.py +0 -0
  807. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_reconcile_no_agent_record.py +0 -0
  808. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_reconcile_tick.py +0 -0
  809. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_reconcile_usage_limit_done.py +0 -0
  810. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_refine_chat.py +0 -0
  811. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_release_cordon_2101.py +0 -0
  812. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  813. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_release_cordon_deadlock_2240.py +0 -0
  814. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_release_cordon_drain_stall_3336.py +0 -0
  815. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_release_cordon_stuck_2490.py +0 -0
  816. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_release_propagate.py +0 -0
  817. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_release_propagate_threshold.py +0 -0
  818. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_release_roll_between_legs_2854.py +0 -0
  819. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_release_roll_window_handoff.py +0 -0
  820. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_release_unified_1242.py +0 -0
  821. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_release_verify.py +0 -0
  822. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_release_window.py +0 -0
  823. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_remote_auto_prune.py +0 -0
  824. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_remote_interactive_reaper.py +0 -0
  825. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_repo_add.py +0 -0
  826. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_repo_dormancy.py +0 -0
  827. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_repo_edit_2220.py +0 -0
  828. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_repo_graph_fleet_2237.py +0 -0
  829. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_repo_max_parallel_3423.py +0 -0
  830. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_repo_onboard_2220.py +0 -0
  831. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_report_result_push.py +0 -0
  832. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_reports.py +0 -0
  833. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_restart_cmd.py +0 -0
  834. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_retry.py +0 -0
  835. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_retry_advisory_1606.py +0 -0
  836. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_retry_escalation_classify_3360.py +0 -0
  837. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_retry_type_1636.py +0 -0
  838. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_revalidate.py +0 -0
  839. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_review.py +0 -0
  840. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_review_end_review_without_verdict.py +0 -0
  841. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_review_parse_failure_diagnostic.py +0 -0
  842. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_review_reaffirm.py +0 -0
  843. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_review_state.py +0 -0
  844. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_review_verdict_backstop.py +0 -0
  845. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_review_verdict_override_audit.py +0 -0
  846. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_review_verdict_relay.py +0 -0
  847. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_review_zero_commits.py +0 -0
  848. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_scoped_review_wiring.py +0 -0
  849. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_scorecard.py +0 -0
  850. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_self_health.py +0 -0
  851. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_serve_app.py +0 -0
  852. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_serve_app_board_trim.py +0 -0
  853. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_serve_rest_routes.py +0 -0
  854. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_session.py +0 -0
  855. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_slice_issue_attribution.py +0 -0
  856. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_smoke.py +0 -0
  857. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_smoke_fanout_manifest_3333.py +0 -0
  858. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_smoke_live_checkout_restore.py +0 -0
  859. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_smoke_workflow.py +0 -0
  860. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_spend_ceiling.py +0 -0
  861. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_spend_ceiling_coordinator.py +0 -0
  862. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_split.py +0 -0
  863. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_split_work.py +0 -0
  864. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_sql_dialect.py +0 -0
  865. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_sqlite_connect_ratchet.py +0 -0
  866. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_stage_projection.py +0 -0
  867. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_stale_busy_reviewer_697.py +0 -0
  868. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_stalled_pipeline.py +0 -0
  869. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_state.py +0 -0
  870. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_state_review_findings_daemon.py +0 -0
  871. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_status_fleet_footer.py +0 -0
  872. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_stop_1567.py +0 -0
  873. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_store_contract.py +0 -0
  874. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_store_migrate.py +0 -0
  875. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_stuck.py +0 -0
  876. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
  877. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_terminal_command.py +0 -0
  878. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_test_author.py +0 -0
  879. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_test_chat.py +0 -0
  880. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_test_orchestrator.py +0 -0
  881. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_test_report.py +0 -0
  882. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_test_verdict_parsing.py +0 -0
  883. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_test_verdict_transcript_floor.py +0 -0
  884. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_text_io_encoding_audit.py +0 -0
  885. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_thin_client_board_audit.py +0 -0
  886. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_thin_client_config_load_1080.py +0 -0
  887. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_thin_client_daemon_routing_906.py +0 -0
  888. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_throwaway_vm.py +0 -0
  889. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_tmux_host.py +0 -0
  890. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_tmux_session.py +0 -0
  891. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_transcript_floor.py +0 -0
  892. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_uat_checks.py +0 -0
  893. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_usage.py +0 -0
  894. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_usage_limits.py +0 -0
  895. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_usage_rollup.py +0 -0
  896. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_venv_live_install_2121.py +0 -0
  897. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_version_single_source.py +0 -0
  898. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_watch.py +0 -0
  899. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  900. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_worker_env_venv_isolation.py +0 -0
  901. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_worker_events.py +0 -0
  902. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_worker_image_pin_sync.py +0 -0
  903. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_worker_safety.py +0 -0
  904. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_worker_test_scoping.py +0 -0
  905. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_worktree.py +0 -0
  906. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  907. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/test_write_parity.py +0 -0
  908. {code_coordinator-0.5.510 → code_coordinator-0.5.512}/tests/write_parity.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-coordinator
3
- Version: 0.5.510
3
+ Version: 0.5.512
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.510
3
+ Version: 0.5.512
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
@@ -76,6 +76,7 @@ coord/dr_promote.py
76
76
  coord/dr_verify.py
77
77
  coord/drive.py
78
78
  coord/drive_queue.py
79
+ coord/drive_sessions_snapshot.py
79
80
  coord/drive_state.py
80
81
  coord/events.py
81
82
  coord/failure_class.py
@@ -622,6 +623,7 @@ tests/test_drive_queue_max_parallel_config.py
622
623
  tests/test_drive_queue_max_parallel_per_repo_config.py
623
624
  tests/test_drive_queue_roll_pending.py
624
625
  tests/test_drive_queue_self_cordon_escalation.py
626
+ tests/test_drive_sessions_snapshot.py
625
627
  tests/test_drive_state.py
626
628
  tests/test_drive_tmux.py
627
629
  tests/test_epic_up_capability_detection.py
@@ -136,6 +136,7 @@
136
136
  "coord/dr_verify.py",
137
137
  "coord/drive.py",
138
138
  "coord/drive_queue.py",
139
+ "coord/drive_sessions_snapshot.py",
139
140
  "coord/drive_state.py",
140
141
  "coord/events.py",
141
142
  "coord/failure_class.py",
@@ -648,6 +649,7 @@
648
649
  "tests/test_drive_queue_max_parallel_per_repo_config.py",
649
650
  "tests/test_drive_queue_roll_pending.py",
650
651
  "tests/test_drive_queue_self_cordon_escalation.py",
652
+ "tests/test_drive_sessions_snapshot.py",
651
653
  "tests/test_drive_state.py",
652
654
  "tests/test_drive_tmux.py",
653
655
  "tests/test_epic_up_capability_detection.py",
@@ -0,0 +1,8 @@
1
+ {
2
+ "tag": "0.5.512",
3
+ "distance": 0,
4
+ "node": "g51bbafd70baf84cb0ed6d0a735815b56ea39f604",
5
+ "dirty": false,
6
+ "branch": "HEAD",
7
+ "node_date": "2026-09-21"
8
+ }
@@ -62,6 +62,11 @@ import typing
62
62
  from collections.abc import Mapping
63
63
  from typing import Any, Union
64
64
 
65
+ # #3428: the `concurrency` block's `occupancy_state` value set — owned by the
66
+ # snapshot module that produces it (see `BoardConcurrency` below). Safe at
67
+ # module scope: that module imports nothing from `coord` at import time.
68
+ from coord.drive_sessions_snapshot import OCCUPANCY_UNOBSERVED
69
+
65
70
  #: What the read path actually hands the projection. ``sqlite3.Row`` is *not*
66
71
  #: a ``Mapping`` (see :func:`_as_dict`), so it has to be named explicitly.
67
72
  RowLike = Union[Mapping[str, Any], sqlite3.Row]
@@ -310,6 +315,236 @@ class BoardDriveQueueEntry:
310
315
  apply_verdict_at: float | None = None
311
316
 
312
317
 
318
+ # ── #3428 (#3408 item 3): concurrency ceilings + provenance + occupancy ──────
319
+ #
320
+ # The three dataclasses below are NOT a table projection — there is no
321
+ # `concurrency` table — so they are absent from `BOARD_PROJECTIONS` and
322
+ # `decode_row()` never touches them. They exist to give the *computed*
323
+ # `coord.drive_queue.CeilingResolution` (already resolved on the daemon host
324
+ # by `coord config --effective`'s own machinery — see that command's
325
+ # docstring) an explicit wire shape, the same way `BoardAssignment` etc. give
326
+ # one to a raw DB row. `coord/serve_app.py`'s `board()` handler builds a
327
+ # `BoardConcurrency` per request (never persisted) and adds it to the
328
+ # `/board` payload as the sibling key ``concurrency`` — same posture as
329
+ # ``roll_pending``/``goal_header``: additive, absent-tolerant, never required.
330
+ #
331
+ # Deliberately does NOT import `coord.drive_queue` at module scope:
332
+ # `coord.drive_queue` transitively imports THIS module (via
333
+ # `coord.merge_queue` -> `coord.state` -> `coord.board_schema`), so a
334
+ # top-level `from coord.drive_queue import CeilingResolution` here would be a
335
+ # real import cycle, not just an ugly one. `CeilingResolution` is referenced
336
+ # only for typing (`from __future__ import annotations` makes the annotation
337
+ # itself lazy) and duck-typed at runtime by :func:`board_ceiling_from_resolution`.
338
+ # (`coord.drive_sessions_snapshot`, which owns the `occupancy_state` value
339
+ # set `BoardConcurrency` below defaults to, is by contrast imported at the
340
+ # TOP of this file: it imports nothing from `coord` at module scope — its own
341
+ # tmux/queue imports are deferred into `refresh()` — so it cannot close a
342
+ # cycle back through here.)
343
+ if typing.TYPE_CHECKING: # pragma: no cover — typing only
344
+ from coord.drive_queue import CeilingResolution
345
+
346
+
347
+ #: `BoardCeiling.source_kind` / `BoardCeilingSource.source_kind`'s closed
348
+ #: value set (#3428) — a machine-readable classification of
349
+ #: `CeilingResolution.source`'s free-text prose (written for `coord config
350
+ #: --effective`'s human-readable output), so a client can style/filter a
351
+ #: ceiling's provenance without string-matching wording that is free to
352
+ #: change. See :func:`classify_ceiling_source` for the mapping.
353
+ CEILING_SOURCE_KIND_SYSTEMD_FLAG = "systemd_flag"
354
+ CEILING_SOURCE_KIND_CLI_FLAG = "cli_flag"
355
+ CEILING_SOURCE_KIND_COORDINATOR_YML_REPO = "coordinator_yml_repo"
356
+ CEILING_SOURCE_KIND_COORDINATOR_YML_PIPELINE = "coordinator_yml_pipeline"
357
+ CEILING_SOURCE_KIND_COORDINATOR_YML_CONCURRENCY = "coordinator_yml_concurrency"
358
+ CEILING_SOURCE_KIND_DERIVED = "derived"
359
+ CEILING_SOURCE_KIND_DEFAULT = "default"
360
+ #: A `CeilingResolution.source` this classifier doesn't recognise — should
361
+ #: never actually appear on a real `/board` payload (every source string
362
+ #: `coord.drive_queue`'s resolvers produce is covered below), but a client
363
+ #: must still be able to parse it rather than choke: unlike the DTOs above,
364
+ #: `source_kind` degrading to "unknown" is a display nit, not a #632-class
365
+ #: parse failure.
366
+ CEILING_SOURCE_KIND_UNKNOWN = "unknown"
367
+
368
+ CEILING_SOURCE_KINDS: frozenset[str] = frozenset(
369
+ {
370
+ CEILING_SOURCE_KIND_SYSTEMD_FLAG,
371
+ CEILING_SOURCE_KIND_CLI_FLAG,
372
+ CEILING_SOURCE_KIND_COORDINATOR_YML_REPO,
373
+ CEILING_SOURCE_KIND_COORDINATOR_YML_PIPELINE,
374
+ CEILING_SOURCE_KIND_COORDINATOR_YML_CONCURRENCY,
375
+ CEILING_SOURCE_KIND_DERIVED,
376
+ CEILING_SOURCE_KIND_DEFAULT,
377
+ CEILING_SOURCE_KIND_UNKNOWN,
378
+ }
379
+ )
380
+
381
+
382
+ def classify_ceiling_source(source: str) -> str:
383
+ """Map one `CeilingResolution.source` (or one of its `losing` entries'
384
+ source names) prose string to a :data:`CEILING_SOURCE_KINDS` enum value.
385
+
386
+ Ordered by specificity, matching the exact strings
387
+ `coord.drive_queue`'s resolvers / `coord.commands.setup._print_effective_
388
+ concurrency` actually construct today:
389
+
390
+ * ``"systemd ExecStart --max-parallel..."`` (`read_systemd_max_parallel_
391
+ flags` via `coord.commands.setup`'s ``per_repo_source``/
392
+ ``max_parallel_source``) -> ``systemd_flag`` — the #3408 incident
393
+ source: a machine-local flag a thin client can never see for itself.
394
+ * ``"--max-parallel[-per-repo] flag"`` (an explicit CLI override on
395
+ `coord drive-queue tick`'s own invocation) -> ``cli_flag``.
396
+ * ``"coordinator.yml repos[<name>].max_parallel"`` (#3423 per-repo
397
+ override) -> ``coordinator_yml_repo``.
398
+ * ``"coordinator.yml pipeline.max_parallel..."`` -> ``coordinator_yml_pipeline``.
399
+ * ``"coordinator.yml concurrency.max_workers"`` (this module's own
400
+ synthetic resolution for the fleet worker cap — see
401
+ :func:`board_ceiling_from_resolution`'s caller in `coord/serve_app.py`)
402
+ -> ``coordinator_yml_concurrency``.
403
+ * ``"derived (...)"`` (`default_max_parallel`'s repo-shape derivation)
404
+ -> ``derived``.
405
+ * ``"default (...)"`` (the hardcoded fallback, config unreadable) ->
406
+ ``default``.
407
+ * anything else -> ``unknown`` (fail-soft; see that constant's docstring).
408
+ """
409
+ if source.startswith("systemd ExecStart"):
410
+ return CEILING_SOURCE_KIND_SYSTEMD_FLAG
411
+ if source.startswith("coordinator.yml repos["):
412
+ return CEILING_SOURCE_KIND_COORDINATOR_YML_REPO
413
+ if source.startswith("coordinator.yml pipeline."):
414
+ return CEILING_SOURCE_KIND_COORDINATOR_YML_PIPELINE
415
+ if source.startswith("coordinator.yml concurrency."):
416
+ return CEILING_SOURCE_KIND_COORDINATOR_YML_CONCURRENCY
417
+ if source.startswith("derived"):
418
+ return CEILING_SOURCE_KIND_DERIVED
419
+ if source.startswith("default"):
420
+ return CEILING_SOURCE_KIND_DEFAULT
421
+ if source.startswith("--") and source.endswith("flag"):
422
+ return CEILING_SOURCE_KIND_CLI_FLAG
423
+ return CEILING_SOURCE_KIND_UNKNOWN
424
+
425
+
426
+ @dataclasses.dataclass(kw_only=True)
427
+ class BoardCeilingSource:
428
+ """One LOSING source's own opinion for a :class:`BoardCeiling` (#3428) —
429
+ the wire twin of one ``(name, value)`` pair in a
430
+ `coord.drive_queue.CeilingResolution.losing` tuple. This is the whole
431
+ point of shipping provenance at all: it is what tells an operator that
432
+ editing ``coordinator.yml``/``coord-settings`` is futile while a
433
+ machine-local systemd flag outranks it (#3408's reported incident).
434
+ """
435
+
436
+ source: str
437
+ source_kind: str
438
+ value: int
439
+
440
+
441
+ @dataclasses.dataclass(kw_only=True)
442
+ class BoardCeiling:
443
+ """One resolved concurrency ceiling + provenance (#3428) — the `/board`
444
+ wire twin of `coord.drive_queue.CeilingResolution`, the exact resolution
445
+ `coord config --effective` and `coord drive-queue tick` itself already
446
+ use (#2085 "one question, one answer": this block is never a second,
447
+ independently-derived answer).
448
+
449
+ ``source`` carries the same free-text `CeilingResolution.source` a human
450
+ reads in `coord config --effective`'s output; ``source_kind`` is the
451
+ machine-readable classification of it (:func:`classify_ceiling_source`)
452
+ a client should actually branch on. ``losing`` is ``None`` (not ``[]``)
453
+ when nothing else was configured, matching `CeilingResolution.losing`'s
454
+ own "empty means nobody else had an opinion" contract.
455
+ """
456
+
457
+ name: str
458
+ value: int
459
+ source: str
460
+ source_kind: str
461
+ losing: list[BoardCeilingSource] | None = None
462
+
463
+
464
+ def board_ceiling_from_resolution(resolution: "CeilingResolution") -> BoardCeiling:
465
+ """`coord.drive_queue.CeilingResolution` -> its `/board` wire shape.
466
+
467
+ Duck-typed on purpose (reads ``.name``/``.value``/``.source``/``.losing``
468
+ rather than importing the real class) — see the module note above this
469
+ section for why `coord.drive_queue` cannot be imported here at runtime.
470
+ """
471
+ losing = [
472
+ BoardCeilingSource(
473
+ source=name, source_kind=classify_ceiling_source(name), value=value
474
+ )
475
+ for name, value in resolution.losing
476
+ ] or None
477
+ return BoardCeiling(
478
+ name=resolution.name,
479
+ value=resolution.value,
480
+ source=resolution.source,
481
+ source_kind=classify_ceiling_source(resolution.source),
482
+ losing=losing,
483
+ )
484
+
485
+
486
+ @dataclasses.dataclass(kw_only=True)
487
+ class BoardConcurrency:
488
+ """The `/board` payload's ``concurrency`` block (#3428, #3408 item 3):
489
+ every ceiling `coord drive-queue tick` actually enforces, resolved on
490
+ THIS (the daemon) host, plus current occupancy against each.
491
+
492
+ **Resolved server-side, always** — the systemd-flag source
493
+ (:data:`CEILING_SOURCE_KIND_SYSTEMD_FLAG`) is machine-local and invisible
494
+ to a thin client (a Rust TUI, a phone webapp) by construction; a client
495
+ deriving ceilings from its own cached ``coordinator.yml`` would
496
+ confidently print the config value while a host-local flag silently
497
+ outranked it — the exact #3408 failure this block exists to end.
498
+
499
+ ``repo_overrides`` carries only the repos whose OWN ``repos[].max_parallel``
500
+ (#3423) actually differs from ``max_parallel_per_repo``'s fleet-wide
501
+ value — mirroring `coord.drive_queue.effective_repo_capacities`'s own
502
+ "only the repos that disagree" trim (see that function's docstring):
503
+ listing every repo would bury the ones that matter and make an
504
+ all-default fleet look like something was overridden everywhere.
505
+
506
+ ``occupied``/``repo_occupied`` are `coord.drive_queue.
507
+ compute_running_occupancy`'s own output, verbatim — the SAME "is this
508
+ entry still occupying a slot" verdict `plan_tick` enforces, never a
509
+ second, independently-recounted number (#2085 "one question, one
510
+ answer").
511
+
512
+ **Occupancy is nullable, and says why (#2096).** That verdict's first
513
+ question about a `running` entry is "is its drive session live?", which
514
+ only a ``tmux list-sessions`` reading can answer — and that reading is a
515
+ SUBPROCESS, so it is taken on the daemon's tick cadence
516
+ (`coord.drive_sessions_snapshot`), never inline off this read path (the
517
+ `/board` invariant 1 that `tests/test_board_read_path.py` enforces). When
518
+ the daemon has not taken a reading yet, or its refresh loop has stalled
519
+ (#2862) and the last one is too old to be evidence about now,
520
+ ``occupied``/``repo_occupied`` are ``None`` and ``occupancy_state`` says
521
+ which — never a confidently-wrong ``0`` that a client would render as
522
+ "all slots free". ``occupancy_observed_at`` is the wall-clock moment of
523
+ the reading behind the numbers (``None`` when there has never been one),
524
+ so a client can show — and age out — the numbers itself.
525
+
526
+ The CEILINGS are unaffected by any of that: they are resolved from
527
+ config + this host's systemd unit on every build, so they stay populated
528
+ even when occupancy is unknown.
529
+
530
+ Absent-tolerant in both directions (#3428 acceptance): an older daemon
531
+ simply omits the ``concurrency`` key entirely (never ships it as e.g. an
532
+ empty object), and a newer client must not require the key to parse an
533
+ otherwise-valid board.
534
+ """
535
+
536
+ max_parallel: BoardCeiling
537
+ max_parallel_per_repo: BoardCeiling
538
+ max_workers: BoardCeiling
539
+ repo_overrides: dict[str, BoardCeiling]
540
+ #: ``None`` unless ``occupancy_state`` is
541
+ #: :data:`~coord.drive_sessions_snapshot.OCCUPANCY_OBSERVED`.
542
+ occupied: int | None = None
543
+ repo_occupied: dict[str, int] | None = None
544
+ #: One of :data:`~coord.drive_sessions_snapshot.OCCUPANCY_STATES`.
545
+ occupancy_state: str = OCCUPANCY_UNOBSERVED
546
+ occupancy_observed_at: float | None = None
547
+
313
548
 
314
549
  #: ``table name`` → the DTO that defines its ``/board`` wire shape. These are
315
550
  #: exactly the seven projections ``coord/serve_app.py`` publishes under
@@ -874,10 +874,24 @@ def default_systemd_user_unit_path(unit_name: str = DRIVE_QUEUE_UNIT_NAME) -> Pa
874
874
 
875
875
  def parse_max_parallel_flags_from_execstart(unit_text: str) -> dict[str, int]:
876
876
  """Extract a hardcoded ``--max-parallel``/``--max-parallel-per-repo``
877
- integer from a systemd unit's ``ExecStart=`` line (or, harmlessly, from
878
- the whole unit file's text) (#3408). Pure and independently testable —
879
- the sole reason this is split out from :func:`read_systemd_max_parallel_flags`,
880
- which does the actual (unstubbable) file read.
877
+ integer from a systemd unit's ``ExecStart=`` line — and ONLY that line
878
+ (#3429). Pure and independently testable — the sole reason this is split
879
+ out from :func:`read_systemd_max_parallel_flags`, which does the actual
880
+ (unstubbable) file read.
881
+
882
+ #3429: this used to regex the WHOLE unit file's text, which its own
883
+ docstring called "harmless". It was not — a #2573 explanatory comment in
884
+ the packaged unit (`coord/deploy/coord-drive-queue.service`) mentions
885
+ "--max-parallel-per-repo 2" in prose, describing a drop-in that USED to
886
+ exist and should be deleted, and that comment's `2` was being read back
887
+ as a live systemd override, inventing a flag nobody set, outranking a
888
+ real `coordinator.yml` value, suppressing the real per-repo override
889
+ line, and firing a false "your config has no effect" warning — on the
890
+ one host (the daemon host) where this function's output is trusted.
891
+ Scoping the scan to the `ExecStart=` line only is the fix: systemd
892
+ itself only ever reads flags from there, and comments (whether inline
893
+ `#...` above/around it or, in principle, a stray `#` mid-line) cannot
894
+ masquerade as part of it because they live on other lines entirely.
881
895
 
882
896
  ``--max-parallel-per-repo`` is checked before ``--max-parallel``: both
883
897
  regexes require the character right after the flag name to be a space
@@ -885,20 +899,28 @@ def parse_max_parallel_flags_from_execstart(unit_text: str) -> dict[str, int]:
885
899
  ``--max-parallel`` with a stray ``-per-repo`` suffix — but per-repo is
886
900
  still matched first here for readability, not correctness.
887
901
 
888
- Returns ``{}`` when neither flag appears — indistinguishable, on
889
- purpose, from "this text was not a real unit at all"; the caller
890
- (:func:`read_systemd_max_parallel_flags`) folds an unreadable/missing
891
- file into the same empty result, since both mean "no override known" to
892
- every consumer of this function.
902
+ Returns ``{}`` when there is no ``ExecStart=`` line, or it carries
903
+ neither flag — indistinguishable, on purpose, from "this text was not a
904
+ real unit at all"; the caller (:func:`read_systemd_max_parallel_flags`)
905
+ folds an unreadable/missing file into the same empty result, since both
906
+ mean "no override known" to every consumer of this function.
893
907
  """
908
+ execstart_line = None
909
+ for line in unit_text.splitlines():
910
+ stripped = line.strip()
911
+ if stripped.startswith("ExecStart="):
912
+ execstart_line = stripped
913
+ break
914
+ if execstart_line is None:
915
+ return {}
894
916
  result: dict[str, int] = {}
895
- per_repo_match = re.search(r"--max-parallel-per-repo[ =](\d+)", unit_text)
917
+ per_repo_match = re.search(r"--max-parallel-per-repo[ =](\d+)", execstart_line)
896
918
  if per_repo_match:
897
919
  result["max_parallel_per_repo"] = int(per_repo_match.group(1))
898
920
  # `--max-parallel` must not also match the `--max-parallel-per-repo`
899
921
  # occurrence above — requiring a space/`=` right after `max-parallel`
900
922
  # means the character there is `-` for the per-repo flag, never a match.
901
- max_parallel_match = re.search(r"--max-parallel[ =](\d+)", unit_text)
923
+ max_parallel_match = re.search(r"--max-parallel[ =](\d+)", execstart_line)
902
924
  if max_parallel_match:
903
925
  result["max_parallel"] = int(max_parallel_match.group(1))
904
926
  return result
@@ -966,6 +988,109 @@ def compute_running_occupancy(
966
988
  return occupied, repo_occupied
967
989
 
968
990
 
991
+ @dataclass(frozen=True)
992
+ class ConcurrencyReport:
993
+ """Every concurrency ceiling `coord drive-queue tick` enforces, resolved
994
+ together in the SAME order + SAME primitives ``coord config --effective``
995
+ (`coord.commands.setup._print_effective_concurrency`) already applies
996
+ (#3408), plus current occupancy against each — the one call a daemon-host
997
+ caller should make rather than re-deriving the wiring itself (#3428,
998
+ #2085 "one question, one answer").
999
+
1000
+ ``repo_resolutions`` is EVERY repo's own :class:`CeilingResolution`
1001
+ (#3423), keyed by name — :func:`resolve_repo_ceilings`'s full table.
1002
+ ``repo_overrides`` is the trimmed subset that actually differs from
1003
+ ``max_parallel_per_repo``'s fleet-wide value —
1004
+ :func:`effective_repo_capacities`'s own shape, and also what
1005
+ ``max_parallel``'s own resolution is computed against (a repo with no
1006
+ override contributes the fleet figure to that sum, not its own name).
1007
+ """
1008
+
1009
+ max_parallel: CeilingResolution
1010
+ max_parallel_per_repo: CeilingResolution
1011
+ max_workers: CeilingResolution
1012
+ repo_resolutions: dict[str, CeilingResolution]
1013
+ repo_overrides: dict[str, int]
1014
+ occupied: int
1015
+ repo_occupied: dict[str, int]
1016
+
1017
+
1018
+ def resolve_concurrency_report(
1019
+ *,
1020
+ repo_overrides: Mapping[str, int | None],
1021
+ pipeline_max_parallel: int | None,
1022
+ pipeline_max_parallel_per_repo: int | None,
1023
+ max_workers_cap: int,
1024
+ systemd_flags: Mapping[str, int] | None = None,
1025
+ entries: Sequence["QueueEntry"] = (),
1026
+ board: "BoardView | None" = None,
1027
+ max_attempts: int = DEFAULT_MAX_ATTEMPTS,
1028
+ now: float | None = None,
1029
+ local_host: str | None = None,
1030
+ ) -> ConcurrencyReport:
1031
+ """Resolve every concurrency ceiling in one call (#3428).
1032
+
1033
+ *repo_overrides* is ``{repo_name: repos[].max_parallel or None}`` for
1034
+ EVERY repo in the fleet (not just the overridden ones — see
1035
+ :func:`resolve_repo_ceilings`). *systemd_flags* defaults to a fresh
1036
+ :func:`read_systemd_max_parallel_flags` read of THIS machine's own
1037
+ installed unit when not given (a caller with an already-read dict, e.g.
1038
+ a test, passes it explicitly rather than touching the filesystem).
1039
+
1040
+ *board*/*entries* are `compute_running_occupancy`'s own arguments;
1041
+ *board* left ``None`` (the default) skips occupancy entirely
1042
+ (``occupied=0``, ``repo_occupied={}``) rather than raising — a caller
1043
+ that only wants the ceilings (no live queue state) does not need to
1044
+ fabricate an empty :class:`BoardView`.
1045
+ """
1046
+ flags = systemd_flags if systemd_flags is not None else read_systemd_max_parallel_flags()
1047
+
1048
+ per_repo_resolution = resolve_max_parallel_per_repo(
1049
+ override_value=flags.get("max_parallel_per_repo"),
1050
+ override_source="systemd ExecStart --max-parallel-per-repo",
1051
+ config_value=pipeline_max_parallel_per_repo,
1052
+ )
1053
+ repo_resolutions = resolve_repo_ceilings(repo_overrides, fleet=per_repo_resolution)
1054
+ effective_repo_overrides = effective_repo_capacities(
1055
+ repo_resolutions, fleet_value=per_repo_resolution.value
1056
+ )
1057
+
1058
+ global_resolution = resolve_max_parallel(
1059
+ override_value=flags.get("max_parallel"),
1060
+ override_source="systemd ExecStart --max-parallel",
1061
+ config_value=pipeline_max_parallel,
1062
+ repo_count=len(repo_overrides),
1063
+ max_parallel_per_repo=per_repo_resolution.value,
1064
+ max_workers_cap=max_workers_cap,
1065
+ repo_overrides=effective_repo_overrides,
1066
+ )
1067
+ # `concurrency.max_workers` has exactly one source today — nothing can
1068
+ # beat `coordinator.yml`'s own value — but the wire/report shape stays
1069
+ # uniform across all three ceilings (#3428's own contract), so it is
1070
+ # wrapped in the same `CeilingResolution` shape the other two use, with
1071
+ # an always-empty `losing`.
1072
+ max_workers_resolution = CeilingResolution(
1073
+ "max_workers", max_workers_cap, "coordinator.yml concurrency.max_workers"
1074
+ )
1075
+
1076
+ if board is not None:
1077
+ occupied, repo_occupied = compute_running_occupancy(
1078
+ entries, board, max_attempts, now=now, local_host=local_host
1079
+ )
1080
+ else:
1081
+ occupied, repo_occupied = 0, {}
1082
+
1083
+ return ConcurrencyReport(
1084
+ max_parallel=global_resolution,
1085
+ max_parallel_per_repo=per_repo_resolution,
1086
+ max_workers=max_workers_resolution,
1087
+ repo_resolutions=repo_resolutions,
1088
+ repo_overrides=effective_repo_overrides,
1089
+ occupied=occupied,
1090
+ repo_occupied=repo_occupied,
1091
+ )
1092
+
1093
+
969
1094
  # ── the startup grace window (#1794) ─────────────────────────────────────────
970
1095
  #
971
1096
  # A drive is NOT established the instant `coord drive --tmux` exits 0. #1606's
@@ -0,0 +1,177 @@
1
+ """Tick-refreshed snapshot of this host's live drive tmux sessions (#3428).
2
+
3
+ **Invariant 1 of the ``/board`` read path: read endpoints perform no
4
+ third-party I/O** (``coord.gate_snapshot``'s own opening line, and the
5
+ enforcement test ``tests/test_board_read_path.py::
6
+ test_board_read_makes_zero_gh_calls``, which fails the build on *any*
7
+ subprocess spawned while a board is built).
8
+
9
+ :func:`coord.drive.list_drive_sessions` is a ``tmux list-sessions``
10
+ **subprocess** with a 5 s timeout. The #3428 ``concurrency`` block needs its
11
+ answer — occupancy is computed by :func:`coord.drive_queue.
12
+ compute_running_occupancy`, whose very first question about a ``running``
13
+ entry is "is its drive session live?" — but calling it inline off the board
14
+ handler would put a process spawn (and, on a wedged tmux server, a 5 s stall)
15
+ on the hottest read path in the daemon, once per cold build. That is exactly
16
+ the ``gh``-on-``/board`` mechanism of the #762/#715/#1336 timeout-overrun
17
+ class, with tmux swapped in for GitHub.
18
+
19
+ So the reading moves to the daemon's tick cadence, the same shape
20
+ ``GateSnapshotRefresher`` / ``FleetHealthRefresher`` / ``MachineMetricsSampler``
21
+ already use: :meth:`DriveSessionsRefresher.refresh` (tick side, the ONLY
22
+ subprocess) publishes an immutable :class:`DriveSessionsSnapshot`, and the
23
+ board handler consumes the last one published with a bare attribute read.
24
+
25
+ **The snapshot states its own freshness, and "I did not observe this" is a
26
+ reachable verdict (#2096).** An occupancy count is only as true as the
27
+ session reading behind it, and *two* real conditions leave that reading
28
+ absent rather than merely empty:
29
+
30
+ * the daemon has not taken one yet — a just-restarted ``coord serve``, or a
31
+ deployment with the refresh loop disabled (``COORD_DRIVE_SESSIONS_REFRESH_
32
+ INTERVAL=0``); and
33
+ * the refresh loop stopped — the bare ``asyncio.create_task`` loops in
34
+ ``coord/serve_app.py`` have no supervisor (#2862), so a loop that dies
35
+ stays dead until the daemon restarts, and its last snapshot would otherwise
36
+ keep being served as current forever.
37
+
38
+ In both cases occupancy is reported as ``None`` with an
39
+ :data:`OCCUPANCY_STATES` label saying which, never as a confidently-wrong
40
+ ``0``. A "0 of 4 slots in use" that actually meant "nobody looked" is the
41
+ same defect class as a green gate that only proves the request was issued.
42
+ """
43
+
44
+ from __future__ import annotations
45
+
46
+ import time
47
+ from dataclasses import dataclass, field
48
+ from typing import Any
49
+
50
+ #: How old the last reading may be before it stops counting as current.
51
+ #: Deliberately several multiples of the daemon's default refresh cadence
52
+ #: (``COORD_DRIVE_SESSIONS_REFRESH_INTERVAL``, 15 s) so an ordinary slow tick
53
+ #: — or one pass that lost its race with a 5 s ``tmux`` timeout — does not
54
+ #: flap the label, while a loop that has genuinely stopped (#2862) crosses it
55
+ #: within a minute.
56
+ STALE_AFTER_SECONDS = 90.0
57
+
58
+ #: A reading was taken within :data:`STALE_AFTER_SECONDS` — the occupancy
59
+ #: numbers built from it are current.
60
+ OCCUPANCY_OBSERVED = "observed"
61
+ #: No reading has EVER been taken by this daemon (fresh start, or the refresh
62
+ #: loop is disabled). Occupancy is unknown, not zero.
63
+ OCCUPANCY_UNOBSERVED = "unobserved"
64
+ #: A reading was taken, but too long ago to be evidence about now — the
65
+ #: refresh loop has stalled or died. Occupancy is unknown, not last-known.
66
+ OCCUPANCY_STALE = "stale"
67
+
68
+ #: The closed value set for the ``/board`` ``concurrency.occupancy_state``
69
+ #: field (#3428). Only :data:`OCCUPANCY_OBSERVED` carries numbers.
70
+ OCCUPANCY_STATES: frozenset[str] = frozenset(
71
+ {OCCUPANCY_OBSERVED, OCCUPANCY_UNOBSERVED, OCCUPANCY_STALE}
72
+ )
73
+
74
+
75
+ @dataclass(frozen=True)
76
+ class DriveSessionsSnapshot:
77
+ """One immutable reading of this host's live ``coord-drive-*`` sessions.
78
+
79
+ *keys* are ``coord.drive_queue.entry_key`` strings (``"repo#N"``) —
80
+ exactly what :func:`coord.drive_queue.build_board_view` accepts as its
81
+ ``live_sessions`` argument, so the board's occupancy is computed from the
82
+ identical input ``coord drive-queue tick`` feeds it.
83
+
84
+ *observed_at* is the wall-clock (``time.time()``) moment the reading was
85
+ taken, or ``None`` for the never-refreshed default — the distinction
86
+ :meth:`state` turns into a label. Wall-clock rather than monotonic on
87
+ purpose: it is also carried on the wire so a client can show how old the
88
+ numbers are.
89
+ """
90
+
91
+ keys: frozenset[str] = field(default_factory=frozenset)
92
+ observed_at: float | None = None
93
+
94
+ def state(
95
+ self,
96
+ *,
97
+ now: float | None = None,
98
+ stale_after: float = STALE_AFTER_SECONDS,
99
+ ) -> str:
100
+ """This snapshot's freshness as one of :data:`OCCUPANCY_STATES`."""
101
+ if self.observed_at is None:
102
+ return OCCUPANCY_UNOBSERVED
103
+ age = (time.time() if now is None else now) - self.observed_at
104
+ if age > stale_after:
105
+ return OCCUPANCY_STALE
106
+ return OCCUPANCY_OBSERVED
107
+
108
+ def is_current(
109
+ self,
110
+ *,
111
+ now: float | None = None,
112
+ stale_after: float = STALE_AFTER_SECONDS,
113
+ ) -> bool:
114
+ """Whether occupancy derived from this snapshot may be reported as a
115
+ number at all (``state() == OCCUPANCY_OBSERVED``)."""
116
+ return self.state(now=now, stale_after=stale_after) == OCCUPANCY_OBSERVED
117
+
118
+
119
+ class DriveSessionsRefresher:
120
+ """Owns the current :class:`DriveSessionsSnapshot`; refreshed by the tick.
121
+
122
+ :meth:`snapshot` is what the read path consumes — a bare attribute read
123
+ (atomic under CPython), never I/O. :meth:`refresh` is the only method
124
+ that spawns ``tmux`` and must only ever run from the daemon's tick
125
+ machinery (or a test driving it explicitly).
126
+ """
127
+
128
+ def __init__(self, initial: DriveSessionsSnapshot | None = None) -> None:
129
+ """*initial* seeds the published snapshot — for tests that need a
130
+ specific freshness (a reading from 20 minutes ago, say) without
131
+ waiting on a real tick or spawning ``tmux``. Production callers
132
+ omit it and get the never-refreshed default, whose
133
+ :meth:`DriveSessionsSnapshot.state` is
134
+ :data:`OCCUPANCY_UNOBSERVED`."""
135
+ self._snapshot = initial if initial is not None else DriveSessionsSnapshot()
136
+
137
+ def snapshot(self) -> DriveSessionsSnapshot:
138
+ return self._snapshot
139
+
140
+ # ── the tick-side refresh (the ONLY subprocess) ─────────────────────────
141
+ def refresh(self) -> DriveSessionsSnapshot:
142
+ """Take one ``tmux list-sessions`` reading and publish it.
143
+
144
+ Reads through :func:`coord.drive.list_drive_sessions` rather than
145
+ re-implementing the tmux call, so the board's notion of "which drives
146
+ are live" is literally the same function ``coord drive-queue tick``
147
+ consults before deciding whether a slot is occupied (#2085 "one
148
+ question, one answer") — including its own fail-soft contract, where
149
+ an unavailable tmux and a genuinely idle host both read as "no live
150
+ sessions".
151
+
152
+ Raises nothing of its own; a failure inside ``list_drive_sessions``
153
+ propagates to the caller's loop (which logs and keeps serving the
154
+ PREVIOUS snapshot, which then ages into :data:`OCCUPANCY_STALE` on
155
+ its own if the failures persist). Publishes only after the read
156
+ returned — a pass that raised must never stamp a fresh
157
+ ``observed_at`` on data nobody actually observed.
158
+ """
159
+ from coord.drive import list_drive_sessions # noqa: PLC0415
160
+ from coord.drive_queue import entry_key # noqa: PLC0415
161
+
162
+ rows: list[dict[str, Any]] = list_drive_sessions()
163
+ keys: set[str] = set()
164
+ for row in rows:
165
+ repo = row.get("repo") or ""
166
+ number = row.get("issue")
167
+ if not repo or number is None:
168
+ continue
169
+ try:
170
+ keys.add(entry_key(repo, int(number)))
171
+ except (TypeError, ValueError):
172
+ continue
173
+ snapshot = DriveSessionsSnapshot(
174
+ keys=frozenset(keys), observed_at=time.time()
175
+ )
176
+ self._snapshot = snapshot
177
+ return snapshot