code-coordinator 0.5.290__tar.gz → 0.5.292__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 (892) hide show
  1. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/.github/workflows/test.yml +36 -10
  2. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/PKG-INFO +1 -1
  3. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/code_coordinator.egg-info/PKG-INFO +1 -1
  4. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/code_coordinator.egg-info/SOURCES.txt +3 -1
  5. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/code_coordinator.egg-info/scm_file_list.json +3 -1
  6. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/code_coordinator.egg-info/scm_version.json +2 -2
  7. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/board_schema.py +6 -4
  8. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/board_wire.py +2 -1
  9. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/client.py +15 -1
  10. code_coordinator-0.5.292/coord/deprecation_telemetry.py +102 -0
  11. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/reports.py +194 -0
  12. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/serve_app.py +54 -0
  13. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/usage.py +3 -3
  14. code_coordinator-0.5.292/docs/ADR_COORD_TUI_CI.md +217 -0
  15. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/scripts/codegen.py +124 -45
  16. code_coordinator-0.5.292/tests/test_board_fixture.py +82 -0
  17. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_board_wire.py +2 -1
  18. code_coordinator-0.5.292/tests/test_deprecation_telemetry.py +224 -0
  19. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_dist_name.py +33 -0
  20. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_generated_rust_fixture.py +78 -63
  21. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_reports.py +160 -7
  22. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_sqlite_connect_ratchet.py +13 -0
  23. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/src/app/data.rs +10 -1
  24. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/src/app/types/generated.rs +12 -8
  25. code_coordinator-0.5.290/coord/board_bool_guard.py +0 -83
  26. code_coordinator-0.5.290/tests/test_board_fixture.py +0 -172
  27. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/.claude/commands/board.md +0 -0
  28. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/.claude/commands/complete-session.md +0 -0
  29. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/.claude/commands/coordinator.md +0 -0
  30. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/.githooks/_lib.sh +0 -0
  31. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/.githooks/post-checkout +0 -0
  32. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/.githooks/post-commit +0 -0
  33. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/.githooks/post-merge +0 -0
  34. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  35. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/.github/coord-ci-acceptance.yml +0 -0
  36. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/.github/workflows/auto-release.yml +0 -0
  37. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/.github/workflows/cargo-test.yml +0 -0
  38. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/.github/workflows/publish.yml +0 -0
  39. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/.gitignore +0 -0
  40. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/CLAUDE.md +0 -0
  41. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/GOAL.md +0 -0
  42. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/LICENSE +0 -0
  43. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/MANIFEST.in +0 -0
  44. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/README.md +0 -0
  45. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/code_coordinator.egg-info/dependency_links.txt +0 -0
  46. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/code_coordinator.egg-info/entry_points.txt +0 -0
  47. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/code_coordinator.egg-info/requires.txt +0 -0
  48. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/code_coordinator.egg-info/top_level.txt +0 -0
  49. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/__init__.py +0 -0
  50. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/_board_mapping.py +0 -0
  51. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/acceptance.py +0 -0
  52. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/acceptance_drivers.py +0 -0
  53. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/agent.py +0 -0
  54. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/agent_app.py +0 -0
  55. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/agent_update.py +0 -0
  56. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/agents/opencode/.gitignore +0 -0
  57. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/agents/opencode/agents/work.md +0 -0
  58. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/agents/opencode/routing.jsonc +0 -0
  59. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/approved_work.py +0 -0
  60. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/audit.py +0 -0
  61. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/auto_loop.py +0 -0
  62. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/block_log.py +0 -0
  63. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/board_service.py +0 -0
  64. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/brain.py +0 -0
  65. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/branch_model.py +0 -0
  66. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/bug_intake.py +0 -0
  67. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/cargo_cache.py +0 -0
  68. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/ci_fix.py +0 -0
  69. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/ci_github.py +0 -0
  70. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/ci_gitlab.py +0 -0
  71. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/ci_store.py +0 -0
  72. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/claim.py +0 -0
  73. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/cli.py +0 -0
  74. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/commands/__init__.py +0 -0
  75. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/commands/_common.py +0 -0
  76. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/commands/acceptance.py +0 -0
  77. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/commands/agent_ops.py +0 -0
  78. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/commands/audit.py +0 -0
  79. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/commands/chat.py +0 -0
  80. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/commands/dispatch.py +0 -0
  81. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/commands/dispatch_workers.py +0 -0
  82. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/commands/drive.py +0 -0
  83. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/commands/drive_queue.py +0 -0
  84. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/commands/gate_a.py +0 -0
  85. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/commands/gates.py +0 -0
  86. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/commands/issues.py +0 -0
  87. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/commands/lifecycle.py +0 -0
  88. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/commands/machine.py +0 -0
  89. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/commands/merge.py +0 -0
  90. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/commands/milestone.py +0 -0
  91. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/commands/plan_followup.py +0 -0
  92. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/commands/plans.py +0 -0
  93. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/commands/portal.py +0 -0
  94. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/commands/pr.py +0 -0
  95. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/commands/release.py +0 -0
  96. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/commands/repo.py +0 -0
  97. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/commands/report.py +0 -0
  98. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/commands/review.py +0 -0
  99. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/commands/scorecard.py +0 -0
  100. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/commands/sessions.py +0 -0
  101. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/commands/setup.py +0 -0
  102. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/commands/status.py +0 -0
  103. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/commands/store_migrate.py +0 -0
  104. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/commands/terminal.py +0 -0
  105. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/commands/test_gate.py +0 -0
  106. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/commands/tui.py +0 -0
  107. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/comments.py +0 -0
  108. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/config.py +0 -0
  109. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/config_reload.py +0 -0
  110. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/confirm_test.py +0 -0
  111. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/conflict_fix.py +0 -0
  112. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/dao.py +0 -0
  113. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/dashboard/__init__.py +0 -0
  114. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/dashboard/fixture.py +0 -0
  115. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/dashboard/index.html +0 -0
  116. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/dashboard/server.py +0 -0
  117. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/dashboard/terminal.py +0 -0
  118. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/db.py +0 -0
  119. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/dead_end.py +0 -0
  120. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/decomposition_chat.py +0 -0
  121. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/deploy/README.md +0 -0
  122. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/deploy/coord-agent.service +0 -0
  123. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/deploy/coord-db-backup.service +0 -0
  124. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/deploy/coord-db-backup.sh +0 -0
  125. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/deploy/coord-db-backup.timer +0 -0
  126. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/deploy/coord-drive-queue.service +0 -0
  127. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/deploy/coord-drive-queue.timer +0 -0
  128. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/deploy/coord-failure-notify.service +0 -0
  129. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/deploy/coord-fleet-watchdog.service +0 -0
  130. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/deploy/coord-fleet-watchdog.timer +0 -0
  131. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/deploy/coord-notify.service +0 -0
  132. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/deploy/coord-notify.timer +0 -0
  133. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/deploy/coord-release-propagate.service +0 -0
  134. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/deploy/coord-release-propagate.timer +0 -0
  135. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/deploy/coord-release-window.service +0 -0
  136. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/deploy/coord-release-window.timer +0 -0
  137. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/deploy/coord-serve.service +0 -0
  138. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/deploy/coord-web-dist-build.service +0 -0
  139. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/deploy/coord-web-dist-build.timer +0 -0
  140. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/deploy/coord-web.service +0 -0
  141. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/deploy_manifest.py +0 -0
  142. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/deploy_units.py +0 -0
  143. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/deps.py +0 -0
  144. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/diagnose.py +0 -0
  145. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/dispatch.py +0 -0
  146. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/dist_name.py +0 -0
  147. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/drive.py +0 -0
  148. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/drive_queue.py +0 -0
  149. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/drive_state.py +0 -0
  150. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/events.py +0 -0
  151. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/failure_class.py +0 -0
  152. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/filelock.py +0 -0
  153. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/fleet_config_health.py +0 -0
  154. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/forge_availability.py +0 -0
  155. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/freshness.py +0 -0
  156. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/gate_a.py +0 -0
  157. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/gate_b.py +0 -0
  158. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/gate_snapshot.py +0 -0
  159. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/gates.py +0 -0
  160. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/github_ops.py +0 -0
  161. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/github_throttle.py +0 -0
  162. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/goal.py +0 -0
  163. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/graph_health.py +0 -0
  164. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/health/__init__.py +0 -0
  165. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/health/aggregate.py +0 -0
  166. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/health/checks/__init__.py +0 -0
  167. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/health/checks/agent_install.py +0 -0
  168. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/health/checks/cargo_targets.py +0 -0
  169. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/health/checks/claude_binary.py +0 -0
  170. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/health/checks/coord_web_ci_pin.py +0 -0
  171. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/health/checks/deploy_lane_facts.py +0 -0
  172. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/health/checks/disk.py +0 -0
  173. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/health/checks/fleet_board.py +0 -0
  174. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  175. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/health/checks/fleet_phantom.py +0 -0
  176. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/health/checks/fleet_unit_drift.py +0 -0
  177. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/health/checks/graph.py +0 -0
  178. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/health/checks/graphify_cli.py +0 -0
  179. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/health/checks/index_lock.py +0 -0
  180. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/health/checks/issues_sync_staleness.py +0 -0
  181. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/health/checks/plan_usage.py +0 -0
  182. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/health/checks/release_cordon.py +0 -0
  183. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/health/checks/repo_state.py +0 -0
  184. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/health/checks/spawned_coord.py +0 -0
  185. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/health/checks/stalled_pipeline.py +0 -0
  186. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/health/checks/timer_active.py +0 -0
  187. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/health/checks/toolchain.py +0 -0
  188. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/health/checks/unit_drift.py +0 -0
  189. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/health/checks/unit_enablement.py +0 -0
  190. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/health/checks/worktrees.py +0 -0
  191. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/health/cli.py +0 -0
  192. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/health/context.py +0 -0
  193. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/health/fleet_snapshot.py +0 -0
  194. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/health/models.py +0 -0
  195. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/health/pypi.py +0 -0
  196. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/health/registry.py +0 -0
  197. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/health/render.py +0 -0
  198. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/health/units.py +0 -0
  199. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/hooks.py +0 -0
  200. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/housekeeping.py +0 -0
  201. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/interactive.py +0 -0
  202. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/issue_store.py +0 -0
  203. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/issues_sync_status.py +0 -0
  204. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/liveness_auditor.py +0 -0
  205. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/machine_onboard.py +0 -0
  206. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/machine_pause.py +0 -0
  207. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/merge_queue.py +0 -0
  208. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/milestone_chat.py +0 -0
  209. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/milestone_dispatch.py +0 -0
  210. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/milestone_gate.py +0 -0
  211. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/milestone_order.py +0 -0
  212. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/mock_author.py +0 -0
  213. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/models.py +0 -0
  214. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/network.py +0 -0
  215. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/new_issue_chat.py +0 -0
  216. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/notifier/__init__.py +0 -0
  217. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/notifier/baseline.py +0 -0
  218. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/notifier/cli.py +0 -0
  219. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/notifier/collect.py +0 -0
  220. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/notifier/digest.py +0 -0
  221. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/notifier/models.py +0 -0
  222. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/notifier/predicate.py +0 -0
  223. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/notifier/service.py +0 -0
  224. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/notifier/store.py +0 -0
  225. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/notifier/transport.py +0 -0
  226. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/notify.py +0 -0
  227. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/openapi.py +0 -0
  228. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/overlap_fence.py +0 -0
  229. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/overlap_predict.py +0 -0
  230. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/parentage.py +0 -0
  231. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/parentage_github.py +0 -0
  232. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/pipeline.py +0 -0
  233. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/plan_parser.py +0 -0
  234. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/plans.py +0 -0
  235. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/platform_paths.py +0 -0
  236. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/portal_bridge.py +0 -0
  237. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/portal_store.py +0 -0
  238. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/portal_sync.py +0 -0
  239. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/pr_body_lint.py +0 -0
  240. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/prereqs.py +0 -0
  241. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/progress.py +0 -0
  242. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/providers/__init__.py +0 -0
  243. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/providers/base.py +0 -0
  244. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/providers/claude.py +0 -0
  245. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/providers/claude_pty.py +0 -0
  246. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/providers/opencode.py +0 -0
  247. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/queue_diagnose.py +0 -0
  248. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/reconcile.py +0 -0
  249. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/reconcile_tick.py +0 -0
  250. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/refine_chat.py +0 -0
  251. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/release_cordon.py +0 -0
  252. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/release_propagate.py +0 -0
  253. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/release_verify.py +0 -0
  254. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/release_window.py +0 -0
  255. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/repo_edit.py +0 -0
  256. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/repo_onboard.py +0 -0
  257. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/rest_schema.py +0 -0
  258. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/revalidate.py +0 -0
  259. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/review.py +0 -0
  260. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/scorecard.py +0 -0
  261. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/self_health.py +0 -0
  262. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  263. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  264. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  265. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  266. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  267. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/skills/portal-followup/SKILL.md +0 -0
  268. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/skills/release-now/SKILL.md +0 -0
  269. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  270. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  271. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/skills/update-issue/SKILL.md +0 -0
  272. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/smoke.py +0 -0
  273. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/spend_ceiling.py +0 -0
  274. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/split_work.py +0 -0
  275. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/sql.py +0 -0
  276. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/stage_projection.py +0 -0
  277. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/state.py +0 -0
  278. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/store_migrate.py +0 -0
  279. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/test_author.py +0 -0
  280. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/test_chat.py +0 -0
  281. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/test_orchestrator.py +0 -0
  282. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/test_report.py +0 -0
  283. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/tui_release.py +0 -0
  284. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/usage_limits.py +0 -0
  285. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/usage_rollup.py +0 -0
  286. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coord/worker_events.py +0 -0
  287. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/coordinator.example.yml +0 -0
  288. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/deploy/coord-agent.service +0 -0
  289. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/deploy/coord-db-backup.service +0 -0
  290. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/deploy/coord-db-backup.sh +0 -0
  291. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/deploy/coord-db-backup.timer +0 -0
  292. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/deploy/coord-drive-queue.service +0 -0
  293. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/deploy/coord-drive-queue.timer +0 -0
  294. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/deploy/coord-failure-notify.service +0 -0
  295. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/deploy/coord-failure-notify.sh +0 -0
  296. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/deploy/coord-fleet-watchdog.service +0 -0
  297. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/deploy/coord-fleet-watchdog.timer +0 -0
  298. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/deploy/coord-notify.service +0 -0
  299. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/deploy/coord-notify.timer +0 -0
  300. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/deploy/coord-release-propagate.service +0 -0
  301. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/deploy/coord-release-propagate.timer +0 -0
  302. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/deploy/coord-release-window.service +0 -0
  303. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/deploy/coord-release-window.timer +0 -0
  304. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/deploy/coord-serve.service +0 -0
  305. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/deploy/coord-web-dist-build.service +0 -0
  306. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/deploy/coord-web-dist-build.sh +0 -0
  307. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/deploy/coord-web-dist-build.timer +0 -0
  308. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/deploy/coord-web-rollback.sh +0 -0
  309. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/deploy/coord-web.service +0 -0
  310. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/deploy/node-shim.sh +0 -0
  311. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  312. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/docs/ADR_COORD_WEB_CI.md +0 -0
  313. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/docs/ADR_COORD_WEB_DIST.md +0 -0
  314. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/docs/AGENT_OPERATIONS.md +0 -0
  315. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/docs/ARCHITECTURE.md +0 -0
  316. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/docs/ARCH_SECURITY_GATES.md +0 -0
  317. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/docs/COCKPIT.md +0 -0
  318. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/docs/CONTROL_CENTER.md +0 -0
  319. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/docs/COST_DISCIPLINE.md +0 -0
  320. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/docs/CROSS_PLATFORM.md +0 -0
  321. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/docs/CUSTOMER_FACING_APPS.md +0 -0
  322. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/docs/CUSTOMER_PORTAL.md +0 -0
  323. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/docs/DRIVE_QUEUE.md +0 -0
  324. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/docs/EPHEMERAL_WORKERS.md +0 -0
  325. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/docs/FORGE_MIGRATION.md +0 -0
  326. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/docs/GRAPHIFY_SETUP.md +0 -0
  327. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/docs/ISSUE_GUIDANCE.md +0 -0
  328. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/docs/MAC_MINI.md +0 -0
  329. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  330. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/docs/NOTIFIER.md +0 -0
  331. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/docs/OPENCODE_VERIFICATION.md +0 -0
  332. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/docs/OPERATING_GOTCHAS.md +0 -0
  333. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/docs/OPERATOR_GUIDES.md +0 -0
  334. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/docs/ORACLE_LOOP.md +0 -0
  335. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/docs/PHONE_WEBAPP.md +0 -0
  336. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/docs/PIPELINE_V2.md +0 -0
  337. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/docs/PLATFORM_EVOLUTION.md +0 -0
  338. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/docs/SECOND_BACKEND.md +0 -0
  339. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/docs/STORE_SERVICE.md +0 -0
  340. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  341. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/docs/WEB_CONTROL_CENTER.md +0 -0
  342. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/docs/WSL_WINDOWS_WORKER.md +0 -0
  343. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/docs/mocks/web/README.md +0 -0
  344. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/docs/mocks/web/_tokens.css +0 -0
  345. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/docs/mocks/web/issue-detail.html +0 -0
  346. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/docs/mocks/web/pipeline-narrow.html +0 -0
  347. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/docs/mocks/web/pipeline-wide.html +0 -0
  348. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/graphify-out/.gitignore +0 -0
  349. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/install-agent.sh +0 -0
  350. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/pyproject.toml +0 -0
  351. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/scripts/audit_review_verdict_overrides.py +0 -0
  352. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  353. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/scripts/azure-workers/build-worker-image.sh +0 -0
  354. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/scripts/azure-workers/coordinator-machine.py +0 -0
  355. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/scripts/azure-workers/epic-down.sh +0 -0
  356. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/scripts/azure-workers/epic-up.sh +0 -0
  357. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/scripts/azure-workers/preflight.sh +0 -0
  358. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/scripts/azure-workers/provision-worker.sh +0 -0
  359. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  360. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  361. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/scripts/azure-workers/verify-github-token.sh +0 -0
  362. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/scripts/check_gh_argv_containment.py +0 -0
  363. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/scripts/coord-test-runner.sh +0 -0
  364. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/scripts/coord-venv-rollback.sh +0 -0
  365. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/scripts/drive-batch.sh +0 -0
  366. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/scripts/fleet_watchdog.py +0 -0
  367. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/scripts/gen_board_fixture.py +0 -0
  368. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/scripts/gen_mock_index.py +0 -0
  369. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/scripts/next_release_tag.py +0 -0
  370. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/scripts/run_tests_in_populated_home.sh +0 -0
  371. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/scripts/run_tests_without_gh.sh +0 -0
  372. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/scripts/smoke_437_interactive.py +0 -0
  373. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/scripts/verify_878_review_capture.py +0 -0
  374. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/scripts/verify_release_published.py +0 -0
  375. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/scripts/verify_release_wheel.py +0 -0
  376. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/setup.cfg +0 -0
  377. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/SMOKE_SET.md +0 -0
  378. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/__init__.py +0 -0
  379. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/acceptance/ms-37/conftest.py +0 -0
  380. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/acceptance/ms-37/contract.md +0 -0
  381. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/acceptance/ms-37/manifest.yml +0 -0
  382. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  383. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  384. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/acceptance/ms-51/contract.md +0 -0
  385. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  386. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  387. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/acceptance/ms-51/manifest.yml +0 -0
  388. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  389. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/acceptance/ms-51/tsconfig.json +0 -0
  390. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  391. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/backends.py +0 -0
  392. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/conftest.py +0 -0
  393. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/fixtures/board-pipeline-basic.json +0 -0
  394. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  395. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  396. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  397. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  398. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/fixtures/playwright/all_pass.json +0 -0
  399. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  400. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/fixtures/playwright/mixed_fail.json +0 -0
  401. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  402. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  403. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/fixtures/playwright/skip.json +0 -0
  404. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/fixtures/playwright/truncated.json +0 -0
  405. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  406. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  407. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  408. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  409. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  410. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  411. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  412. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  413. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_acceptance.py +0 -0
  414. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_acceptance_drivers.py +0 -0
  415. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_agent.py +0 -0
  416. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_agent_api_error.py +0 -0
  417. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_agent_app.py +0 -0
  418. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_agent_branch_base.py +0 -0
  419. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_agent_branch_capture.py +0 -0
  420. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_agent_config_free_1712.py +0 -0
  421. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_agent_deploy_units_endpoint.py +0 -0
  422. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_agent_dirty_worktree.py +0 -0
  423. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  424. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_agent_graph_self_heal.py +0 -0
  425. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_agent_health_h3.py +0 -0
  426. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_agent_idle_restart.py +0 -0
  427. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_agent_push_failure.py +0 -0
  428. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_agent_reap.py +0 -0
  429. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_agent_repos_and_pull.py +0 -0
  430. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_agent_restart_services_endpoint.py +0 -0
  431. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_agent_skills_self_heal.py +0 -0
  432. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_agent_startup_diagnostics.py +0 -0
  433. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_agent_update.py +0 -0
  434. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_agent_update_bluegreen.py +0 -0
  435. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_agent_usage_limit.py +0 -0
  436. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_agent_zero_commit.py +0 -0
  437. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_ambient_home_isolation.py +0 -0
  438. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_approve_dependency_busy_2804.py +0 -0
  439. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_approve_reject_plan.py +0 -0
  440. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_approve_usage_gate.py +0 -0
  441. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_approved_work_2532.py +0 -0
  442. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_assignment_already_recorded_daemon.py +0 -0
  443. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_audit_log.py +0 -0
  444. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_audit_outcome.py +0 -0
  445. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_audit_query.py +0 -0
  446. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_auto_loop.py +0 -0
  447. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_auto_release_publish_2035.py +0 -0
  448. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_backend_selection.py +0 -0
  449. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_base_checkout_restore.py +0 -0
  450. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_block_log.py +0 -0
  451. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_board_cap_762.py +0 -0
  452. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_board_read_path.py +0 -0
  453. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_board_schema.py +0 -0
  454. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_board_service.py +0 -0
  455. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_board_state.py +0 -0
  456. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_brain.py +0 -0
  457. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_branch_model.py +0 -0
  458. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_bug_intake.py +0 -0
  459. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_build_worker_image_env_update.py +0 -0
  460. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_cargo_cache.py +0 -0
  461. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_check_gh_argv_containment.py +0 -0
  462. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_ci_acceptance_gate_1950.py +0 -0
  463. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_ci_fix.py +0 -0
  464. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_ci_gitlab.py +0 -0
  465. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_ci_parity_2091.py +0 -0
  466. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_ci_store.py +0 -0
  467. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_claim.py +0 -0
  468. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_claude_md_budget.py +0 -0
  469. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_cli_acceptance.py +0 -0
  470. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_cli_assign.py +0 -0
  471. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  472. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_cli_assign_interactive_remote.py +0 -0
  473. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_cli_assign_provider.py +0 -0
  474. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  475. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_cli_audit.py +0 -0
  476. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_cli_chat_continue.py +0 -0
  477. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_cli_decide.py +0 -0
  478. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_cli_diagnose_config_provenance.py +0 -0
  479. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_cli_diagnose_forge_availability.py +0 -0
  480. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_cli_diagnose_graph.py +0 -0
  481. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_cli_diagnose_self.py +0 -0
  482. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_cli_doctor.py +0 -0
  483. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_cli_doctor_config_free_1801.py +0 -0
  484. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  485. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_cli_drive.py +0 -0
  486. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_cli_drive_queue.py +0 -0
  487. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_cli_escalate.py +0 -0
  488. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_cli_fix_headless_review.py +0 -0
  489. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_cli_gate_a.py +0 -0
  490. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_cli_install_drift.py +0 -0
  491. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_cli_install_skills.py +0 -0
  492. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_cli_issue_comment.py +0 -0
  493. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_cli_issue_create_label.py +0 -0
  494. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_cli_issue_reopen.py +0 -0
  495. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_cli_issue_view_list.py +0 -0
  496. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_cli_merge.py +0 -0
  497. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_cli_milestone_assign.py +0 -0
  498. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_cli_milestone_capture.py +0 -0
  499. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_cli_milestone_chat_add_child.py +0 -0
  500. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_cli_milestone_dispatch.py +0 -0
  501. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_cli_milestone_gate_b.py +0 -0
  502. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_cli_milestone_gate_c.py +0 -0
  503. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_cli_milestone_order.py +0 -0
  504. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  505. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_cli_milestone_ship.py +0 -0
  506. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_cli_network.py +0 -0
  507. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_cli_new_issue_chat.py +0 -0
  508. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_cli_plans.py +0 -0
  509. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_cli_portal.py +0 -0
  510. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_cli_pr.py +0 -0
  511. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_cli_pull_artifact.py +0 -0
  512. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_cli_queue.py +0 -0
  513. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_cli_reattach_sessions.py +0 -0
  514. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_cli_refine_board.py +0 -0
  515. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_cli_release_preflight.py +0 -0
  516. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_cli_release_propagate.py +0 -0
  517. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_cli_release_window.py +0 -0
  518. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_cli_repo_2220.py +0 -0
  519. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
  520. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_cli_scorecard.py +0 -0
  521. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_cli_set_review_findings.py +0 -0
  522. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_cli_status_advisory_terminal.py +0 -0
  523. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_cli_status_contested_tag.py +0 -0
  524. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_cli_status_merge_queue.py +0 -0
  525. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_cli_status_provider.py +0 -0
  526. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_cli_status_review_finalizing.py +0 -0
  527. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_cli_status_test_failed_tag.py +0 -0
  528. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_cli_status_usage_limit.py +0 -0
  529. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_cli_sync_comments_873.py +0 -0
  530. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_cli_test_plan.py +0 -0
  531. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_cli_track.py +0 -0
  532. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_cli_tui_update.py +0 -0
  533. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_cli_wait.py +0 -0
  534. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_client_base_install.py +0 -0
  535. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_commands_common.py +0 -0
  536. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_comments.py +0 -0
  537. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_completion_summary.py +0 -0
  538. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_config.py +0 -0
  539. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_config_acceptance.py +0 -0
  540. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_config_audit.py +0 -0
  541. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_config_pricing.py +0 -0
  542. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  543. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_config_usage_gate.py +0 -0
  544. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_confirm_test.py +0 -0
  545. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_conflict_fix.py +0 -0
  546. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_conflict_fix_semantic.py +0 -0
  547. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
  548. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_coord_test.py +0 -0
  549. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_coord_test_runner_baseline.py +0 -0
  550. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_coord_test_runner_populated_home.py +0 -0
  551. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_coord_test_runner_routing.py +0 -0
  552. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_coord_test_runner_toolchain.py +0 -0
  553. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_coord_uat.py +0 -0
  554. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_coord_web_sse_restart_live.py +0 -0
  555. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_coordinator_machine.py +0 -0
  556. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_cross_platform_imports.py +0 -0
  557. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_dao.py +0 -0
  558. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_dashboard.py +0 -0
  559. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_dashboard_fixture.py +0 -0
  560. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_dashboard_terminal.py +0 -0
  561. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_dashboard_terminal_live.py +0 -0
  562. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_db.py +0 -0
  563. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_dead_end.py +0 -0
  564. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_decomposition_chat.py +0 -0
  565. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_deploy_coord_db_backup.py +0 -0
  566. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_deploy_coord_web_dist.py +0 -0
  567. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_deploy_coord_web_rollback.py +0 -0
  568. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_deploy_drive_queue_unit.py +0 -0
  569. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_deploy_failure_notify_unit.py +0 -0
  570. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_deploy_manifest.py +0 -0
  571. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_deploy_notify_unit.py +0 -0
  572. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_deploy_units_lane.py +0 -0
  573. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_deploy_web_unit.py +0 -0
  574. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_deps.py +0 -0
  575. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_diagnose.py +0 -0
  576. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_dispatch.py +0 -0
  577. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_dispatch_target_validation.py +0 -0
  578. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_done_housekeeping.py +0 -0
  579. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_drive.py +0 -0
  580. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_drive_queue.py +0 -0
  581. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_drive_queue_blocked_rendering.py +0 -0
  582. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_drive_queue_launch_argv.py +0 -0
  583. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
  584. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_drive_queue_roll_pending.py +0 -0
  585. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
  586. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_drive_state.py +0 -0
  587. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_drive_tmux.py +0 -0
  588. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_epic_up_capability_detection.py +0 -0
  589. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  590. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_epic_up_image_provenance.py +0 -0
  591. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_errors.py +0 -0
  592. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_events.py +0 -0
  593. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_failure_class.py +0 -0
  594. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_filelock.py +0 -0
  595. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  596. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_fix_of_force_override.py +0 -0
  597. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_fleet_config_health.py +0 -0
  598. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_fleet_health_probes.py +0 -0
  599. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_fleet_health_snapshot.py +0 -0
  600. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_fleet_watchdog.py +0 -0
  601. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_forge_availability.py +0 -0
  602. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_freshness.py +0 -0
  603. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_gate_a.py +0 -0
  604. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_gate_b.py +0 -0
  605. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_gate_snapshot_staleness.py +0 -0
  606. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_gates.py +0 -0
  607. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  608. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_gen_mock_index.py +0 -0
  609. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_generated_types_fixture.py +0 -0
  610. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_github_ops.py +0 -0
  611. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_github_throttle.py +0 -0
  612. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_goal.py +0 -0
  613. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_graph_health.py +0 -0
  614. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_graph_selfheal_absent_2237.py +0 -0
  615. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_handoff.py +0 -0
  616. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_health_checks.py +0 -0
  617. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_health_cli.py +0 -0
  618. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_health_cli_graph.py +0 -0
  619. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_health_config.py +0 -0
  620. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_health_context.py +0 -0
  621. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_health_coord_web_ci_pin.py +0 -0
  622. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_health_deploy_lane_facts.py +0 -0
  623. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_health_fix.py +0 -0
  624. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_health_incident_regression.py +0 -0
  625. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_health_issues_sync_staleness.py +0 -0
  626. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_health_pypi.py +0 -0
  627. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_health_registry.py +0 -0
  628. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_health_release_cordon_probe.py +0 -0
  629. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_health_timer_active.py +0 -0
  630. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_health_toolchain.py +0 -0
  631. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_health_unit_drift.py +0 -0
  632. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_health_unit_enablement.py +0 -0
  633. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_hooks.py +0 -0
  634. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_human_attended_437.py +0 -0
  635. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_init.py +0 -0
  636. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_install_agent_venv_2911.py +0 -0
  637. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_integration.py +0 -0
  638. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_interactive_briefing_echo.py +0 -0
  639. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_interactive_pane_log_2541.py +0 -0
  640. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_interactive_prefill_state.py +0 -0
  641. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_interactive_session_relaunch.py +0 -0
  642. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_interactive_test_verdict_backstop.py +0 -0
  643. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_interactive_token_attribution.py +0 -0
  644. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_interactive_worktree.py +0 -0
  645. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_issue_store_seam.py +0 -0
  646. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_issues_sync_status.py +0 -0
  647. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_liveness_auditor.py +0 -0
  648. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_liveness_notify.py +0 -0
  649. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_lock_contention_ratchet.py +0 -0
  650. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_machine_onboard.py +0 -0
  651. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_machine_pause.py +0 -0
  652. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_merge_queue.py +0 -0
  653. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_merge_verify.py +0 -0
  654. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_milestone_chat.py +0 -0
  655. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_milestone_dispatch.py +0 -0
  656. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_milestone_gate.py +0 -0
  657. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_milestone_order.py +0 -0
  658. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_milestone_seam.py +0 -0
  659. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_mock_author.py +0 -0
  660. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_model_tiering.py +0 -0
  661. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_models.py +0 -0
  662. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_models_config_labels.py +0 -0
  663. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_needs_attention.py +0 -0
  664. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_network.py +0 -0
  665. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_new_issue_chat.py +0 -0
  666. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_next_release_tag.py +0 -0
  667. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_node_shim.py +0 -0
  668. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_notifier_baseline.py +0 -0
  669. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_notifier_cli.py +0 -0
  670. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_notifier_collect.py +0 -0
  671. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_notifier_config.py +0 -0
  672. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_notifier_drive_seam.py +0 -0
  673. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_notifier_isolation.py +0 -0
  674. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_notifier_predicate.py +0 -0
  675. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_notifier_quiet_hours.py +0 -0
  676. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_notifier_service.py +0 -0
  677. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_notify.py +0 -0
  678. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_notify_drain.py +0 -0
  679. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_openapi.py +0 -0
  680. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_operational_defaults.py +0 -0
  681. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_overlap_fence.py +0 -0
  682. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_overlap_predict.py +0 -0
  683. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_packaged_deploy_units.py +0 -0
  684. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_parentage.py +0 -0
  685. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_paste_landed.py +0 -0
  686. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
  687. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_pipeline.py +0 -0
  688. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_plan_followup_approve_plan_command.py +0 -0
  689. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_plan_followup_pr_command.py +0 -0
  690. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_plan_followup_review_command.py +0 -0
  691. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_plan_only.py +0 -0
  692. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_plan_parser.py +0 -0
  693. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_platform_paths.py +0 -0
  694. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_portal_bridge.py +0 -0
  695. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_portal_config.py +0 -0
  696. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_portal_store.py +0 -0
  697. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_portal_sync.py +0 -0
  698. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_pr_body_lint.py +0 -0
  699. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_prereqs.py +0 -0
  700. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_production_db_guard.py +0 -0
  701. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_progress.py +0 -0
  702. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_provider_seam.py +0 -0
  703. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_providers.py +0 -0
  704. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_providers_config_labels.py +0 -0
  705. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_providers_pty.py +0 -0
  706. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_quiet_hours.py +0 -0
  707. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_quiet_hours_store_2146.py +0 -0
  708. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_reap_merged_sessions.py +0 -0
  709. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_reap_stale_interactive_tick.py +0 -0
  710. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_reconcile.py +0 -0
  711. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_reconcile_branch.py +0 -0
  712. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_reconcile_completions.py +0 -0
  713. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
  714. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_reconcile_merges.py +0 -0
  715. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_reconcile_no_agent_record.py +0 -0
  716. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_reconcile_tick.py +0 -0
  717. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_reconcile_usage_limit_done.py +0 -0
  718. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_refine_chat.py +0 -0
  719. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_release_cordon_2101.py +0 -0
  720. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  721. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_release_cordon_deadlock_2240.py +0 -0
  722. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_release_cordon_stuck_2490.py +0 -0
  723. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_release_propagate.py +0 -0
  724. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_release_propagate_threshold.py +0 -0
  725. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_release_roll_between_legs_2854.py +0 -0
  726. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_release_roll_window_handoff.py +0 -0
  727. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_release_unified_1242.py +0 -0
  728. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_release_verify.py +0 -0
  729. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_release_window.py +0 -0
  730. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_remote_auto_prune.py +0 -0
  731. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_remote_interactive_reaper.py +0 -0
  732. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_repo_add.py +0 -0
  733. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_repo_edit_2220.py +0 -0
  734. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_repo_graph_fleet_2237.py +0 -0
  735. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_repo_onboard_2220.py +0 -0
  736. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_report_result_push.py +0 -0
  737. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_retry.py +0 -0
  738. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_retry_advisory_1606.py +0 -0
  739. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_retry_type_1636.py +0 -0
  740. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_revalidate.py +0 -0
  741. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_review.py +0 -0
  742. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_review_end_review_without_verdict.py +0 -0
  743. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_review_parse_failure_diagnostic.py +0 -0
  744. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_review_reaffirm.py +0 -0
  745. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_review_state.py +0 -0
  746. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_review_verdict_backstop.py +0 -0
  747. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_review_verdict_override_audit.py +0 -0
  748. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_review_verdict_relay.py +0 -0
  749. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_review_zero_commits.py +0 -0
  750. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_scoped_review_wiring.py +0 -0
  751. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_scorecard.py +0 -0
  752. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_self_health.py +0 -0
  753. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_serve.py +0 -0
  754. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_serve_app_board_trim.py +0 -0
  755. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_serve_rest_routes.py +0 -0
  756. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_session.py +0 -0
  757. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_slice_issue_attribution.py +0 -0
  758. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_smoke.py +0 -0
  759. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_smoke_live_checkout_restore.py +0 -0
  760. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_smoke_workflow.py +0 -0
  761. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_spend_ceiling.py +0 -0
  762. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_spend_ceiling_coordinator.py +0 -0
  763. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_split.py +0 -0
  764. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_split_work.py +0 -0
  765. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_sql_dialect.py +0 -0
  766. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_stage_projection.py +0 -0
  767. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_stale_busy_reviewer_697.py +0 -0
  768. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_stalled_pipeline.py +0 -0
  769. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_state.py +0 -0
  770. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_state_review_findings_daemon.py +0 -0
  771. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_status_fleet_footer.py +0 -0
  772. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_stop_1567.py +0 -0
  773. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_store_contract.py +0 -0
  774. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_store_migrate.py +0 -0
  775. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_stuck.py +0 -0
  776. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
  777. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_terminal_command.py +0 -0
  778. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_test_author.py +0 -0
  779. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_test_chat.py +0 -0
  780. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_test_orchestrator.py +0 -0
  781. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_test_report.py +0 -0
  782. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_test_verdict_parsing.py +0 -0
  783. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_test_verdict_transcript_floor.py +0 -0
  784. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_text_io_encoding_audit.py +0 -0
  785. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_thin_client_board_audit.py +0 -0
  786. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_thin_client_config_load_1080.py +0 -0
  787. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_thin_client_daemon_routing_906.py +0 -0
  788. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_tmux_host.py +0 -0
  789. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_tmux_session.py +0 -0
  790. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_transcript_floor.py +0 -0
  791. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_usage.py +0 -0
  792. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_usage_limits.py +0 -0
  793. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_usage_rollup.py +0 -0
  794. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_venv_live_install_2121.py +0 -0
  795. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_version_single_source.py +0 -0
  796. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_watch.py +0 -0
  797. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  798. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_worker_env_venv_isolation.py +0 -0
  799. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_worker_events.py +0 -0
  800. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_worker_image_pin_sync.py +0 -0
  801. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_worker_safety.py +0 -0
  802. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_worker_test_scoping.py +0 -0
  803. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_worktree.py +0 -0
  804. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  805. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/test_write_parity.py +0 -0
  806. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tests/write_parity.py +0 -0
  807. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/.github/workflows/release-tui.yml +0 -0
  808. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/Cargo.lock +0 -0
  809. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/Cargo.toml +0 -0
  810. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/cargo-config-local-quadraui.toml.example +0 -0
  811. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/src/app/approved.rs +0 -0
  812. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/src/app/audit.rs +0 -0
  813. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/src/app/chat.rs +0 -0
  814. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/src/app/dialogs.rs +0 -0
  815. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/src/app/doc_tabs.rs +0 -0
  816. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/src/app/drive.rs +0 -0
  817. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/src/app/drive_queue.rs +0 -0
  818. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/src/app/escalation.rs +0 -0
  819. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/src/app/events.rs +0 -0
  820. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/src/app/fixtures.rs +0 -0
  821. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/src/app/fleet_health.rs +0 -0
  822. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/src/app/fleet_sessions.rs +0 -0
  823. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/src/app/fleet_terminals.rs +0 -0
  824. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/src/app/format.rs +0 -0
  825. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/src/app/milestone_dag.rs +0 -0
  826. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/src/app/mod.rs +0 -0
  827. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/src/app/msv.rs +0 -0
  828. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/src/app/pipeline.rs +0 -0
  829. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/src/app/plans.rs +0 -0
  830. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/src/app/render.rs +0 -0
  831. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/src/app/reports.rs +0 -0
  832. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/src/app/sessions.rs +0 -0
  833. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/src/app/settings_ui.rs +0 -0
  834. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/src/app/sidebar.rs +0 -0
  835. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/src/app/terminal.rs +0 -0
  836. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/src/app/tests.rs +0 -0
  837. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/src/app/types.rs +0 -0
  838. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/src/app/workspace.rs +0 -0
  839. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/src/bin/gtk.rs +0 -0
  840. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/src/commands.rs +0 -0
  841. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/src/lib.rs +0 -0
  842. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/src/main.rs +0 -0
  843. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/src/settings.rs +0 -0
  844. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/tests/acceptance/ms-33/audit_1039.rs +0 -0
  845. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/tests/acceptance/ms-33/contract.md +0 -0
  846. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/tests/acceptance/ms-33/manifest.yml +0 -0
  847. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  848. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  849. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  850. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  851. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/tests/acceptance/ms-38/contract.md +0 -0
  852. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/tests/acceptance/ms-38/manifest.yml +0 -0
  853. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  854. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  855. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  856. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  857. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  858. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  859. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  860. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  861. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  862. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  863. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/tests/acceptance/ms-65/board_split_2288.rs +0 -0
  864. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
  865. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
  866. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/tests/acceptance/ms-65/contract.md +0 -0
  867. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
  868. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/tests/acceptance/ms-65/manifest.yml +0 -0
  869. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
  870. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
  871. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
  872. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
  873. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
  874. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
  875. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
  876. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
  877. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
  878. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
  879. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/tests/acceptance/ms-65/tabs_persistence_2286.rs +0 -0
  880. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/tests/acceptance/ms-67/approved_items_2532.rs +0 -0
  881. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/tests/acceptance/ms-67/contract.md +0 -0
  882. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/tests/acceptance/ms-67/manifest.d/2533.yml +0 -0
  883. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/tests/acceptance/ms-67/manifest.yml +0 -0
  884. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/tests/acceptance/ms-67/mocks/approved-items-chat-opened.screen +0 -0
  885. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/tests/acceptance/ms-67/mocks/approved-items-context-menu.screen +0 -0
  886. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/tests/acceptance/ms-67/mocks/approved-items-detail.screen +0 -0
  887. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/tests/acceptance/ms-67/mocks/approved-items-empty.screen +0 -0
  888. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/tests/acceptance/ms-67/mocks/approved-items-populated.screen +0 -0
  889. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/tests/acceptance/ms-67/pull_decomposition_2533.rs +0 -0
  890. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/tests/acceptance.rs +0 -0
  891. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/tests/cli.rs +0 -0
  892. {code_coordinator-0.5.290 → code_coordinator-0.5.292}/tui/tests/fixtures/board_sample.json +0 -0
