code-coordinator 0.5.290__tar.gz → 0.5.291__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 (890) hide show
  1. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/.github/workflows/test.yml +36 -10
  2. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/PKG-INFO +1 -1
  3. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/code_coordinator.egg-info/PKG-INFO +1 -1
  4. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/code_coordinator.egg-info/SOURCES.txt +1 -1
  5. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/code_coordinator.egg-info/scm_file_list.json +1 -1
  6. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/code_coordinator.egg-info/scm_version.json +2 -2
  7. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/board_schema.py +6 -4
  8. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/board_wire.py +2 -1
  9. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/usage.py +3 -3
  10. code_coordinator-0.5.291/docs/ADR_COORD_TUI_CI.md +217 -0
  11. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/scripts/codegen.py +124 -45
  12. code_coordinator-0.5.291/tests/test_board_fixture.py +82 -0
  13. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_board_wire.py +2 -1
  14. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_dist_name.py +33 -0
  15. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_generated_rust_fixture.py +78 -63
  16. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/src/app/types/generated.rs +12 -8
  17. code_coordinator-0.5.290/coord/board_bool_guard.py +0 -83
  18. code_coordinator-0.5.290/tests/test_board_fixture.py +0 -172
  19. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/.claude/commands/board.md +0 -0
  20. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/.claude/commands/complete-session.md +0 -0
  21. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/.claude/commands/coordinator.md +0 -0
  22. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/.githooks/_lib.sh +0 -0
  23. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/.githooks/post-checkout +0 -0
  24. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/.githooks/post-commit +0 -0
  25. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/.githooks/post-merge +0 -0
  26. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  27. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/.github/coord-ci-acceptance.yml +0 -0
  28. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/.github/workflows/auto-release.yml +0 -0
  29. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/.github/workflows/cargo-test.yml +0 -0
  30. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/.github/workflows/publish.yml +0 -0
  31. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/.gitignore +0 -0
  32. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/CLAUDE.md +0 -0
  33. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/GOAL.md +0 -0
  34. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/LICENSE +0 -0
  35. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/MANIFEST.in +0 -0
  36. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/README.md +0 -0
  37. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/code_coordinator.egg-info/dependency_links.txt +0 -0
  38. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/code_coordinator.egg-info/entry_points.txt +0 -0
  39. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/code_coordinator.egg-info/requires.txt +0 -0
  40. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/code_coordinator.egg-info/top_level.txt +0 -0
  41. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/__init__.py +0 -0
  42. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/_board_mapping.py +0 -0
  43. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/acceptance.py +0 -0
  44. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/acceptance_drivers.py +0 -0
  45. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/agent.py +0 -0
  46. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/agent_app.py +0 -0
  47. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/agent_update.py +0 -0
  48. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/agents/opencode/.gitignore +0 -0
  49. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/agents/opencode/agents/work.md +0 -0
  50. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/agents/opencode/routing.jsonc +0 -0
  51. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/approved_work.py +0 -0
  52. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/audit.py +0 -0
  53. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/auto_loop.py +0 -0
  54. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/block_log.py +0 -0
  55. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/board_service.py +0 -0
  56. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/brain.py +0 -0
  57. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/branch_model.py +0 -0
  58. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/bug_intake.py +0 -0
  59. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/cargo_cache.py +0 -0
  60. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/ci_fix.py +0 -0
  61. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/ci_github.py +0 -0
  62. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/ci_gitlab.py +0 -0
  63. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/ci_store.py +0 -0
  64. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/claim.py +0 -0
  65. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/cli.py +0 -0
  66. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/client.py +0 -0
  67. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/commands/__init__.py +0 -0
  68. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/commands/_common.py +0 -0
  69. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/commands/acceptance.py +0 -0
  70. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/commands/agent_ops.py +0 -0
  71. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/commands/audit.py +0 -0
  72. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/commands/chat.py +0 -0
  73. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/commands/dispatch.py +0 -0
  74. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/commands/dispatch_workers.py +0 -0
  75. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/commands/drive.py +0 -0
  76. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/commands/drive_queue.py +0 -0
  77. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/commands/gate_a.py +0 -0
  78. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/commands/gates.py +0 -0
  79. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/commands/issues.py +0 -0
  80. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/commands/lifecycle.py +0 -0
  81. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/commands/machine.py +0 -0
  82. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/commands/merge.py +0 -0
  83. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/commands/milestone.py +0 -0
  84. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/commands/plan_followup.py +0 -0
  85. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/commands/plans.py +0 -0
  86. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/commands/portal.py +0 -0
  87. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/commands/pr.py +0 -0
  88. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/commands/release.py +0 -0
  89. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/commands/repo.py +0 -0
  90. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/commands/report.py +0 -0
  91. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/commands/review.py +0 -0
  92. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/commands/scorecard.py +0 -0
  93. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/commands/sessions.py +0 -0
  94. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/commands/setup.py +0 -0
  95. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/commands/status.py +0 -0
  96. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/commands/store_migrate.py +0 -0
  97. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/commands/terminal.py +0 -0
  98. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/commands/test_gate.py +0 -0
  99. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/commands/tui.py +0 -0
  100. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/comments.py +0 -0
  101. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/config.py +0 -0
  102. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/config_reload.py +0 -0
  103. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/confirm_test.py +0 -0
  104. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/conflict_fix.py +0 -0
  105. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/dao.py +0 -0
  106. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/dashboard/__init__.py +0 -0
  107. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/dashboard/fixture.py +0 -0
  108. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/dashboard/index.html +0 -0
  109. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/dashboard/server.py +0 -0
  110. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/dashboard/terminal.py +0 -0
  111. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/db.py +0 -0
  112. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/dead_end.py +0 -0
  113. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/decomposition_chat.py +0 -0
  114. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/deploy/README.md +0 -0
  115. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/deploy/coord-agent.service +0 -0
  116. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/deploy/coord-db-backup.service +0 -0
  117. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/deploy/coord-db-backup.sh +0 -0
  118. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/deploy/coord-db-backup.timer +0 -0
  119. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/deploy/coord-drive-queue.service +0 -0
  120. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/deploy/coord-drive-queue.timer +0 -0
  121. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/deploy/coord-failure-notify.service +0 -0
  122. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/deploy/coord-fleet-watchdog.service +0 -0
  123. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/deploy/coord-fleet-watchdog.timer +0 -0
  124. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/deploy/coord-notify.service +0 -0
  125. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/deploy/coord-notify.timer +0 -0
  126. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/deploy/coord-release-propagate.service +0 -0
  127. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/deploy/coord-release-propagate.timer +0 -0
  128. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/deploy/coord-release-window.service +0 -0
  129. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/deploy/coord-release-window.timer +0 -0
  130. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/deploy/coord-serve.service +0 -0
  131. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/deploy/coord-web-dist-build.service +0 -0
  132. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/deploy/coord-web-dist-build.timer +0 -0
  133. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/deploy/coord-web.service +0 -0
  134. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/deploy_manifest.py +0 -0
  135. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/deploy_units.py +0 -0
  136. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/deps.py +0 -0
  137. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/diagnose.py +0 -0
  138. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/dispatch.py +0 -0
  139. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/dist_name.py +0 -0
  140. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/drive.py +0 -0
  141. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/drive_queue.py +0 -0
  142. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/drive_state.py +0 -0
  143. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/events.py +0 -0
  144. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/failure_class.py +0 -0
  145. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/filelock.py +0 -0
  146. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/fleet_config_health.py +0 -0
  147. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/forge_availability.py +0 -0
  148. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/freshness.py +0 -0
  149. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/gate_a.py +0 -0
  150. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/gate_b.py +0 -0
  151. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/gate_snapshot.py +0 -0
  152. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/gates.py +0 -0
  153. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/github_ops.py +0 -0
  154. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/github_throttle.py +0 -0
  155. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/goal.py +0 -0
  156. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/graph_health.py +0 -0
  157. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/health/__init__.py +0 -0
  158. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/health/aggregate.py +0 -0
  159. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/health/checks/__init__.py +0 -0
  160. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/health/checks/agent_install.py +0 -0
  161. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/health/checks/cargo_targets.py +0 -0
  162. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/health/checks/claude_binary.py +0 -0
  163. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/health/checks/coord_web_ci_pin.py +0 -0
  164. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/health/checks/deploy_lane_facts.py +0 -0
  165. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/health/checks/disk.py +0 -0
  166. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/health/checks/fleet_board.py +0 -0
  167. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  168. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/health/checks/fleet_phantom.py +0 -0
  169. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/health/checks/fleet_unit_drift.py +0 -0
  170. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/health/checks/graph.py +0 -0
  171. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/health/checks/graphify_cli.py +0 -0
  172. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/health/checks/index_lock.py +0 -0
  173. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/health/checks/issues_sync_staleness.py +0 -0
  174. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/health/checks/plan_usage.py +0 -0
  175. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/health/checks/release_cordon.py +0 -0
  176. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/health/checks/repo_state.py +0 -0
  177. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/health/checks/spawned_coord.py +0 -0
  178. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/health/checks/stalled_pipeline.py +0 -0
  179. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/health/checks/timer_active.py +0 -0
  180. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/health/checks/toolchain.py +0 -0
  181. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/health/checks/unit_drift.py +0 -0
  182. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/health/checks/unit_enablement.py +0 -0
  183. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/health/checks/worktrees.py +0 -0
  184. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/health/cli.py +0 -0
  185. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/health/context.py +0 -0
  186. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/health/fleet_snapshot.py +0 -0
  187. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/health/models.py +0 -0
  188. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/health/pypi.py +0 -0
  189. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/health/registry.py +0 -0
  190. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/health/render.py +0 -0
  191. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/health/units.py +0 -0
  192. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/hooks.py +0 -0
  193. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/housekeeping.py +0 -0
  194. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/interactive.py +0 -0
  195. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/issue_store.py +0 -0
  196. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/issues_sync_status.py +0 -0
  197. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/liveness_auditor.py +0 -0
  198. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/machine_onboard.py +0 -0
  199. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/machine_pause.py +0 -0
  200. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/merge_queue.py +0 -0
  201. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/milestone_chat.py +0 -0
  202. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/milestone_dispatch.py +0 -0
  203. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/milestone_gate.py +0 -0
  204. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/milestone_order.py +0 -0
  205. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/mock_author.py +0 -0
  206. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/models.py +0 -0
  207. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/network.py +0 -0
  208. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/new_issue_chat.py +0 -0
  209. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/notifier/__init__.py +0 -0
  210. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/notifier/baseline.py +0 -0
  211. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/notifier/cli.py +0 -0
  212. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/notifier/collect.py +0 -0
  213. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/notifier/digest.py +0 -0
  214. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/notifier/models.py +0 -0
  215. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/notifier/predicate.py +0 -0
  216. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/notifier/service.py +0 -0
  217. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/notifier/store.py +0 -0
  218. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/notifier/transport.py +0 -0
  219. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/notify.py +0 -0
  220. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/openapi.py +0 -0
  221. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/overlap_fence.py +0 -0
  222. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/overlap_predict.py +0 -0
  223. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/parentage.py +0 -0
  224. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/parentage_github.py +0 -0
  225. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/pipeline.py +0 -0
  226. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/plan_parser.py +0 -0
  227. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/plans.py +0 -0
  228. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/platform_paths.py +0 -0
  229. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/portal_bridge.py +0 -0
  230. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/portal_store.py +0 -0
  231. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/portal_sync.py +0 -0
  232. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/pr_body_lint.py +0 -0
  233. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/prereqs.py +0 -0
  234. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/progress.py +0 -0
  235. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/providers/__init__.py +0 -0
  236. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/providers/base.py +0 -0
  237. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/providers/claude.py +0 -0
  238. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/providers/claude_pty.py +0 -0
  239. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/providers/opencode.py +0 -0
  240. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/queue_diagnose.py +0 -0
  241. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/reconcile.py +0 -0
  242. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/reconcile_tick.py +0 -0
  243. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/refine_chat.py +0 -0
  244. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/release_cordon.py +0 -0
  245. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/release_propagate.py +0 -0
  246. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/release_verify.py +0 -0
  247. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/release_window.py +0 -0
  248. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/repo_edit.py +0 -0
  249. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/repo_onboard.py +0 -0
  250. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/reports.py +0 -0
  251. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/rest_schema.py +0 -0
  252. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/revalidate.py +0 -0
  253. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/review.py +0 -0
  254. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/scorecard.py +0 -0
  255. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/self_health.py +0 -0
  256. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/serve_app.py +0 -0
  257. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  258. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  259. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  260. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  261. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  262. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/skills/portal-followup/SKILL.md +0 -0
  263. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/skills/release-now/SKILL.md +0 -0
  264. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  265. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  266. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/skills/update-issue/SKILL.md +0 -0
  267. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/smoke.py +0 -0
  268. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/spend_ceiling.py +0 -0
  269. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/split_work.py +0 -0
  270. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/sql.py +0 -0
  271. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/stage_projection.py +0 -0
  272. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/state.py +0 -0
  273. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/store_migrate.py +0 -0
  274. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/test_author.py +0 -0
  275. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/test_chat.py +0 -0
  276. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/test_orchestrator.py +0 -0
  277. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/test_report.py +0 -0
  278. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/tui_release.py +0 -0
  279. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/usage_limits.py +0 -0
  280. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/usage_rollup.py +0 -0
  281. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coord/worker_events.py +0 -0
  282. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/coordinator.example.yml +0 -0
  283. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/deploy/coord-agent.service +0 -0
  284. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/deploy/coord-db-backup.service +0 -0
  285. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/deploy/coord-db-backup.sh +0 -0
  286. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/deploy/coord-db-backup.timer +0 -0
  287. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/deploy/coord-drive-queue.service +0 -0
  288. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/deploy/coord-drive-queue.timer +0 -0
  289. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/deploy/coord-failure-notify.service +0 -0
  290. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/deploy/coord-failure-notify.sh +0 -0
  291. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/deploy/coord-fleet-watchdog.service +0 -0
  292. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/deploy/coord-fleet-watchdog.timer +0 -0
  293. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/deploy/coord-notify.service +0 -0
  294. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/deploy/coord-notify.timer +0 -0
  295. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/deploy/coord-release-propagate.service +0 -0
  296. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/deploy/coord-release-propagate.timer +0 -0
  297. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/deploy/coord-release-window.service +0 -0
  298. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/deploy/coord-release-window.timer +0 -0
  299. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/deploy/coord-serve.service +0 -0
  300. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/deploy/coord-web-dist-build.service +0 -0
  301. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/deploy/coord-web-dist-build.sh +0 -0
  302. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/deploy/coord-web-dist-build.timer +0 -0
  303. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/deploy/coord-web-rollback.sh +0 -0
  304. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/deploy/coord-web.service +0 -0
  305. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/deploy/node-shim.sh +0 -0
  306. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  307. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/docs/ADR_COORD_WEB_CI.md +0 -0
  308. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/docs/ADR_COORD_WEB_DIST.md +0 -0
  309. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/docs/AGENT_OPERATIONS.md +0 -0
  310. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/docs/ARCHITECTURE.md +0 -0
  311. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/docs/ARCH_SECURITY_GATES.md +0 -0
  312. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/docs/COCKPIT.md +0 -0
  313. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/docs/CONTROL_CENTER.md +0 -0
  314. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/docs/COST_DISCIPLINE.md +0 -0
  315. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/docs/CROSS_PLATFORM.md +0 -0
  316. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/docs/CUSTOMER_FACING_APPS.md +0 -0
  317. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/docs/CUSTOMER_PORTAL.md +0 -0
  318. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/docs/DRIVE_QUEUE.md +0 -0
  319. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/docs/EPHEMERAL_WORKERS.md +0 -0
  320. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/docs/FORGE_MIGRATION.md +0 -0
  321. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/docs/GRAPHIFY_SETUP.md +0 -0
  322. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/docs/ISSUE_GUIDANCE.md +0 -0
  323. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/docs/MAC_MINI.md +0 -0
  324. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  325. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/docs/NOTIFIER.md +0 -0
  326. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/docs/OPENCODE_VERIFICATION.md +0 -0
  327. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/docs/OPERATING_GOTCHAS.md +0 -0
  328. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/docs/OPERATOR_GUIDES.md +0 -0
  329. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/docs/ORACLE_LOOP.md +0 -0
  330. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/docs/PHONE_WEBAPP.md +0 -0
  331. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/docs/PIPELINE_V2.md +0 -0
  332. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/docs/PLATFORM_EVOLUTION.md +0 -0
  333. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/docs/SECOND_BACKEND.md +0 -0
  334. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/docs/STORE_SERVICE.md +0 -0
  335. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  336. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/docs/WEB_CONTROL_CENTER.md +0 -0
  337. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/docs/WSL_WINDOWS_WORKER.md +0 -0
  338. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/docs/mocks/web/README.md +0 -0
  339. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/docs/mocks/web/_tokens.css +0 -0
  340. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/docs/mocks/web/issue-detail.html +0 -0
  341. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/docs/mocks/web/pipeline-narrow.html +0 -0
  342. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/docs/mocks/web/pipeline-wide.html +0 -0
  343. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/graphify-out/.gitignore +0 -0
  344. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/install-agent.sh +0 -0
  345. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/pyproject.toml +0 -0
  346. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/scripts/audit_review_verdict_overrides.py +0 -0
  347. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  348. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/scripts/azure-workers/build-worker-image.sh +0 -0
  349. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/scripts/azure-workers/coordinator-machine.py +0 -0
  350. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/scripts/azure-workers/epic-down.sh +0 -0
  351. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/scripts/azure-workers/epic-up.sh +0 -0
  352. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/scripts/azure-workers/preflight.sh +0 -0
  353. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/scripts/azure-workers/provision-worker.sh +0 -0
  354. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  355. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  356. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/scripts/azure-workers/verify-github-token.sh +0 -0
  357. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/scripts/check_gh_argv_containment.py +0 -0
  358. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/scripts/coord-test-runner.sh +0 -0
  359. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/scripts/coord-venv-rollback.sh +0 -0
  360. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/scripts/drive-batch.sh +0 -0
  361. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/scripts/fleet_watchdog.py +0 -0
  362. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/scripts/gen_board_fixture.py +0 -0
  363. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/scripts/gen_mock_index.py +0 -0
  364. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/scripts/next_release_tag.py +0 -0
  365. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/scripts/run_tests_in_populated_home.sh +0 -0
  366. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/scripts/run_tests_without_gh.sh +0 -0
  367. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/scripts/smoke_437_interactive.py +0 -0
  368. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/scripts/verify_878_review_capture.py +0 -0
  369. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/scripts/verify_release_published.py +0 -0
  370. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/scripts/verify_release_wheel.py +0 -0
  371. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/setup.cfg +0 -0
  372. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/SMOKE_SET.md +0 -0
  373. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/__init__.py +0 -0
  374. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/acceptance/ms-37/conftest.py +0 -0
  375. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/acceptance/ms-37/contract.md +0 -0
  376. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/acceptance/ms-37/manifest.yml +0 -0
  377. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  378. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  379. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/acceptance/ms-51/contract.md +0 -0
  380. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  381. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  382. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/acceptance/ms-51/manifest.yml +0 -0
  383. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  384. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/acceptance/ms-51/tsconfig.json +0 -0
  385. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  386. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/backends.py +0 -0
  387. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/conftest.py +0 -0
  388. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/fixtures/board-pipeline-basic.json +0 -0
  389. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  390. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  391. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  392. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  393. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/fixtures/playwright/all_pass.json +0 -0
  394. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  395. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/fixtures/playwright/mixed_fail.json +0 -0
  396. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  397. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  398. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/fixtures/playwright/skip.json +0 -0
  399. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/fixtures/playwright/truncated.json +0 -0
  400. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  401. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  402. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  403. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  404. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  405. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  406. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  407. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  408. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_acceptance.py +0 -0
  409. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_acceptance_drivers.py +0 -0
  410. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_agent.py +0 -0
  411. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_agent_api_error.py +0 -0
  412. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_agent_app.py +0 -0
  413. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_agent_branch_base.py +0 -0
  414. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_agent_branch_capture.py +0 -0
  415. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_agent_config_free_1712.py +0 -0
  416. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_agent_deploy_units_endpoint.py +0 -0
  417. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_agent_dirty_worktree.py +0 -0
  418. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  419. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_agent_graph_self_heal.py +0 -0
  420. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_agent_health_h3.py +0 -0
  421. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_agent_idle_restart.py +0 -0
  422. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_agent_push_failure.py +0 -0
  423. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_agent_reap.py +0 -0
  424. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_agent_repos_and_pull.py +0 -0
  425. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_agent_restart_services_endpoint.py +0 -0
  426. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_agent_skills_self_heal.py +0 -0
  427. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_agent_startup_diagnostics.py +0 -0
  428. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_agent_update.py +0 -0
  429. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_agent_update_bluegreen.py +0 -0
  430. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_agent_usage_limit.py +0 -0
  431. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_agent_zero_commit.py +0 -0
  432. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_ambient_home_isolation.py +0 -0
  433. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_approve_dependency_busy_2804.py +0 -0
  434. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_approve_reject_plan.py +0 -0
  435. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_approve_usage_gate.py +0 -0
  436. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_approved_work_2532.py +0 -0
  437. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_assignment_already_recorded_daemon.py +0 -0
  438. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_audit_log.py +0 -0
  439. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_audit_outcome.py +0 -0
  440. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_audit_query.py +0 -0
  441. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_auto_loop.py +0 -0
  442. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_auto_release_publish_2035.py +0 -0
  443. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_backend_selection.py +0 -0
  444. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_base_checkout_restore.py +0 -0
  445. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_block_log.py +0 -0
  446. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_board_cap_762.py +0 -0
  447. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_board_read_path.py +0 -0
  448. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_board_schema.py +0 -0
  449. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_board_service.py +0 -0
  450. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_board_state.py +0 -0
  451. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_brain.py +0 -0
  452. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_branch_model.py +0 -0
  453. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_bug_intake.py +0 -0
  454. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_build_worker_image_env_update.py +0 -0
  455. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cargo_cache.py +0 -0
  456. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_check_gh_argv_containment.py +0 -0
  457. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_ci_acceptance_gate_1950.py +0 -0
  458. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_ci_fix.py +0 -0
  459. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_ci_gitlab.py +0 -0
  460. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_ci_parity_2091.py +0 -0
  461. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_ci_store.py +0 -0
  462. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_claim.py +0 -0
  463. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_claude_md_budget.py +0 -0
  464. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_acceptance.py +0 -0
  465. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_assign.py +0 -0
  466. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  467. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_assign_interactive_remote.py +0 -0
  468. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_assign_provider.py +0 -0
  469. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  470. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_audit.py +0 -0
  471. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_chat_continue.py +0 -0
  472. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_decide.py +0 -0
  473. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_diagnose_config_provenance.py +0 -0
  474. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_diagnose_forge_availability.py +0 -0
  475. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_diagnose_graph.py +0 -0
  476. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_diagnose_self.py +0 -0
  477. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_doctor.py +0 -0
  478. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_doctor_config_free_1801.py +0 -0
  479. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  480. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_drive.py +0 -0
  481. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_drive_queue.py +0 -0
  482. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_escalate.py +0 -0
  483. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_fix_headless_review.py +0 -0
  484. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_gate_a.py +0 -0
  485. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_install_drift.py +0 -0
  486. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_install_skills.py +0 -0
  487. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_issue_comment.py +0 -0
  488. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_issue_create_label.py +0 -0
  489. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_issue_reopen.py +0 -0
  490. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_issue_view_list.py +0 -0
  491. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_merge.py +0 -0
  492. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_milestone_assign.py +0 -0
  493. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_milestone_capture.py +0 -0
  494. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_milestone_chat_add_child.py +0 -0
  495. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_milestone_dispatch.py +0 -0
  496. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_milestone_gate_b.py +0 -0
  497. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_milestone_gate_c.py +0 -0
  498. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_milestone_order.py +0 -0
  499. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  500. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_milestone_ship.py +0 -0
  501. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_network.py +0 -0
  502. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_new_issue_chat.py +0 -0
  503. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_plans.py +0 -0
  504. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_portal.py +0 -0
  505. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_pr.py +0 -0
  506. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_pull_artifact.py +0 -0
  507. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_queue.py +0 -0
  508. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_reattach_sessions.py +0 -0
  509. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_refine_board.py +0 -0
  510. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_release_preflight.py +0 -0
  511. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_release_propagate.py +0 -0
  512. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_release_window.py +0 -0
  513. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_repo_2220.py +0 -0
  514. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
  515. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_scorecard.py +0 -0
  516. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_set_review_findings.py +0 -0
  517. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_status_advisory_terminal.py +0 -0
  518. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_status_contested_tag.py +0 -0
  519. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_status_merge_queue.py +0 -0
  520. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_status_provider.py +0 -0
  521. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_status_review_finalizing.py +0 -0
  522. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_status_test_failed_tag.py +0 -0
  523. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_status_usage_limit.py +0 -0
  524. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_sync_comments_873.py +0 -0
  525. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_test_plan.py +0 -0
  526. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_track.py +0 -0
  527. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_tui_update.py +0 -0
  528. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cli_wait.py +0 -0
  529. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_client_base_install.py +0 -0
  530. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_commands_common.py +0 -0
  531. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_comments.py +0 -0
  532. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_completion_summary.py +0 -0
  533. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_config.py +0 -0
  534. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_config_acceptance.py +0 -0
  535. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_config_audit.py +0 -0
  536. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_config_pricing.py +0 -0
  537. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  538. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_config_usage_gate.py +0 -0
  539. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_confirm_test.py +0 -0
  540. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_conflict_fix.py +0 -0
  541. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_conflict_fix_semantic.py +0 -0
  542. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
  543. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_coord_test.py +0 -0
  544. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_coord_test_runner_baseline.py +0 -0
  545. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_coord_test_runner_populated_home.py +0 -0
  546. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_coord_test_runner_routing.py +0 -0
  547. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_coord_test_runner_toolchain.py +0 -0
  548. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_coord_uat.py +0 -0
  549. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_coord_web_sse_restart_live.py +0 -0
  550. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_coordinator_machine.py +0 -0
  551. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_cross_platform_imports.py +0 -0
  552. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_dao.py +0 -0
  553. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_dashboard.py +0 -0
  554. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_dashboard_fixture.py +0 -0
  555. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_dashboard_terminal.py +0 -0
  556. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_dashboard_terminal_live.py +0 -0
  557. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_db.py +0 -0
  558. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_dead_end.py +0 -0
  559. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_decomposition_chat.py +0 -0
  560. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_deploy_coord_db_backup.py +0 -0
  561. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_deploy_coord_web_dist.py +0 -0
  562. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_deploy_coord_web_rollback.py +0 -0
  563. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_deploy_drive_queue_unit.py +0 -0
  564. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_deploy_failure_notify_unit.py +0 -0
  565. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_deploy_manifest.py +0 -0
  566. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_deploy_notify_unit.py +0 -0
  567. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_deploy_units_lane.py +0 -0
  568. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_deploy_web_unit.py +0 -0
  569. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_deps.py +0 -0
  570. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_diagnose.py +0 -0
  571. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_dispatch.py +0 -0
  572. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_dispatch_target_validation.py +0 -0
  573. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_done_housekeeping.py +0 -0
  574. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_drive.py +0 -0
  575. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_drive_queue.py +0 -0
  576. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_drive_queue_blocked_rendering.py +0 -0
  577. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_drive_queue_launch_argv.py +0 -0
  578. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
  579. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_drive_queue_roll_pending.py +0 -0
  580. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
  581. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_drive_state.py +0 -0
  582. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_drive_tmux.py +0 -0
  583. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_epic_up_capability_detection.py +0 -0
  584. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  585. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_epic_up_image_provenance.py +0 -0
  586. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_errors.py +0 -0
  587. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_events.py +0 -0
  588. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_failure_class.py +0 -0
  589. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_filelock.py +0 -0
  590. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  591. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_fix_of_force_override.py +0 -0
  592. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_fleet_config_health.py +0 -0
  593. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_fleet_health_probes.py +0 -0
  594. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_fleet_health_snapshot.py +0 -0
  595. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_fleet_watchdog.py +0 -0
  596. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_forge_availability.py +0 -0
  597. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_freshness.py +0 -0
  598. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_gate_a.py +0 -0
  599. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_gate_b.py +0 -0
  600. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_gate_snapshot_staleness.py +0 -0
  601. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_gates.py +0 -0
  602. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  603. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_gen_mock_index.py +0 -0
  604. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_generated_types_fixture.py +0 -0
  605. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_github_ops.py +0 -0
  606. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_github_throttle.py +0 -0
  607. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_goal.py +0 -0
  608. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_graph_health.py +0 -0
  609. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_graph_selfheal_absent_2237.py +0 -0
  610. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_handoff.py +0 -0
  611. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_health_checks.py +0 -0
  612. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_health_cli.py +0 -0
  613. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_health_cli_graph.py +0 -0
  614. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_health_config.py +0 -0
  615. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_health_context.py +0 -0
  616. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_health_coord_web_ci_pin.py +0 -0
  617. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_health_deploy_lane_facts.py +0 -0
  618. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_health_fix.py +0 -0
  619. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_health_incident_regression.py +0 -0
  620. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_health_issues_sync_staleness.py +0 -0
  621. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_health_pypi.py +0 -0
  622. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_health_registry.py +0 -0
  623. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_health_release_cordon_probe.py +0 -0
  624. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_health_timer_active.py +0 -0
  625. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_health_toolchain.py +0 -0
  626. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_health_unit_drift.py +0 -0
  627. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_health_unit_enablement.py +0 -0
  628. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_hooks.py +0 -0
  629. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_human_attended_437.py +0 -0
  630. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_init.py +0 -0
  631. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_install_agent_venv_2911.py +0 -0
  632. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_integration.py +0 -0
  633. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_interactive_briefing_echo.py +0 -0
  634. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_interactive_pane_log_2541.py +0 -0
  635. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_interactive_prefill_state.py +0 -0
  636. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_interactive_session_relaunch.py +0 -0
  637. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_interactive_test_verdict_backstop.py +0 -0
  638. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_interactive_token_attribution.py +0 -0
  639. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_interactive_worktree.py +0 -0
  640. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_issue_store_seam.py +0 -0
  641. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_issues_sync_status.py +0 -0
  642. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_liveness_auditor.py +0 -0
  643. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_liveness_notify.py +0 -0
  644. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_lock_contention_ratchet.py +0 -0
  645. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_machine_onboard.py +0 -0
  646. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_machine_pause.py +0 -0
  647. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_merge_queue.py +0 -0
  648. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_merge_verify.py +0 -0
  649. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_milestone_chat.py +0 -0
  650. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_milestone_dispatch.py +0 -0
  651. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_milestone_gate.py +0 -0
  652. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_milestone_order.py +0 -0
  653. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_milestone_seam.py +0 -0
  654. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_mock_author.py +0 -0
  655. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_model_tiering.py +0 -0
  656. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_models.py +0 -0
  657. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_models_config_labels.py +0 -0
  658. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_needs_attention.py +0 -0
  659. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_network.py +0 -0
  660. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_new_issue_chat.py +0 -0
  661. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_next_release_tag.py +0 -0
  662. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_node_shim.py +0 -0
  663. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_notifier_baseline.py +0 -0
  664. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_notifier_cli.py +0 -0
  665. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_notifier_collect.py +0 -0
  666. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_notifier_config.py +0 -0
  667. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_notifier_drive_seam.py +0 -0
  668. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_notifier_isolation.py +0 -0
  669. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_notifier_predicate.py +0 -0
  670. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_notifier_quiet_hours.py +0 -0
  671. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_notifier_service.py +0 -0
  672. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_notify.py +0 -0
  673. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_notify_drain.py +0 -0
  674. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_openapi.py +0 -0
  675. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_operational_defaults.py +0 -0
  676. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_overlap_fence.py +0 -0
  677. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_overlap_predict.py +0 -0
  678. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_packaged_deploy_units.py +0 -0
  679. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_parentage.py +0 -0
  680. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_paste_landed.py +0 -0
  681. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
  682. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_pipeline.py +0 -0
  683. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_plan_followup_approve_plan_command.py +0 -0
  684. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_plan_followup_pr_command.py +0 -0
  685. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_plan_followup_review_command.py +0 -0
  686. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_plan_only.py +0 -0
  687. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_plan_parser.py +0 -0
  688. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_platform_paths.py +0 -0
  689. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_portal_bridge.py +0 -0
  690. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_portal_config.py +0 -0
  691. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_portal_store.py +0 -0
  692. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_portal_sync.py +0 -0
  693. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_pr_body_lint.py +0 -0
  694. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_prereqs.py +0 -0
  695. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_production_db_guard.py +0 -0
  696. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_progress.py +0 -0
  697. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_provider_seam.py +0 -0
  698. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_providers.py +0 -0
  699. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_providers_config_labels.py +0 -0
  700. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_providers_pty.py +0 -0
  701. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_quiet_hours.py +0 -0
  702. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_quiet_hours_store_2146.py +0 -0
  703. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_reap_merged_sessions.py +0 -0
  704. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_reap_stale_interactive_tick.py +0 -0
  705. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_reconcile.py +0 -0
  706. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_reconcile_branch.py +0 -0
  707. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_reconcile_completions.py +0 -0
  708. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
  709. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_reconcile_merges.py +0 -0
  710. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_reconcile_no_agent_record.py +0 -0
  711. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_reconcile_tick.py +0 -0
  712. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_reconcile_usage_limit_done.py +0 -0
  713. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_refine_chat.py +0 -0
  714. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_release_cordon_2101.py +0 -0
  715. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  716. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_release_cordon_deadlock_2240.py +0 -0
  717. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_release_cordon_stuck_2490.py +0 -0
  718. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_release_propagate.py +0 -0
  719. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_release_propagate_threshold.py +0 -0
  720. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_release_roll_between_legs_2854.py +0 -0
  721. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_release_roll_window_handoff.py +0 -0
  722. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_release_unified_1242.py +0 -0
  723. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_release_verify.py +0 -0
  724. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_release_window.py +0 -0
  725. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_remote_auto_prune.py +0 -0
  726. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_remote_interactive_reaper.py +0 -0
  727. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_repo_add.py +0 -0
  728. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_repo_edit_2220.py +0 -0
  729. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_repo_graph_fleet_2237.py +0 -0
  730. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_repo_onboard_2220.py +0 -0
  731. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_report_result_push.py +0 -0
  732. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_reports.py +0 -0
  733. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_retry.py +0 -0
  734. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_retry_advisory_1606.py +0 -0
  735. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_retry_type_1636.py +0 -0
  736. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_revalidate.py +0 -0
  737. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_review.py +0 -0
  738. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_review_end_review_without_verdict.py +0 -0
  739. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_review_parse_failure_diagnostic.py +0 -0
  740. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_review_reaffirm.py +0 -0
  741. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_review_state.py +0 -0
  742. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_review_verdict_backstop.py +0 -0
  743. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_review_verdict_override_audit.py +0 -0
  744. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_review_verdict_relay.py +0 -0
  745. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_review_zero_commits.py +0 -0
  746. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_scoped_review_wiring.py +0 -0
  747. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_scorecard.py +0 -0
  748. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_self_health.py +0 -0
  749. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_serve.py +0 -0
  750. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_serve_app_board_trim.py +0 -0
  751. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_serve_rest_routes.py +0 -0
  752. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_session.py +0 -0
  753. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_slice_issue_attribution.py +0 -0
  754. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_smoke.py +0 -0
  755. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_smoke_live_checkout_restore.py +0 -0
  756. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_smoke_workflow.py +0 -0
  757. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_spend_ceiling.py +0 -0
  758. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_spend_ceiling_coordinator.py +0 -0
  759. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_split.py +0 -0
  760. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_split_work.py +0 -0
  761. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_sql_dialect.py +0 -0
  762. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_sqlite_connect_ratchet.py +0 -0
  763. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_stage_projection.py +0 -0
  764. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_stale_busy_reviewer_697.py +0 -0
  765. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_stalled_pipeline.py +0 -0
  766. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_state.py +0 -0
  767. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_state_review_findings_daemon.py +0 -0
  768. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_status_fleet_footer.py +0 -0
  769. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_stop_1567.py +0 -0
  770. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_store_contract.py +0 -0
  771. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_store_migrate.py +0 -0
  772. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_stuck.py +0 -0
  773. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
  774. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_terminal_command.py +0 -0
  775. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_test_author.py +0 -0
  776. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_test_chat.py +0 -0
  777. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_test_orchestrator.py +0 -0
  778. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_test_report.py +0 -0
  779. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_test_verdict_parsing.py +0 -0
  780. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_test_verdict_transcript_floor.py +0 -0
  781. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_text_io_encoding_audit.py +0 -0
  782. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_thin_client_board_audit.py +0 -0
  783. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_thin_client_config_load_1080.py +0 -0
  784. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_thin_client_daemon_routing_906.py +0 -0
  785. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_tmux_host.py +0 -0
  786. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_tmux_session.py +0 -0
  787. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_transcript_floor.py +0 -0
  788. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_usage.py +0 -0
  789. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_usage_limits.py +0 -0
  790. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_usage_rollup.py +0 -0
  791. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_venv_live_install_2121.py +0 -0
  792. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_version_single_source.py +0 -0
  793. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_watch.py +0 -0
  794. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  795. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_worker_env_venv_isolation.py +0 -0
  796. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_worker_events.py +0 -0
  797. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_worker_image_pin_sync.py +0 -0
  798. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_worker_safety.py +0 -0
  799. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_worker_test_scoping.py +0 -0
  800. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_worktree.py +0 -0
  801. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  802. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/test_write_parity.py +0 -0
  803. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tests/write_parity.py +0 -0
  804. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/.github/workflows/release-tui.yml +0 -0
  805. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/Cargo.lock +0 -0
  806. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/Cargo.toml +0 -0
  807. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/cargo-config-local-quadraui.toml.example +0 -0
  808. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/src/app/approved.rs +0 -0
  809. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/src/app/audit.rs +0 -0
  810. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/src/app/chat.rs +0 -0
  811. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/src/app/data.rs +0 -0
  812. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/src/app/dialogs.rs +0 -0
  813. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/src/app/doc_tabs.rs +0 -0
  814. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/src/app/drive.rs +0 -0
  815. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/src/app/drive_queue.rs +0 -0
  816. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/src/app/escalation.rs +0 -0
  817. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/src/app/events.rs +0 -0
  818. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/src/app/fixtures.rs +0 -0
  819. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/src/app/fleet_health.rs +0 -0
  820. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/src/app/fleet_sessions.rs +0 -0
  821. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/src/app/fleet_terminals.rs +0 -0
  822. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/src/app/format.rs +0 -0
  823. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/src/app/milestone_dag.rs +0 -0
  824. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/src/app/mod.rs +0 -0
  825. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/src/app/msv.rs +0 -0
  826. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/src/app/pipeline.rs +0 -0
  827. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/src/app/plans.rs +0 -0
  828. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/src/app/render.rs +0 -0
  829. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/src/app/reports.rs +0 -0
  830. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/src/app/sessions.rs +0 -0
  831. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/src/app/settings_ui.rs +0 -0
  832. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/src/app/sidebar.rs +0 -0
  833. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/src/app/terminal.rs +0 -0
  834. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/src/app/tests.rs +0 -0
  835. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/src/app/types.rs +0 -0
  836. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/src/app/workspace.rs +0 -0
  837. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/src/bin/gtk.rs +0 -0
  838. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/src/commands.rs +0 -0
  839. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/src/lib.rs +0 -0
  840. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/src/main.rs +0 -0
  841. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/src/settings.rs +0 -0
  842. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-33/audit_1039.rs +0 -0
  843. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-33/contract.md +0 -0
  844. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-33/manifest.yml +0 -0
  845. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  846. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  847. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  848. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  849. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-38/contract.md +0 -0
  850. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-38/manifest.yml +0 -0
  851. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  852. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  853. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  854. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  855. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  856. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  857. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  858. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  859. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  860. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  861. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-65/board_split_2288.rs +0 -0
  862. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
  863. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
  864. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-65/contract.md +0 -0
  865. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
  866. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-65/manifest.yml +0 -0
  867. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
  868. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
  869. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
  870. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
  871. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
  872. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
  873. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
  874. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
  875. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
  876. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
  877. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-65/tabs_persistence_2286.rs +0 -0
  878. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-67/approved_items_2532.rs +0 -0
  879. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-67/contract.md +0 -0
  880. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-67/manifest.d/2533.yml +0 -0
  881. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-67/manifest.yml +0 -0
  882. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-67/mocks/approved-items-chat-opened.screen +0 -0
  883. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-67/mocks/approved-items-context-menu.screen +0 -0
  884. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-67/mocks/approved-items-detail.screen +0 -0
  885. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-67/mocks/approved-items-empty.screen +0 -0
  886. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-67/mocks/approved-items-populated.screen +0 -0
  887. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-67/pull_decomposition_2533.rs +0 -0
  888. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/acceptance.rs +0 -0
  889. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/tui/tests/cli.rs +0 -0
  890. {code_coordinator-0.5.290 → code_coordinator-0.5.291}/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.291
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.291
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
@@ -296,6 +295,7 @@ deploy/coord-web-dist-build.timer
296
295
  deploy/coord-web-rollback.sh