@@ -31,6 +31,17 @@ jobs:
31
31
  # testpaths=["tests"]) was the one accidental gap. (ms-51 — Playwright,
32
32
  # never .py either — left this repo entirely with the webapp, #2009.)
33
33
  - run: pytest --ignore=tests/acceptance
34
+ # #2897: the Rust drift gate `tests/test_generated_rust_fixture.py`
35
+ # no longer byte-compares the committed `tui/src/app/types/generated.rs`
36
+ # (see docs/ADR_COORD_TUI_CI.md and the header comment further down
37
+ # this file) — this explicit step stands in for that comparison while
38
+ # `tui/` still lives here. `$COORD_TUI_SRC=.` names this checkout as
39
+ # the coord-tui root (`RUST_OUTPUT_RELPATH` keeps the `tui/` prefix for
40
+ # exactly this reason). One matrix leg only: the generator's output
41
+ # depends on `coord.serve_app.openapi_spec()`, not the Python version.
42
+ - name: python scripts/codegen.py --rust --check
43
+ if: matrix.python-version == '3.12'
44
+ run: COORD_TUI_SRC=. python scripts/codegen.py --rust --check
34
45
  # #2180: the cli-pytest sealed route (acceptance.drivers routes
35
46
  # "coord/**" -> cli-pytest -> tests/acceptance/ms-37) run through the
36
47
  # #2164 CI wrapper instead of a raw `pytest tests/acceptance` call, so
@@ -310,16 +321,31 @@ jobs:
310
321
  # for it to run against, and a job that installs Node to build nothing is
311
322
  # how the previous `acceptance`-on-every-push waste (#2389) started.
312
323
  #
313
- # #1941: `scripts/codegen.py` also generates coord-tui's RUST wire types
314
- # (`--rust`), and unlike the TS half above, `tui/` never left this repo —
315
- # so that drift gate needs no separate job or `coord-web` checkout at all.
316
- # It rides the ordinary `pytest --ignore=tests/acceptance` runs above, as
317
- # `tests/test_generated_rust_fixture.py::
318
- # test_committed_generated_rs_matches_generator_output`, the same way the
319
- # TS-side `tests/test_generated_types_fixture.py` already rides them for
320
- # the half of that check this repo can still make (the generator runs and
321
- # covers every schema; the coord-web byte-comparison itself is that repo's
322
- # own CI, per the paragraph above).
324
+ # #1941/#2897: `scripts/codegen.py` also generates coord-tui's RUST wire
325
+ # types (`--rust`). #2897 gave that half the SAME cross-repo shape as the
326
+ # TS half above (`--out PATH` / `$COORD_TUI_SRC`, no fallback default,
327
+ # docs/ADR_COORD_TUI_CI.md) — but `tui/` has not actually moved out of
328
+ # this repo yet, so unlike the TS byte-comparison (which is now
329
+ # exclusively `coord-web`'s CI job), the Rust byte-comparison has nowhere
330
+ # else to run yet and stays HERE, as an explicit step below rather than a
331
+ # pytest test:
332
+ #
333
+ # COORD_TUI_SRC=. python scripts/codegen.py --rust --check
334
+ #
335
+ # `tests/test_generated_rust_fixture.py` itself is narrowed to what one
336
+ # checkout can prove — the generator runs and covers every schema — same
337
+ # as `tests/test_generated_types_fixture.py`; it no longer byte-compares
338
+ # the committed `tui/src/app/types/generated.rs`. The day coord-tui gets
339
+ # its own checkout + CI, delete the step below (its replacement lives in
340
+ # that CI, installing `code-coordinator[server]` from PyPI exactly as
341
+ # `coord-web`'s does) — no pytest file to un-narrow.
342
+ #
343
+ # The consumer-side INTEGER-backed-bool text-scraping guard
344
+ # (`coord/board_bool_guard.py`) that used to also read Rust source text
345
+ # here is RETIRED as of #2897, not moved — see docs/ADR_COORD_TUI_CI.md:
346
+ # #2895 (Phase 1 of #2894) deleted coord-tui's last direct SQL reader, so
347
+ # `tests/test_board_schema.py`'s DTO-level assertions are now the sole
348
+ # guard against that class.
323
349
 