297
296
  deploy/coord-web.service
298
297
  deploy/node-shim.sh
298
+ docs/ADR_COORD_TUI_CI.md
299
299
  docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md
300
300
  docs/ADR_COORD_WEB_CI.md
301
301
  docs/ADR_COORD_WEB_DIST.md
@@ -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",
@@ -288,6 +287,7 @@
288
287
  "deploy/coord-web-rollback.sh",
289
288
  "deploy/coord-web.service",
290
289
  "deploy/node-shim.sh",
290
+ "docs/ADR_COORD_TUI_CI.md",
291
291
  "docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md",
292
292
  "docs/ADR_COORD_WEB_CI.md",
293
293
  "docs/ADR_COORD_WEB_DIST.md",
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "0.5.290",
2
+ "tag": "0.5.291",
3
3
  "distance": 0,
4
- "node": "gd9ef2036c79e6b93ba2c92ee4c1a1756d509370f",
4
+ "node": "g408957bf4d2de2370d4e9df055a80c1680a697a2",
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
@@ -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()``
@@ -0,0 +1,217 @@
1
+ # ADR: coord-tui's CI shape, and retiring the bool guard
2
+
3
+ **Status:** Accepted
4
+ **Date:** 2026-08-28
5
+ **Issue:** #2897 (Phase 3 of #2894). Depends on #2895
6
+ ([Phase 1 of #2894](#phase-1-landed-what-it-changed) — landed).
7
+
8
+ ## Context
9
+
10
+ `tui/` has not moved out of this repo yet. What #2897 has to decide is the
11
+ *shape* the eventual coord-tui checkout's CI will need, so that when the move
12
+ does happen it does not also have to invent this from scratch — the same
13
+ sequencing #2009/#2006 used for the webapp (design first, in
14
+ [`docs/ADR_COORD_WEB_CI.md`](ADR_COORD_WEB_CI.md), move second).
15
+
16
+ Two Python gates in this repo currently read Rust source text or write to a
17
+ fixed, checked-in Rust path, both of which assume one checkout:
18
+
19
+ 1. **The generator.** `scripts/codegen.py --rust` writes
20
+ `tui/src/app/types/generated.rs` — a hard-coded in-repo path, unlike its
21
+ TS half (`--out PATH` / `$COORD_WEB_SRC`, #2009) which already had to
22
+ solve this when the webapp moved to `coord-web`.
23
+ 2. **The bool guard.** `coord/board_bool_guard.py` regex-scrapes
24
+ `tui/src/app/types.rs` (+ its generated sibling) for plain `bool` struct
25
+ fields and cross-references them against a freshly-migrated SQLite
26
+ schema, closing the #632/#546/#628 blank-board class: a SQLite `INTEGER`
27
+ column deserialized into a strict Rust `bool` fails the *entire*
28
+ `BoardPayload` parse the first time it is `0`. This needs **both** a Rust
29
+ source tree and a live DB schema — the harder half to give a cross-repo
30
+ shape, because after a split those two things live in different repos.
31
+
32
+ ### Phase 1 landed: what it changed
33
+
34
+ #2895 (Phase 1 of #2894, landed immediately ahead of this issue) deleted
35
+ coord-tui's last direct SQL reader: `tui/src/app/data.rs` used to open
36
+ `~/.coord/coord.db` read-only and hand-roll the board projection SQL — a raw
37
+ column list, typed by rusqlite's own `FromSql`, entirely outside the JSON
38
+ wire contract. `rusqlite` is gone from `tui/Cargo.toml`; every board read now
39
+ goes through `coord serve`'s HTTP `/board` endpoint. That direct-SQL path
40
+ never actually had the #632 boolean bug (rusqlite converts an `INTEGER`
41
+ column to a Rust `bool` in-driver, no JSON in between) — but it meant the Rust
42
+ binary had two categories of "consumer of column types": the hand-rolled SQL
43
+ path, and the generated wire-struct path. Phase 1 leaves exactly one: the
44
+ generated wire structs in `tui/src/app/types/generated.rs` (+ any hand-added
45
+ mirror in `types.rs`), populated *only* from the `/board` JSON.
46
+
47
+ That fact is what makes the bool-guard decision below tractable now, and is
48
+ why this story is sequenced after Phase 1 rather than before it.
49
+
50
+ ## Decision 1 — the generator: mirror the TS half exactly
51
+
52
+ `scripts/codegen.py --rust` now takes `--out PATH`, and resolves
53
+ `$COORD_TUI_SRC` (a checkout root whose `tui/` holds coord-tui's crate) when
54
+ `--out` is absent — the same two-rung resolution `resolve_output_path` already
55
+ gave the TS half, implemented as `resolve_rust_output_path`. **No fallback
56
+ default**, for the identical reason #2009 gave: silently writing a
57
+ hard-coded path that a future checkout no longer contains would either
58
+ recreate a dead directory nobody consumes, or, worse, report "up to date"
59
+ against a file that does not exist — wrong in exactly the direction that
60
+ looks like success.
61
+
62
+ ```bash
63
+ # today, while tui/ still lives in this repo:
64
+ COORD_TUI_SRC=. python scripts/codegen.py --rust --check
65
+ # a real future coord-tui checkout:
66
+ COORD_TUI_SRC=~/src/coord-tui python scripts/codegen.py --rust
67
+ ```
68
+
69
+ `RUST_OUTPUT_RELPATH` keeps the `tui/` prefix (`<root>/tui/src/app/types/
70
+ generated.rs`), unlike the TS `OUTPUT_RELPATH` (no `webapp/` prefix) — because
71
+ today `$COORD_TUI_SRC` names *this* checkout, whose crate lives under `tui/`,
72
+ and coord-tui's own eventual root layout is the still-open "move" story's
73
+ decision, not this one's. If that story flattens the layout, updating one
74
+ constant is the entire fix.
75
+
76
+ ### The drift gate splits the same way #2009 split the TS one
77
+
78
+ - **Stays here:** `tests/test_generated_rust_fixture.py`, narrowed to what
79
+ one checkout can prove — the generator runs, produces well-formed output
80
+ (no accidental rustdoc doctests, see #1941's original incident), and
81
+ covers every schema in the served `/board` spec. This is the exact same
82
+ narrowing `tests/test_generated_types_fixture.py` got in #2009.
83
+ - **Moves to coord-tui's CI**, once it exists: the byte-comparison of the
84
+ committed `generated.rs` against `generate_rust()`'s output right now —
85
+ `coord-web`'s equivalent already does this with
86
+ `python scripts/codegen.py --check --out src/api/generated.ts`. Until that
87
+ CI exists, `.github/workflows/test.yml`'s `test` job runs
88
+ `COORD_TUI_SRC=. python scripts/codegen.py --rust --check` directly as an
89
+ interim step (not a pytest test) — deletable in one line the day coord-tui
90
+ CI takes over, with zero pytest file to un-narrow.
91
+
92
+ ### Which `coord` that CI installs, and why (mirrors ADR_COORD_WEB_CI.md)
93
+
94
+ Once coord-tui's CI exists and runs the byte-comparison above, it needs
95
+ `scripts/codegen.py` — i.e. a `coord` install — on its runner, the same
96
+ cross-repo-contract shape #2006 solved for `coord-web`. The answer here is
97
+ **identical, for the identical reasons**, not a new decision:
98
+
99
+ - **`pip install 'code-coordinator[server]'`, tracking latest, never an
100
+ exact pin.** `scripts/codegen.py --rust` imports `coord.serve_app`, which
101
+ imports Starlette at module scope — gated behind the `server` extra
102
+ (#1237) — so the bare distribution is not enough; `ModuleNotFoundError`
103
+ the moment `--rust` is used. And per [ADR_COORD_WEB_CI](ADR_COORD_WEB_CI.md)
104
+ part 1, an exact pin answers "does this compile against the coord we froze
105
+ in March", not "does this compile against the coord people actually have"
106
+ — the wrong question, answered green while a real drift ships.
107
+ - **`code-coordinator`, never the `claude-coordinator` tombstone** (#2106) —
108
+ same trap, same fix, see that ADR's part 2.
109
+ - A `>=` floor documenting the oldest `coord` whose `--rust`/`--out`/
110
+ `$COORD_TUI_SRC` flags the CI job relies on is encouraged, same as there.
111
+
112
+ ### What a red coord-tui CI job means
113
+
114
+ Copying [ADR_COORD_WEB_CI's section verbatim in spirit](ADR_COORD_WEB_CI.md#what-a-red-coord-web-ci-job-means),
115
+ because the failure shape is the same contract, just Rust instead of
116
+ TypeScript: when coord-tui's drift-gate job fails on a PR that touched no
117
+ Rust wire code, there are exactly two legitimate readings, and one forbidden
118
+ response.
119
+
120
+ 1. **`coord.board_schema`'s wire contract changed** (a field added, removed,
121
+ or retyped on one of the seven `/board` projections) **without
122
+ regenerating.** This is a genuine contract break and the red is
123
+ *correct* — regenerate `generated.rs` from the new `code-coordinator`
124
+ release and commit the result.
125
+ 2. **A bad `code-coordinator` release** changed what `scripts/codegen.py
126
+ --rust` emits for an unrelated reason (a bug in the generator itself).
127
+ Yank/fix the release. Do **not** exact-pin coord-tui's CI to route around
128
+ it — that trades a loud, dated outage for the silent, undated kind.
129
+
130
+ The forbidden response, same as the web ADR: silencing the job
131
+ (`continue-on-error`, deleting the install step, pinning to last-known-green
132
+ and walking away). That is exactly how a drift gate rots unnoticed.
133
+
134
+ ## Decision 2 — the bool guard: retire it (option 1 of 3)
135
+
136
+ Three options were on the table:
137
+
138
+ 1. **Retire it.** If Phase 1 leaves no Rust consumer of column types outside
139
+ the generated wire structs, the text-scraping check has no subject, and
140
+ `tests/test_board_schema.py`'s DTO assertions are the guard that remains.
141
+ 2. **Move it to coord-tui's CI**, running against its own sources plus a
142
+ schema obtained from the daemon's OpenAPI spec rather than a live DB.
143
+ 3. **Keep it here** against a vendored copy of the Rust types. Rejected on
144
+ sight: a vendored copy is a mirror, and mirrors are exactly what this
145
+ program has spent its "Phase A" removing everywhere else (`GOAL.md`,
146
+ `docs/ARCHITECTURE.md`).
147
+
148
+ **Decision: (1), retire it.** Phase 1 (#2895) landed first, confirming the
149
+ premise: `rusqlite` is gone from `tui/Cargo.toml`, and `tui/src/app/data.rs`
150
+ no longer opens a database at all. The *only* Rust consumer of `/board`
151
+ column types left is `tui/src/app/types/generated.rs` (+ any hand mirror in
152
+ `types.rs`), and that consumer is now doubly closed off from ever receiving
153
+ an unguarded bool, independent of the retired scrape:
154
+
155
+ - `tests/test_board_schema.py::test_integer_backed_booleans_are_declared_
156
+ integers` asserts every column in `board_schema.INTEGER_BACKED_BOOLEANS`
157
+ serializes as a JSON `integer` in the served spec, never `boolean`.
158
+ - `tests/test_board_schema.py::test_no_board_dto_field_is_typed_bool` is the
159
+ **blanket** form: *no* board DTO field is ever typed JSON `boolean`,
160
+ because nothing in SQLite can produce one. Given that, `scripts/codegen.py`'s
161
+ own mechanical mapping (`rust_type_from_schema`) can *never* auto-emit a
162
+ Rust `bool` for a board wire field — a JSON `type: boolean` schema is the
163
+ only input that maps to `bool`, and the DTO layer guarantees no such input
164
+ exists.
165
+
166
+ That closes the mechanical path completely: a future
167
+ `ALTER TABLE ... ADD COLUMN x INTEGER` meant as a flag, added correctly to
168
+ `board_schema.py` per its own convention (an `int`-typed dataclass field,
169
+ registered in `INTEGER_BACKED_BOOLEANS` if it is genuinely boolean-shaped),
170
+ can *never* reach the wire as a JSON boolean and can *never* be
171
+ mechanically generated as an unguarded Rust `bool`. The only residual risk —
172
+ a hand-authored `RUST_FIELD_OVERRIDES` entry in `scripts/codegen.py` that
173
+ mistypes an `INTEGER`-backed field as plain `bool` — is a one-file, human-
174
+ reviewed diff in *this* repo, not a drift class a text scrape across two
175
+ repos could catch any more cheaply than ordinary review already does.
176
+
177
+ Option (2) was rejected because it buys nothing options (1) doesn't already
178
+ cover: the OpenAPI-derived schema it would compare against is exactly the
179
+ same DTO-level information `test_board_schema.py` already asserts, just
180
+ re-fetched a second time from a different vantage point, at the cost of a
181
+ new schema-from-OpenAPI-spec plumbing path and a second repo's CI job to
182
+ keep green. Cheapest, and the honest reading of the seam.
183
+
184
+ `coord/board_bool_guard.py` is deleted. `tests/test_board_fixture.py` keeps
185
+ only its fixture-freshness half (`test_board_sample_fixture_is_up_to_date`,
186
+ `test_board_sample_fixture_parses_as_representative_payload`) — unrelated to
187
+ the bool guard, never read Rust source text, and stays exactly as before.
188
+
189
+ ## Consequences
190
+
191
+ - `scripts/codegen.py --rust` requires `--out PATH` or `$COORD_TUI_SRC`; no
192
+ argument and no env var is a refusal (exit 2), not a guess.
193
+ - `tests/test_generated_rust_fixture.py` no longer byte-compares a
194
+ checked-in `tui/` path — it proves the generator runs and covers every
195
+ schema, mirroring `tests/test_generated_types_fixture.py`.
196
+ - `.github/workflows/test.yml`'s `test` job runs
197
+ `COORD_TUI_SRC=. python scripts/codegen.py --rust --check` as an explicit
198
+ step, standing in for the byte-comparison gate until coord-tui's own CI
199
+ exists to take it over.
200
+ - `coord/board_bool_guard.py` is deleted. The #632 blank-board class stays
201
+ closed by `tests/test_board_schema.py`'s DTO-level assertions
202
+ (`INTEGER_BACKED_BOOLEANS` + the blanket no-JSON-boolean check) — one
203
+ guard instead of two, at the layer where the invariant is actually
204
+ enforceable mechanically.
205
+ - Standing up coord-tui's own CI workflow (the byte-comparison job, and
206
+ whatever `cargo test`/acceptance jobs it needs) remains open — that is the
207
+ still-separate "move" story's job, same posture #2006/#2009 took for
208
+ `coord-web`.
209
+
210
+ ## Rejected alternatives
211
+
212
+ See "Decision 2" above for the bool-guard options. For the generator split,
213
+ the rejected alternatives are the same ones #2009 already rejected for the
214
+ TS half (an exact-pin coord-tui CI install, a git-ref install instead of
215
+ PyPI, asserting the pin from inside coord-tui's own CI) — see
216
+ [ADR_COORD_WEB_CI](ADR_COORD_WEB_CI.md#rejected-alternatives) for the
217
+ reasoning, which applies unchanged.
@@ -55,26 +55,57 @@ Usage:
55
55
  # exit 1 (no write) if that file is stale
56
56
  COORD_WEB_SRC=~/src/coord-web .venv/bin/python scripts/codegen.py --check
57
57
 
58
- #1941 — THIS SCRIPT ALSO GENERATES coord-tui's RUST WIRE TYPES. Unlike the TS
59
- half above, `tui/` still lives in *this* repo, so there is no cross-repo
60
- `--out`/env-var story: the Rust output path is a fixed, checked-in file,
61
- `tui/src/app/types/generated.rs`. The source of truth is a *different*
62
- OpenAPI document than the TS path reads — `coord.serve_app.openapi_spec()`
63
- (the daemon app, port 7435), not `coord.dashboard.server.openapi_spec()` (the
64
- dashboard app, port 7434) — because `GET /board`, the endpoint the TUI
65
- actually polls, is specified there, from the seven explicit wire DTOs in
66
- `coord/board_schema.py` (#1849). See `generate_rust()` below for the
67
- mechanical schema-walk + hand-curated-override split, which mirrors
68
- `ENUM_OVERRIDES`/`_ENUM_BLOCK` above but at the level of individual struct
69
- fields rather than whole enum types (Rust's richer type system — visibility,
70
- `#[serde(rename/default/deserialize_with)]`, custom deserializers for the
71
- INTEGER-backed-boolean guard — needs a finer-grained override point than TS
72
- did).
73
-
74
- # regenerate tui/src/app/types/generated.rs
75
- .venv/bin/python scripts/codegen.py --rust
58
+ #1941 (extended by #2897) — THIS SCRIPT ALSO GENERATES coord-tui's RUST WIRE
59
+ TYPES, and as of #2897 the Rust half is cross-repo capable the SAME SHAPE as
60
+ the TS half above. `tui/` still lives in *this* repo today, but the eventual
61
+ split (tracked separately — this story produces the shape, not the move)
62
+ means the destination can't stay a fixed, checked-in path either: it is named
63
+ explicitly by `--out PATH` or by `$COORD_TUI_SRC` pointing at a checkout root
64
+ whose `tui/` holds coord-tui's crate, with the same no-fallback-default
65
+ reasoning as `resolve_output_path` above — a guess is always wrong
66
+ post-split, and under `--check` it is wrong in the direction that reports
67
+ success. Today `$COORD_TUI_SRC=.` (this checkout's own root) reproduces the
68
+ old fixed-path behaviour exactly (`<root>/tui/src/app/types/generated.rs`,
69
+ i.e. `tui/src/app/types/generated.rs`).
70
+
71
+ The source of truth is a *different* OpenAPI document than the TS path reads
72
+ — `coord.serve_app.openapi_spec()` (the daemon app, port 7435), not
73
+ `coord.dashboard.server.openapi_spec()` (the dashboard app, port 7434) —
74
+ because `GET /board`, the endpoint the TUI actually polls, is specified
75
+ there, from the seven explicit wire DTOs in `coord/board_schema.py` (#1849).
76
+ See `generate_rust()` below for the mechanical schema-walk + hand-curated-
77
+ override split, which mirrors `ENUM_OVERRIDES`/`_ENUM_BLOCK` above but at the
78
+ level of individual struct fields rather than whole enum types (Rust's richer
79
+ type system — visibility, `#[serde(rename/default/deserialize_with)]`,
80
+ custom deserializers for the INTEGER-backed-boolean guard — needs a
81
+ finer-grained override point than TS did).
82
+
83
+ The drift GATE splits the same way #2009 split the TS one (docs/
84
+ ADR_COORD_TUI_CI.md, #2897): what stays here is
85
+ `tests/test_generated_rust_fixture.py`, narrowed to what one checkout can
86
+ prove — the generator runs, produces well-formed output, and covers every
87
+ schema in the served `/board` spec. The byte-for-byte comparison against a
88
+ committed `generated.rs` belongs to coord-tui's own CI once it exists,
89
+ installing `code-coordinator[server]` from PyPI to get this script — the same
90
+ shape `docs/ADR_COORD_WEB_CI.md` (#2006) already gave the TS half, just not
91
+ stood up yet (standing it up is the still-open "move" story's job, not
92
+ this one's).
93
+
94
+ The producer-side INTEGER-backed-boolean guard that used to cross-reference
95
+ the Rust source text against a live SQLite schema (`coord/board_bool_guard.py`)
96
+ is RETIRED as of #2897 — see `docs/ADR_COORD_TUI_CI.md` for the reasoning.
97
+ Short version: #2895 (Phase 1 of #2894) deleted coord-tui's last direct SQL
98
+ reader, so the structs this file generates are now the *only* Rust consumer
99
+ of column types, and they are already pinned int-vs-bool by the DTO-level
100
+ assertion in `tests/test_board_schema.py` (`board_schema.INTEGER_BACKED_BOOLEANS`).
101
+ The text-scraping half had no remaining subject once that was true.
102
+
103
+ # today, while tui/ still lives in this repo:
104
+ COORD_TUI_SRC=. .venv/bin/python scripts/codegen.py --rust
76
105
  # exit 1 (no write) if that file is stale
77
- .venv/bin/python scripts/codegen.py --rust --check
106
+ COORD_TUI_SRC=. .venv/bin/python scripts/codegen.py --rust --check
107
+ # or name the file directly
108
+ .venv/bin/python scripts/codegen.py --rust --out tui/src/app/types/generated.rs
78
109
  """
79
110
 
80
111
  from __future__ import annotations
@@ -90,17 +121,26 @@ from coord.serve_app import openapi_spec as board_openapi_spec
90
121
 
91
122
  REPO_ROOT = Path(__file__).resolve().parent.parent
92
123
 
93
- #: Fixed, in-repo destination for the generated Rust wire types (#1941).
94
- #: Unlike `OUTPUT_RELPATH` above, `tui/` never left this repo, so there is no
95
- #: cross-repo destination ambiguity to resolve — no `--out`, no env var.
96
- RUST_OUTPUT_PATH = REPO_ROOT / "tui" / "src" / "app" / "types" / "generated.rs"
97
-
98
124
  #: Path of the emitted file RELATIVE to a `coord-web` checkout's root.
99
125
  OUTPUT_RELPATH = Path("src") / "api" / "generated.ts"
100
126
 
101
127
  #: Env var naming a `coord-web` checkout root, used when `--out` is absent.
102
128
  OUTPUT_ENV_VAR = "COORD_WEB_SRC"
103
129
 
130
+ #: Path of the emitted file RELATIVE to a `$COORD_TUI_SRC` checkout root
131
+ #: (#2897) — i.e. `<root>/tui/src/app/types/generated.rs`. The `tui/` prefix
132
+ #: stays even though the TS analogue (`OUTPUT_RELPATH`) has no `webapp/`
133
+ #: prefix: today `$COORD_TUI_SRC` names *this* checkout (its coord-tui crate
134
+ #: lives under `tui/`), and the eventual split hasn't decided coord-tui's own
135
+ #: root layout yet — that decision belongs to the still-open "move" story,
136
+ #: not this one.
137
+ RUST_OUTPUT_RELPATH = Path("tui") / "src" / "app" / "types" / "generated.rs"
138
+
139
+ #: Env var naming a checkout root whose `tui/` holds coord-tui's crate,
140
+ #: used when `--out` is absent (#2897). `$COORD_TUI_SRC=.` (this checkout's
141
+ #: own root) reproduces today's old fixed-path behaviour exactly.
142
+ RUST_OUTPUT_ENV_VAR = "COORD_TUI_SRC"
143
+
104
144
 
105
145
  class OutputPathError(Exception):
106
146
  """No destination was named — see :func:`resolve_output_path`."""
@@ -126,6 +166,31 @@ def resolve_output_path(explicit: str | Path | None = None) -> Path:
126
166
  f"{OUTPUT_RELPATH}). See this script's module docstring."
127
167
  )
128
168
 
169
+
170
+ def resolve_rust_output_path(explicit: str | Path | None = None) -> Path:
171
+ """Where to write/check ``generated.rs``: ``--out`` > ``$COORD_TUI_SRC``.
172
+
173
+ Mirrors ``resolve_output_path`` above, for the Rust half (#2897). Raises
174
+ :class:`OutputPathError` when neither is set, rather than guessing:
175
+ `tui/` still lives in this repo today, but silently falling back to that
176
+ fixed path would either recreate a dead directory nobody consumes once
177
+ coord-tui moves out, or, worse, report "up to date" against a file that
178
+ is not the one actually named — the same failure shape #2009 called out
179
+ for the TS half. Pass ``COORD_TUI_SRC=.`` to reproduce today's old
180
+ fixed-path behaviour explicitly.
181
+ """
182
+ if explicit is not None:
183
+ return Path(explicit).expanduser()
184
+ root = os.environ.get(RUST_OUTPUT_ENV_VAR)
185
+ if root:
186
+ return Path(root).expanduser() / RUST_OUTPUT_RELPATH
187
+ raise OutputPathError(
188
+ "no destination for generated.rs. Pass --out PATH or set "
189
+ f"${RUST_OUTPUT_ENV_VAR} to a coord-tui checkout root (the file is "
190
+ f"written to its {RUST_OUTPUT_RELPATH}) — e.g. $COORD_TUI_SRC=. for "
191
+ "this checkout's own tui/. See this script's module docstring."
192
+ )
193
+
129
194
  # Schemas to emit as TS interfaces, in display order — purely cosmetic (TS
130
195
  # `interface` declarations are hoisted, so forward references within
131
196
  # generated.ts are legal regardless of order). Anything present in the spec
@@ -1174,7 +1239,7 @@ RUST_HEADER = """\
1174
1239
  //! `coord/board_schema.py` (#1849) — #1941. Regenerate after any field change:
1175
1240
  //!
1176
1241
  //! ```text
1177
- //! .venv/bin/python scripts/codegen.py --rust
1242
+ //! COORD_TUI_SRC=<coord-tui checkout root> .venv/bin/python scripts/codegen.py --rust
1178
1243
  //! ```
1179
1244
  //!
1180
1245
  //! (The fence is load-bearing, and `text` is the load-bearing part of *it*:
@@ -1183,17 +1248,21 @@ RUST_HEADER = """\
1183
1248
  //! that command as an indented block, or in a bare ``` fence, breaks
1184
1249
  //! `cargo test --doc` with `error: expected item, found `.``.)
1185
1250
  //!
1186
- //! `tests/test_generated_rust_fixture.py` fails CI if this file drifts from what
1187
- //! the generator produces right now, so a stale checkout can't merge — the Rust
1188
- //! equivalent of `tests/test_generated_types_fixture.py` on the TS side.
1251
+ //! #2897: the destination is named explicitly (`--out PATH` / `$COORD_TUI_SRC`
1252
+ //! — see this script's module docstring), the same shape #2009 gave the TS
1253
+ //! half. `tests/test_generated_rust_fixture.py` proves the generator runs and
1254
+ //! covers every schema; the byte-for-byte freshness check against *this file
1255
+ //! as committed* is coord-tui's own CI job once it exists
1256
+ //! (`docs/ADR_COORD_TUI_CI.md`) rather than a test in this repo.
1189
1257
  //!
1190
1258
  //! **Every field defaults.** `/board` is one JSON payload: a single type
1191
1259
  //! mismatch on a single field fails the *entire* `BoardPayload` parse and
1192
1260
  //! blanks every TUI panel — the #632/#546/#628 failure class this repo has
1193
- //! been bitten by three times (see `coord/board_bool_guard.py`). INTEGER-backed
1194
- //! boolean columns (`is_interactive`, `hold_after`, `no_acceptance`,
1195
- //! `review_scoped`) stay typed as an integer, or go through a coercing
1196
- //! deserializer — never a plain `bool` — for the same reason.
1261
+ //! been bitten by three times. INTEGER-backed boolean columns
1262
+ //! (`is_interactive`, `hold_after`, `no_acceptance`, `review_scoped`) stay
1263
+ //! typed as an integer, or go through a coercing deserializer — never a
1264
+ //! plain `bool` — for the same reason (`coord/board_schema.py`'s
1265
+ //! `INTEGER_BACKED_BOOLEANS`, asserted int-typed by `tests/test_board_schema.py`).
1197
1266
  //!
1198
1267
  //! Field types for anything already consumed by the TUI are hand-pinned in
1199
1268
  //! `RUST_FIELD_OVERRIDES` (`scripts/codegen.py`) to match this file's
@@ -1223,27 +1292,37 @@ def generate_rust() -> str:
1223
1292
 
1224
1293
 
1225
1294
  def _main_rust(args: list[str]) -> int:
1295
+ try:
1296
+ output_path = resolve_rust_output_path(_parse_out(args))
1297
+ except OutputPathError as exc:
1298
+ print(str(exc), file=sys.stderr)
1299
+ return 2
1226
1300
  content = generate_rust()
1227
1301
  if "--check" in args:
1228
- if not RUST_OUTPUT_PATH.exists():
1302
+ # #2897: a MISSING file is a hard failure, not "stale vs empty" —
1303
+ # mirrors the TS `--check` path's reasoning below. Absence usually
1304
+ # means --out/$COORD_TUI_SRC is pointing somewhere that is not a
1305
+ # coord-tui checkout, and treating that as ordinary staleness would
1306
+ # send an operator off to regenerate into the wrong directory.
1307
+ if not output_path.exists():
1229
1308
  print(
1230
- f"{RUST_OUTPUT_PATH} does not exist — run `python scripts/codegen.py "
1231
- "--rust` to generate it.",
1309
+ f"{output_path} does not exist — is --out/${RUST_OUTPUT_ENV_VAR} "
1310
+ "pointing at a coord-tui checkout?",
1232
1311
  file=sys.stderr,
1233
1312
  )
1234
1313
  return 1
1235
- if RUST_OUTPUT_PATH.read_text() != content:
1314
+ if output_path.read_text() != content:
1236
1315
  print(
1237
- f"{RUST_OUTPUT_PATH} is stale — run `python scripts/codegen.py --rust` "
1238
- "to regenerate.",
1316
+ f"{output_path} is stale — run `python scripts/codegen.py "
1317
+ f"--rust --out {output_path}` to regenerate.",
1239
1318
  file=sys.stderr,
1240
1319
  )
1241
1320
  return 1
1242
- print(f"{RUST_OUTPUT_PATH} is up to date.")
1321
+ print(f"{output_path} is up to date.")
1243
1322
  return 0
1244
- RUST_OUTPUT_PATH.parent.mkdir(parents=True, exist_ok=True)
1245
- RUST_OUTPUT_PATH.write_text(content)
1246
- print(f"wrote {RUST_OUTPUT_PATH}")
1323
+ output_path.parent.mkdir(parents=True, exist_ok=True)
1324
+ output_path.write_text(content)
1325
+ print(f"wrote {output_path}")
1247
1326
  return 0
1248
1327
 
1249
1328
 
@@ -1262,9 +1341,9 @@ def _parse_out(args: list[str]) -> str | None:
1262
1341
  def main(argv: list[str] | None = None) -> int:
1263
1342
  args = sys.argv[1:] if argv is None else argv
1264
1343
  if "--rust" in args:
1265
- # #1941: the Rust path has a fixed in-repo destination (no --out/env
1266
- # var story — see RUST_OUTPUT_PATH's docstring), so it skips the
1267
- # TS-only path resolution below entirely.
1344
+ # #2897: the Rust path is now cross-repo capable the same shape as
1345
+ # the TS path below (--out / $COORD_TUI_SRC, no fallback default) —
1346
+ # see resolve_rust_output_path's docstring.
1268
1347
  return _main_rust(args)
1269
1348
  try:
1270
1349
  output_path = resolve_output_path(_parse_out(args))