324
350
  # #2886: a real Postgres 16 service, so `coord/sql.py`'s Postgres branches
325
351
  # (paramstyle translation, upsert idioms, `information_schema`
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-coordinator
3
- Version: 0.5.290
3
+ Version: 0.5.292
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.290
3
+ Version: 0.5.292
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
@@ -39,7 +39,6 @@ coord/approved_work.py
39
39
  coord/audit.py
40
40
  coord/auto_loop.py
41
41
  coord/block_log.py
42
- coord/board_bool_guard.py
43
42
  coord/board_schema.py
44
43
  coord/board_service.py
45
44
  coord/board_wire.py
@@ -65,6 +64,7 @@ coord/dead_end.py
65
64
  coord/decomposition_chat.py
66
65
  coord/deploy_manifest.py
67
66
  coord/deploy_units.py
67
+ coord/deprecation_telemetry.py
68
68
  coord/deps.py
69
69
  coord/diagnose.py
70
70
  coord/dispatch.py
@@ -296,6 +296,7 @@ deploy/coord-web-dist-build.timer
296
296
  deploy/coord-web-rollback.sh
297
297
  deploy/coord-web.service
298
298
  deploy/node-shim.sh
299
+ docs/ADR_COORD_TUI_CI.md
299
300
  docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md
300
301
  docs/ADR_COORD_WEB_CI.md
301
302
  docs/ADR_COORD_WEB_DIST.md
@@ -527,6 +528,7 @@ tests/test_deploy_manifest.py
527
528
  tests/test_deploy_notify_unit.py
528
529
  tests/test_deploy_units_lane.py
529
530
  tests/test_deploy_web_unit.py
531
+ tests/test_deprecation_telemetry.py
530
532
  tests/test_deps.py
531
533
  tests/test_diagnose.py
532
534
  tests/test_dispatch.py
@@ -33,7 +33,6 @@
33
33
  "coord/audit.py",
34
34
  "coord/auto_loop.py",
35
35
  "coord/block_log.py",
36
- "coord/board_bool_guard.py",
37
36
  "coord/board_schema.py",
38
37
  "coord/board_service.py",
39
38
  "coord/board_wire.py",
@@ -117,6 +116,7 @@
117
116
  "coord/deploy/coord-web.service",
118
117
  "coord/deploy_manifest.py",
119
118
  "coord/deploy_units.py",
119
+ "coord/deprecation_telemetry.py",
120
120
  "coord/deps.py",
121
121
  "coord/diagnose.py",
122
122
  "coord/dispatch.py",
@@ -288,6 +288,7 @@
288
288
  "deploy/coord-web-rollback.sh",
289
289
  "deploy/coord-web.service",
290
290
  "deploy/node-shim.sh",
291
+ "docs/ADR_COORD_TUI_CI.md",
291
292
  "docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md",
292
293
  "docs/ADR_COORD_WEB_CI.md",
293
294
  "docs/ADR_COORD_WEB_DIST.md",
@@ -553,6 +554,7 @@
553
554
  "tests/test_deploy_notify_unit.py",
554
555
  "tests/test_deploy_units_lane.py",
555
556
  "tests/test_deploy_web_unit.py",
557
+ "tests/test_deprecation_telemetry.py",
556
558
  "tests/test_deps.py",
557
559
  "tests/test_diagnose.py",
558
560
  "tests/test_dispatch.py",
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "0.5.290",
2
+ "tag": "0.5.292",
3
3
  "distance": 0,
4
- "node": "gd9ef2036c79e6b93ba2c92ee4c1a1756d509370f",
4
+ "node": "g9ed59fdae3fcb49322878ab98ddea03c35c9dcf7",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-29"
@@ -287,10 +287,12 @@ BOARD_PROJECTIONS: dict[str, type] = {
287
287
  #: therefore ship as ``0``/``1``. Their DTO fields are annotated ``int`` on
288
288
  #: purpose; ``tests/test_board_schema.py`` asserts the generated JSON Schema
289
289
  #: types them ``integer`` and never ``boolean``, so the wire shape survives a
290
- #: storage-engine swap (Postgres would make these real ``BOOLEAN``s). This is
291
- #: the DTO-level counterpart of ``coord/board_bool_guard.py``'s consumer-side
292
- #: check against the real Rust wire structs (``tui/src/app/types.rs`` and,
293
- #: since #1941, its generated ``types/generated.rs`` sibling).
290
+ #: storage-engine swap (Postgres would make these real ``BOOLEAN``s). This
291
+ #: WAS the DTO-level counterpart of ``coord/board_bool_guard.py``'s consumer-
292
+ #: side check against the real Rust wire structs (``tui/src/app/types.rs``
293
+ #: and its generated ``types/generated.rs`` sibling, #1941); that
294
+ #: text-scraping check is retired as of #2897 (docs/ADR_COORD_TUI_CI.md) —
295
+ #: this assertion is now the sole remaining guard.
294
296
  INTEGER_BACKED_BOOLEANS: frozenset[str] = frozenset(
295
297
  {"is_interactive", "review_scoped", "hold_after", "no_acceptance"}
296
298
  )
@@ -113,7 +113,8 @@ TRUNCATION_NOTICE = "\n… [truncated on the /board wire — full text: detail e
113
113
  # two: `coord/**` and `tui/**`). Lines carrying it survive the body cut; see
114
114
  # `_machine_readable_residue`. Kept in sync with the Rust side by
115
115
  # tests/test_board_wire.py::test_allowed_glob_marker_matches_the_rust_parser,
116
- # the same cross-language guard posture as coord/board_bool_guard.py.
116
+ # the same cross-language-guard posture the now-retired coord/board_bool_
117
+ # guard.py used (#2897, docs/ADR_COORD_TUI_CI.md).
117
118
  #
118
119
  # Measured cost of the retention: ZERO on today's live board — 0 of 781
119
120
  # issue bodies carry the marker (the house `## Files` convention is a bare
@@ -27,6 +27,7 @@ from typing import Any
27
27
 
28
28
  import httpx
29
29
 
30
+ from coord import __version__
30
31
  from coord._board_mapping import assemble_board, infer_review_state
31
32
  from coord.models import Board
32
33
 
@@ -69,7 +70,20 @@ def resolve_board_service(
69
70
 
70
71
 
71
72
  def _headers(svc: ServiceConfig) -> dict[str, str]:
72
- return {"Authorization": f"Bearer {svc.token}"} if svc.token else {}
73
+ # #1945: every request identifies itself as this package + its running
74
+ # version, whether it's the interactive `coord` CLI, an agent's own
75
+ # pinned `~/.coord-venv`, or the drive-queue runner -- all three are
76
+ # literally this same Python package, just invoked from a different
77
+ # entry point, so there is no finer-grained identity to report short of
78
+ # a caller passing one explicitly (none does today). This is what lets
79
+ # the daemon's deprecated-RPC-route telemetry (coord.deprecation_telemetry)
80
+ # name which client + version is still calling a route marked deprecated
81
+ # in the OpenAPI spec, instead of an unattributed hit that nobody can
82
+ # act on.
83
+ headers = {"X-Coord-Client": "coord-py", "X-Coord-Client-Version": __version__}
84
+ if svc.token:
85
+ headers["Authorization"] = f"Bearer {svc.token}"
86
+ return headers
73
87
 
74
88
 
75
89
  def fetch_board_payload(svc: ServiceConfig, *, timeout: float = _DEFAULT_TIMEOUT) -> dict:
@@ -0,0 +1,102 @@
1
+ """Deprecation-call telemetry for RPC routes (#1945, Phase B of milestone #60).
2
+
3
+ #1944 stamped ``deprecated: true`` on every RPC route a resource-shaped
4
+ route now supersedes (``coord.serve_app.RPC_SUPERSEDED_BY_RESOURCE``) — but
5
+ that is a documentation signal only. Nobody can safely retire one of those
6
+ routes on "we think everyone upgraded": this repo has already found a
7
+ `coord-serve` unit 591 hours stale and a pinned CLI three releases behind
8
+ while driving. Retirement needs a number, not a belief.
9
+
10
+ This module is the write side of that number: :func:`record_deprecated_rpc_call`
11
+ is the single choke point the daemon's ``_DeprecatedRouteTelemetryMiddleware``
12
+ (``coord/serve_app.py``) calls on every request whose path is a deprecated
13
+ RPC route, best-effort and after the fact — capture must never raise into,
14
+ or delay, the request that triggered it. The read side (per-route last
15
+ call / calling clients / versions) is ``coord.reports``' ``deprecated-routes``
16
+ report, folded over the audit rows this writes.
17
+
18
+ Client identity travels over two request headers a calling client sets
19
+ (:data:`CLIENT_HEADER` / :data:`CLIENT_VERSION_HEADER`); a client that
20
+ predates this issue sends neither, and that is recorded as
21
+ :data:`UNKNOWN_CLIENT` rather than dropped — an unattributed call must still
22
+ count against retirement (#1945 acceptance), not vanish from the count.
23
+ """
24
+
25
+ from __future__ import annotations
26
+
27
+ import logging
28
+
29
+ _log = logging.getLogger(__name__)
30
+
31
+ __all__ = [
32
+ "CATEGORY",
33
+ "EVENT_TYPE",
34
+ "CLIENT_HEADER",
35
+ "CLIENT_VERSION_HEADER",
36
+ "UNKNOWN_CLIENT",
37
+ "record_deprecated_rpc_call",
38
+ ]
39
+
40
+ # `coord.audit.query_audit_log(category=...)` filter value — also the value
41
+ # `coord.reports.fold_deprecated_routes` filters on when reading these rows
42
+ # back out. One literal, shared by both ends via this module.
43
+ CATEGORY = "deprecation"
44
+ EVENT_TYPE = "deprecated_rpc_call"
45
+
46
+ # Header names a calling client sets its identity/version on. Starlette's
47
+ # `Request.headers` is case-insensitive, so the exact case here is cosmetic
48
+ # (chosen to match the existing `X-Coord-Schema` convention, #1943).
49
+ CLIENT_HEADER = "X-Coord-Client"
50
+ CLIENT_VERSION_HEADER = "X-Coord-Client-Version"
51
+
52
+ # What an absent/blank client identity or version is recorded as. Never
53
+ # dropped — an unattributed caller is exactly the caller retirement needs to
54
+ # know about most.
55
+ UNKNOWN_CLIENT = "unknown"
56
+
57
+
58
+ def _clean(value: str | None) -> str:
59
+ return (value or "").strip() or UNKNOWN_CLIENT
60
+
61
+
62
+ def record_deprecated_rpc_call(
63
+ route: str,
64
+ *,
65
+ client: str | None,
66
+ client_version: str | None,
67
+ ts: float | None = None,
68
+ ) -> None:
69
+ """Best-effort record of one call to deprecated RPC *route*.
70
+
71
+ Wraps :func:`coord.audit.record_audit` — itself already best-effort and
72
+ non-raising — in its own ``try/except`` so a broken import, a bad
73
+ argument type from a caller, or a DB error can never turn this
74
+ observability hook into a failed or delayed request. This is the ONLY
75
+ posture that satisfies #1945's "must never raise or delay a request":
76
+ the caller (the daemon's request-handling middleware) gets control back
77
+ unconditionally, whether or not the write actually landed.
78
+
79
+ ``client``/``client_version`` missing or blank are recorded as the
80
+ literal string :data:`UNKNOWN_CLIENT` — never dropped, per #1945's
81
+ acceptance bar ("an unattributed call must still block retirement").
82
+ """
83
+ try:
84
+ from coord.audit import record_audit # noqa: PLC0415
85
+
86
+ actor = _clean(client)
87
+ version = _clean(client_version)
88
+ record_audit(
89
+ tier="operational",
90
+ category=CATEGORY,
91
+ event_type=EVENT_TYPE,
92
+ actor=actor,
93
+ summary=f"deprecated RPC call: {route} (client={actor}@{version})",
94
+ ts=ts,
95
+ details={"route": route, "client": actor, "client_version": version},
96
+ )
97
+ except Exception: # noqa: BLE001 — telemetry must never break the caller
98
+ _log.debug(
99
+ "record_deprecated_rpc_call: best-effort write failed for %s",
100
+ route,
101
+ exc_info=True,
102
+ )
@@ -3366,6 +3366,183 @@ def run_trend(
3366
3366
  )
3367
3367
 
3368
3368
 
3369
+ # ── deprecated-routes: evidence for RPC retirement (#1945) ────────────────
3370
+ #
3371
+ # A live snapshot, same posture as `drive-queue-status`: no window, no
3372
+ # `repo` param — a deprecated *route* is not scoped to one repo the way an
3373
+ # issue is. Folds `coord.deprecation_telemetry`'s audit rows (category
3374
+ # "deprecation", written by the daemon's `_DeprecatedRouteTelemetryMiddleware`
3375
+ # on every call to a route in `coord.serve_app.RPC_SUPERSEDED_BY_RESOURCE`)
3376
+ # into one row per deprecated route: last call, distinct calling
3377
+ # client+version pairs, and a total count.
3378
+ #
3379
+ # The one thing this report exists to get right that a log grep would not:
3380
+ # telling "zero calls" (a real, actionable signal — safe to consider for
3381
+ # retirement) apart from "no data collected" (telemetry not running for
3382
+ # THIS route or ANY route — an old daemon build, `audit.level: business`
3383
+ # dropping the operational-tier rows, or the audit table's own retention
3384
+ # trim — which must never be read as "safe"). The distinction is made at
3385
+ # the corpus level: if literally zero deprecation-category rows exist
3386
+ # anywhere (any route), collection cannot be confirmed live, so EVERY route
3387
+ # reads `no_data` rather than the misleadingly reassuring `zero_calls`.
3388
+
3389
+ DEPRECATED_ROUTES_COLUMNS = [
3390
+ "route",
3391
+ "replacement",
3392
+ "status",
3393
+ "last_call",
3394
+ "call_count",
3395
+ "clients",
3396
+ ]
3397
+
3398
+ # One entry per DEPRECATED_ROUTES_COLUMNS entry, same order (#1760).
3399
+ DEPRECATED_ROUTES_COLUMN_META = [
3400
+ ColumnMeta(id="route", label="Route", kind="text", weight=1.5),
3401
+ ColumnMeta(id="replacement", label="Replacement", kind="text", weight=2.5),
3402
+ ColumnMeta(id="status", label="Status", kind="enum"),
3403
+ ColumnMeta(id="last_call", label="Last Call", kind="timestamp"),
3404
+ ColumnMeta(id="call_count", label="Calls", kind="int", align="right"),
3405
+ ColumnMeta(id="clients", label="Clients", kind="list"),
3406
+ ]
3407
+
3408
+ # `status` values. `no_data` and `zero_calls` are BOTH "nothing seen for
3409
+ # this route" — they differ only in whether that absence is trustworthy —
3410
+ # so a client rendering this column must not collapse them to one meaning.
3411
+ DEPRECATED_ROUTE_NO_DATA = "no_data"
3412
+ DEPRECATED_ROUTE_ZERO_CALLS = "zero_calls"
3413
+ DEPRECATED_ROUTE_IN_USE = "in_use"
3414
+
3415
+
3416
+ def fold_deprecated_routes(
3417
+ entries: Iterable[Mapping[str, Any]],
3418
+ generated_at: float,
3419
+ *,
3420
+ routes: Mapping[str, str] | None = None,
3421
+ ) -> ReportResult:
3422
+ """Fold already-fetched deprecation-telemetry audit rows into a
3423
+ per-route snapshot. **Pure** — no DB, no daemon, no clock.
3424
+
3425
+ ``entries`` is whatever ``coord.audit.query_audit_log(category=
3426
+ "deprecation")`` (paginated by the caller — see :func:`run_deprecated_routes`)
3427
+ returned, newest-first. ``routes`` defaults to
3428
+ ``coord.serve_app.RPC_SUPERSEDED_BY_RESOURCE`` so the set of routes this
3429
+ report covers can never drift from the set the daemon actually stamps
3430
+ ``deprecated: true`` on in the served OpenAPI spec (#1944) — there is
3431
+ exactly one source of truth for "which routes are deprecated", and this
3432
+ report reads it rather than redeclaring it (the ``routes=`` override
3433
+ exists purely so this stays a pure function a test can call without
3434
+ importing the daemon module).
3435
+ """
3436
+ if routes is None:
3437
+ from coord.serve_app import RPC_SUPERSEDED_BY_RESOURCE # noqa: PLC0415
3438
+
3439
+ routes = RPC_SUPERSEDED_BY_RESOURCE
3440
+
3441
+ entries = list(entries)
3442
+ any_data = bool(entries)
3443
+
3444
+ by_route: dict[str, list[Mapping[str, Any]]] = {r: [] for r in routes}
3445
+ for entry in entries:
3446
+ details = entry.get("details") or {}
3447
+ route = details.get("route")
3448
+ if route in by_route:
3449
+ by_route[route].append(entry)
3450
+
3451
+ rows: list[dict[str, Any]] = []
3452
+ for route in sorted(routes):
3453
+ calls = sorted(
3454
+ by_route.get(route, []), key=lambda e: e.get("ts") or 0, reverse=True
3455
+ )
3456
+ last_call = calls[0].get("ts") if calls else None
3457
+ clients: list[str] = []
3458
+ seen: set[tuple[str, str]] = set()
3459
+ for call in calls:
3460
+ details = call.get("details") or {}
3461
+ pair = (
3462
+ details.get("client") or "unknown",
3463
+ details.get("client_version") or "unknown",
3464
+ )
3465
+ if pair not in seen:
3466
+ seen.add(pair)
3467
+ clients.append(f"{pair[0]}@{pair[1]}")
3468
+ if calls:
3469
+ status = DEPRECATED_ROUTE_IN_USE
3470
+ elif any_data:
3471
+ status = DEPRECATED_ROUTE_ZERO_CALLS
3472
+ else:
3473
+ status = DEPRECATED_ROUTE_NO_DATA
3474
+ rows.append(
3475
+ {
3476
+ "route": route,
3477
+ "replacement": routes[route],
3478
+ "status": status,
3479
+ "last_call": last_call,
3480
+ "call_count": len(calls),
3481
+ "clients": clients,
3482
+ }
3483
+ )
3484
+
3485
+ notes: list[str] = []
3486
+ if not any_data:
3487
+ notes.append(
3488
+ "No deprecation telemetry has been recorded at all, for any "
3489
+ "route — this may mean genuinely zero calls, or that capture "
3490
+ "is not running (an old daemon build predating #1945, "
3491
+ "`audit.level: business` dropping operational-tier rows, or "
3492
+ "the audit table's own retention trim). Every row above reads "
3493
+ "`no_data`, not `zero_calls` — treat it as UNKNOWN, never as "
3494
+ "evidence it is safe to retire."
3495
+ )
3496
+
3497
+ return ReportResult(
3498
+ report_id="deprecated-routes",
3499
+ generated_at=generated_at,
3500
+ window=(generated_at, generated_at),
3501
+ columns=list(DEPRECATED_ROUTES_COLUMNS),
3502
+ column_meta=list(DEPRECATED_ROUTES_COLUMN_META),
3503
+ rows=rows,
3504
+ notes=notes,
3505
+ )
3506
+
3507
+
3508
+ def _default_fetch_deprecation_entries(
3509
+ generated_at: float,
3510
+ ) -> tuple[list[dict], bool]:
3511
+ return fetch_audit_window(since=0.0, until=generated_at, category="deprecation")
3512
+
3513
+
3514
+ def run_deprecated_routes(
3515
+ *,
3516
+ now: float | None = None,
3517
+ fetch: Callable[[float], tuple[Sequence[Mapping[str, Any]], bool]] | None = None,
3518
+ routes: Mapping[str, str] | None = None,
3519
+ ) -> ReportResult:
3520
+ """Fetch every recorded deprecated-RPC-route call and fold it (#1945).
3521
+
3522
+ ``fetch``/``routes`` are test seams (mirrors every other ``run_*``'s
3523
+ ``fetch=`` seam). Production always walks the FULL audit history
3524
+ (``since=0``), never a recent window — "this route has not been called
3525
+ in months" is exactly the number #1945 exists to produce, and a
3526
+ windowed report would silently hide the very evidence retirement needs.
3527
+ ``query_audit_log`` orders newest-first, so ``last_call`` is accurate
3528
+ even if the walk is truncated by the page cap; only the full
3529
+ client/version set and total ``call_count`` could then be incomplete,
3530
+ which is called out in a note exactly like every other truncated fold
3531
+ in this module.
3532
+ """
3533
+ generated_at = time.time() if now is None else float(now)
3534
+ fetch_fn = _default_fetch_deprecation_entries if fetch is None else fetch
3535
+ entries, truncated = fetch_fn(generated_at)
3536
+ result = fold_deprecated_routes(entries, generated_at, routes=routes)
3537
+ if truncated:
3538
+ result.notes.append(
3539
+ "Audit history walk hit its page cap before covering the full "
3540
+ "history — `clients`/`call_count` may be missing older calls, "
3541
+ "though `last_call` (newest-first order) is still accurate."
3542
+ )
3543
+ return result
3544
+
3545
+
3369
3546
  # ── the catalogue ──────────────────────────────────────────────────────────
3370
3547
 
3371
3548
  SINCE_PRESETS = ("1h", "6h", "24h", "3d", "7d")
@@ -3683,6 +3860,22 @@ TREND = ReportDef(
3683
3860
  )
3684
3861
 
3685
3862
 
3863
+ DEPRECATED_ROUTES = ReportDef(
3864
+ id="deprecated-routes",
3865
+ title="Deprecated RPC Routes",
3866
+ description=(
3867
+ "Per deprecated RPC route (the #1944 superseded-by-resource table): "
3868
+ "last call, distinct calling client+version pairs, and a total "
3869
+ "count — evidence for retirement instead of belief (#1945). "
3870
+ "`status` distinguishes `in_use` from `zero_calls` (a real, "
3871
+ "actionable signal) from `no_data` (telemetry not confirmed live — "
3872
+ "never safe to read as `zero_calls`)."
3873
+ ),
3874
+ params=(),
3875
+ run=run_deprecated_routes,
3876
+ )
3877
+
3878
+
3686
3879
  # ── CSV serialisation (#1765) ──────────────────────────────────────────────
3687
3880
  #
3688
3881
  # One serializer, server-side, for every surface: `coord report run --format
@@ -3863,6 +4056,7 @@ REPORTS: dict[str, ReportDef] = {
3863
4056
  USAGE.id: USAGE,
3864
4057
  QUEUE_OUTCOMES.id: QUEUE_OUTCOMES,
3865
4058
  TREND.id: TREND,
4059
+ DEPRECATED_ROUTES.id: DEPRECATED_ROUTES,
3866
4060
  }
3867
4061
 
3868
4062
 
@@ -453,6 +453,55 @@ class _SchemaNegotiationMiddleware(BaseHTTPMiddleware):
453
453
  )
454
454
 
455
455
 
456
+ class _DeprecatedRouteTelemetryMiddleware(BaseHTTPMiddleware):
457
+ """Record client identity + version on every call to a deprecated RPC
458
+ route (#1945, Phase B of #60 -- retirement needs a number, not a belief).
459
+
460
+ ``RPC_SUPERSEDED_BY_RESOURCE`` (defined further down this module) is the
461
+ single source of truth for "which routes are deprecated" -- the same
462
+ dict :func:`_mark_superseded_rpc_routes` stamps ``deprecated: true``
463
+ with in the served OpenAPI spec (#1944). Matching against it here rather
464
+ than a second hardcoded list means every route the spec calls
465
+ deprecated is automatically covered by telemetry too; they cannot drift
466
+ apart.
467
+
468
+ Innermost middleware by construction (appended last in ``build_app``,
469
+ after gzip / schema negotiation / bearer auth) -- it only ever sees a
470
+ request that has already cleared every earlier gate, so it counts real
471
+ calls that reached a deprecated handler, not requests bounced upstream.
472
+
473
+ Capture happens by calling
474
+ :func:`coord.deprecation_telemetry.record_deprecated_rpc_call`, which is
475
+ itself best-effort and never raises -- but this dispatch method wraps it
476
+ in its own ``try/except`` besides, so even an import failure or a
477
+ surprising ``request.headers`` type can never turn telemetry into a
478
+ broken response. The write is a single local SQLite insert (the same
479
+ ``record_audit`` every board-mutation handler in this file already calls
480
+ synchronously on its own request path), so it adds no meaningfully
481
+ different latency than those existing writes -- there is no separate
482
+ async/background-thread mechanism elsewhere in this file to match, and
483
+ none is warranted here either.
484
+ """
485
+
486
+ async def dispatch(self, request: Request, call_next): # noqa: ANN001, ANN201
487
+ if request.url.path in RPC_SUPERSEDED_BY_RESOURCE:
488
+ try:
489
+ from coord.deprecation_telemetry import ( # noqa: PLC0415
490
+ CLIENT_HEADER,
491
+ CLIENT_VERSION_HEADER,
492
+ record_deprecated_rpc_call,
493
+ )
494
+
495
+ record_deprecated_rpc_call(
496
+ request.url.path,
497
+ client=request.headers.get(CLIENT_HEADER),
498
+ client_version=request.headers.get(CLIENT_VERSION_HEADER),
499
+ )
500
+ except Exception: # noqa: BLE001 — telemetry must never break a request
501
+ pass
502
+ return await call_next(request)
503
+
504
+
456
505
  def _reload_config_if_stale(
457
506
  current: Config, last_mtime: float | None
458
507
  ) -> tuple[Config, float | None]:
@@ -9649,4 +9698,9 @@ def build_app(store: CoordStore, config: Config, *, token: str | None = None) ->
9649
9698
  ]
9650
9699
  if token:
9651
9700
  middleware.append(Middleware(_BearerAuthMiddleware, token=token))
9701
+ # #1945: innermost -- runs closest to the route handler, after schema
9702
+ # negotiation and (if configured) bearer auth have already let the
9703
+ # request through, so telemetry only counts calls that actually reached
9704
+ # a deprecated route's handler.
9705
+ middleware.append(Middleware(_DeprecatedRouteTelemetryMiddleware))
9652
9706
  return Starlette(routes=routes, middleware=middleware, lifespan=_lifespan)
@@ -380,9 +380,9 @@ def fetch_usage_rows(
380
380
  :class:`~coord.models.Assignment` instances — the aggregator consumes the
381
381
  daemon ``/board`` ``assignments`` shape directly, including
382
382
  ``is_interactive``, which is a real DB/wire column but (deliberately,
383
- #748/#632 — see :mod:`coord.board_bool_guard`) not an ``Assignment``
384
- dataclass field, so converting through ``Assignment`` would silently
385
- drop it.
383
+ #748/#632 — see ``coord.board_schema.INTEGER_BACKED_BOOLEANS`` and
384
+ ``tests/test_board_schema.py``) not an ``Assignment`` dataclass field, so
385
+ converting through ``Assignment`` would silently drop it.
386
386
 
387
387
  Remote reads the same ``/board`` endpoint ``coord status`` polls. Local
388
388
  reads the sqlite DB directly via ``SqliteStore.list_assignments()``