code-coordinator 0.5.544__tar.gz → 0.5.546__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 (914) hide show
  1. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/PKG-INFO +6 -1
  2. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/code_coordinator.egg-info/PKG-INFO +6 -1
  3. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/code_coordinator.egg-info/SOURCES.txt +2 -0
  4. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/code_coordinator.egg-info/requires.txt +8 -0
  5. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/code_coordinator.egg-info/scm_file_list.json +2 -0
  6. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/code_coordinator.egg-info/scm_version.json +2 -2
  7. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/acceptance_drivers.py +94 -7
  8. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/commands/acceptance.py +2 -2
  9. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/commands/milestone.py +8 -2
  10. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/config.py +65 -0
  11. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/review.py +180 -0
  12. code_coordinator-0.5.546/coord/tui_pty_driver.py +871 -0
  13. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/pyproject.toml +19 -1
  14. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_acceptance_drivers.py +137 -0
  15. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_acceptance.py +1 -1
  16. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_review.py +317 -0
  17. code_coordinator-0.5.546/tests/test_tui_pty_driver.py +620 -0
  18. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/.claude/commands/board.md +0 -0
  19. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/.claude/commands/complete-session.md +0 -0
  20. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/.claude/commands/coordinator.md +0 -0
  21. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/.githooks/_lib.sh +0 -0
  22. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/.githooks/post-checkout +0 -0
  23. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/.githooks/post-commit +0 -0
  24. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/.githooks/post-merge +0 -0
  25. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  26. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/.github/coord-ci-acceptance.yml +0 -0
  27. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/.github/workflows/auto-release.yml +0 -0
  28. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/.github/workflows/publish.yml +0 -0
  29. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/.github/workflows/test.yml +0 -0
  30. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/.gitignore +0 -0
  31. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/CLAUDE.md +0 -0
  32. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/GOAL.md +0 -0
  33. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/LICENSE +0 -0
  34. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/MANIFEST.in +0 -0
  35. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/README.md +0 -0
  36. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/code_coordinator.egg-info/dependency_links.txt +0 -0
  37. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/code_coordinator.egg-info/entry_points.txt +0 -0
  38. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/code_coordinator.egg-info/top_level.txt +0 -0
  39. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/__init__.py +0 -0
  40. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/_board_mapping.py +0 -0
  41. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/acceptance.py +0 -0
  42. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/agent.py +0 -0
  43. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/agent_app.py +0 -0
  44. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/agent_update.py +0 -0
  45. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/agents/opencode/.gitignore +0 -0
  46. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/agents/opencode/agents/work.md +0 -0
  47. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/agents/opencode/routing.jsonc +0 -0
  48. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/approved_work.py +0 -0
  49. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/audit.py +0 -0
  50. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/auto_loop.py +0 -0
  51. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/backup.py +0 -0
  52. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/block_log.py +0 -0
  53. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/board_schema.py +0 -0
  54. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/board_service.py +0 -0
  55. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/board_wire.py +0 -0
  56. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/brain.py +0 -0
  57. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/branch_model.py +0 -0
  58. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/bug_intake.py +0 -0
  59. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/cargo_cache.py +0 -0
  60. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/ci_fix.py +0 -0
  61. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/ci_github.py +0 -0
  62. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/ci_gitlab.py +0 -0
  63. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/ci_store.py +0 -0
  64. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/claim.py +0 -0
  65. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/claude_setup_token.py +0 -0
  66. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/cli.py +0 -0
  67. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/client.py +0 -0
  68. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/codegen.py +0 -0
  69. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/commands/__init__.py +0 -0
  70. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/commands/_common.py +0 -0
  71. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/commands/agent_ops.py +0 -0
  72. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/commands/audit.py +0 -0
  73. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/commands/backup.py +0 -0
  74. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/commands/chat.py +0 -0
  75. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/commands/ci.py +0 -0
  76. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/commands/codegen.py +0 -0
  77. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/commands/dispatch.py +0 -0
  78. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/commands/dispatch_workers.py +0 -0
  79. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/commands/dr.py +0 -0
  80. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/commands/drive.py +0 -0
  81. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/commands/drive_queue.py +0 -0
  82. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/commands/gate_a.py +0 -0
  83. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/commands/gates.py +0 -0
  84. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/commands/issues.py +0 -0
  85. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/commands/lifecycle.py +0 -0
  86. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/commands/machine.py +0 -0
  87. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/commands/merge.py +0 -0
  88. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/commands/plan_followup.py +0 -0
  89. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/commands/plans.py +0 -0
  90. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/commands/portal.py +0 -0
  91. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/commands/pr.py +0 -0
  92. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/commands/release.py +0 -0
  93. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/commands/repo.py +0 -0
  94. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/commands/report.py +0 -0
  95. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/commands/review.py +0 -0
  96. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/commands/scorecard.py +0 -0
  97. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/commands/sessions.py +0 -0
  98. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/commands/setup.py +0 -0
  99. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/commands/status.py +0 -0
  100. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/commands/store_migrate.py +0 -0
  101. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/commands/terminal.py +0 -0
  102. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/commands/test_gate.py +0 -0
  103. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/commands/tui.py +0 -0
  104. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/comments.py +0 -0
  105. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/config_reload.py +0 -0
  106. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/confirm_test.py +0 -0
  107. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/conflict_fix.py +0 -0
  108. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/dao.py +0 -0
  109. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/dashboard/__init__.py +0 -0
  110. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/dashboard/fixture.py +0 -0
  111. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/dashboard/index.html +0 -0
  112. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/dashboard/server.py +0 -0
  113. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/dashboard/terminal.py +0 -0
  114. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/db.py +0 -0
  115. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/dead_end.py +0 -0
  116. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/decomposition_chat.py +0 -0
  117. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/deploy/README.md +0 -0
  118. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/deploy/coord-agent.service +0 -0
  119. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/deploy/coord-backup.service +0 -0
  120. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/deploy/coord-backup.timer +0 -0
  121. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/deploy/coord-db-backup.service +0 -0
  122. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/deploy/coord-db-backup.sh +0 -0
  123. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/deploy/coord-db-backup.timer +0 -0
  124. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/deploy/coord-dr-verify.service +0 -0
  125. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/deploy/coord-dr-verify.timer +0 -0
  126. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/deploy/coord-drive-queue.service +0 -0
  127. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/deploy/coord-drive-queue.timer +0 -0
  128. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/deploy/coord-failure-notify.service +0 -0
  129. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/deploy/coord-fleet-watchdog.service +0 -0
  130. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/deploy/coord-fleet-watchdog.timer +0 -0
  131. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/deploy/coord-notify.service +0 -0
  132. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/deploy/coord-notify.timer +0 -0
  133. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/deploy/coord-release-propagate.service +0 -0
  134. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/deploy/coord-release-propagate.timer +0 -0
  135. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/deploy/coord-release-window.service +0 -0
  136. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/deploy/coord-release-window.timer +0 -0
  137. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/deploy/coord-serve.service +0 -0
  138. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/deploy/coord-web-dist-build.service +0 -0
  139. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/deploy/coord-web-dist-build.timer +0 -0
  140. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/deploy/coord-web.service +0 -0
  141. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/deploy_manifest.py +0 -0
  142. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/deploy_units.py +0 -0
  143. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/deprecation_telemetry.py +0 -0
  144. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/deps.py +0 -0
  145. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/diagnose.py +0 -0
  146. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/dispatch.py +0 -0
  147. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/dispatch_liveness.py +0 -0
  148. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/dist_name.py +0 -0
  149. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/dr_promote.py +0 -0
  150. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/dr_verify.py +0 -0
  151. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/drive.py +0 -0
  152. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/drive_queue.py +0 -0
  153. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/drive_sessions_snapshot.py +0 -0
  154. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/drive_state.py +0 -0
  155. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/events.py +0 -0
  156. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/failure_class.py +0 -0
  157. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/failure_classifier.py +0 -0
  158. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/filelock.py +0 -0
  159. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/fleet_config_health.py +0 -0
  160. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/forge_availability.py +0 -0
  161. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/freshness.py +0 -0
  162. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/gate_a.py +0 -0
  163. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/gate_b.py +0 -0
  164. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/gate_snapshot.py +0 -0
  165. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/gates.py +0 -0
  166. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/gen_board_fixture.py +0 -0
  167. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/github_ops.py +0 -0
  168. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/github_throttle.py +0 -0
  169. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/goal.py +0 -0
  170. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/graph_health.py +0 -0
  171. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/health/__init__.py +0 -0
  172. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/health/aggregate.py +0 -0
  173. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/health/checks/__init__.py +0 -0
  174. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/health/checks/_ci_pin.py +0 -0
  175. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/health/checks/agent_install.py +0 -0
  176. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/health/checks/cargo_targets.py +0 -0
  177. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/health/checks/claude_binary.py +0 -0
  178. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/health/checks/config_drift.py +0 -0
  179. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/health/checks/coord_tui_ci_pin.py +0 -0
  180. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/health/checks/coord_web_ci_pin.py +0 -0
  181. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/health/checks/deploy_lane_facts.py +0 -0
  182. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/health/checks/disk.py +0 -0
  183. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/health/checks/fleet_board.py +0 -0
  184. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  185. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/health/checks/fleet_phantom.py +0 -0
  186. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/health/checks/fleet_unit_drift.py +0 -0
  187. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/health/checks/graph.py +0 -0
  188. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/health/checks/graphify_cli.py +0 -0
  189. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/health/checks/index_lock.py +0 -0
  190. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/health/checks/issues_sync_staleness.py +0 -0
  191. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/health/checks/local_machine_identity.py +0 -0
  192. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/health/checks/plan_usage.py +0 -0
  193. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/health/checks/pr_churn.py +0 -0
  194. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/health/checks/release_cordon.py +0 -0
  195. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/health/checks/repo_state.py +0 -0
  196. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/health/checks/spawned_coord.py +0 -0
  197. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/health/checks/stalled_pipeline.py +0 -0
  198. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/health/checks/timer_active.py +0 -0
  199. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/health/checks/toolchain.py +0 -0
  200. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/health/checks/unit_drift.py +0 -0
  201. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/health/checks/unit_enablement.py +0 -0
  202. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/health/checks/wedged_drive_queue.py +0 -0
  203. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/health/checks/worktrees.py +0 -0
  204. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/health/cli.py +0 -0
  205. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/health/context.py +0 -0
  206. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/health/fleet_snapshot.py +0 -0
  207. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/health/models.py +0 -0
  208. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/health/pypi.py +0 -0
  209. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/health/registry.py +0 -0
  210. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/health/render.py +0 -0
  211. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/health/units.py +0 -0
  212. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/hooks.py +0 -0
  213. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/housekeeping.py +0 -0
  214. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/interactive.py +0 -0
  215. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/invariant_alarms.py +0 -0
  216. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/issue_store.py +0 -0
  217. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/issues_sync_status.py +0 -0
  218. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/liveness_auditor.py +0 -0
  219. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/machine_fault.py +0 -0
  220. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/machine_metrics.py +0 -0
  221. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/machine_onboard.py +0 -0
  222. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/machine_pause.py +0 -0
  223. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/machine_stats.py +0 -0
  224. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/merge_queue.py +0 -0
  225. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/milestone_chat.py +0 -0
  226. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/milestone_dispatch.py +0 -0
  227. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/milestone_gate.py +0 -0
  228. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/milestone_order.py +0 -0
  229. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/mock_author.py +0 -0
  230. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/models.py +0 -0
  231. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/network.py +0 -0
  232. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/new_issue_chat.py +0 -0
  233. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/notifier/__init__.py +0 -0
  234. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/notifier/baseline.py +0 -0
  235. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/notifier/cli.py +0 -0
  236. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/notifier/collect.py +0 -0
  237. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/notifier/digest.py +0 -0
  238. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/notifier/models.py +0 -0
  239. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/notifier/predicate.py +0 -0
  240. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/notifier/service.py +0 -0
  241. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/notifier/store.py +0 -0
  242. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/notifier/transport.py +0 -0
  243. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/notify.py +0 -0
  244. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/openapi.py +0 -0
  245. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/overlap_fence.py +0 -0
  246. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/overlap_predict.py +0 -0
  247. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/parentage.py +0 -0
  248. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/parentage_github.py +0 -0
  249. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/pipeline.py +0 -0
  250. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/plan_parser.py +0 -0
  251. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/plans.py +0 -0
  252. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/platform_paths.py +0 -0
  253. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/portal_bridge.py +0 -0
  254. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/portal_store.py +0 -0
  255. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/portal_sync.py +0 -0
  256. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/pr_body_lint.py +0 -0
  257. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/prereqs.py +0 -0
  258. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/progress.py +0 -0
  259. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/providers/__init__.py +0 -0
  260. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/providers/base.py +0 -0
  261. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/providers/claude.py +0 -0
  262. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/providers/claude_pty.py +0 -0
  263. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/providers/opencode.py +0 -0
  264. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/queue_diagnose.py +0 -0
  265. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/reconcile.py +0 -0
  266. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/reconcile_tick.py +0 -0
  267. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/refine_chat.py +0 -0
  268. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/release_cordon.py +0 -0
  269. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/release_propagate.py +0 -0
  270. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/release_verify.py +0 -0
  271. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/release_window.py +0 -0
  272. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/repo_dormancy.py +0 -0
  273. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/repo_edit.py +0 -0
  274. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/repo_onboard.py +0 -0
  275. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/reports.py +0 -0
  276. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/rest_schema.py +0 -0
  277. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/restart_cmd.py +0 -0
  278. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/revalidate.py +0 -0
  279. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/scorecard.py +0 -0
  280. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/self_health.py +0 -0
  281. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/serve_app.py +0 -0
  282. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  283. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  284. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  285. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  286. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  287. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/skills/portal-followup/SKILL.md +0 -0
  288. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/skills/release-now/SKILL.md +0 -0
  289. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  290. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  291. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/skills/update-issue/SKILL.md +0 -0
  292. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/smoke.py +0 -0
  293. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/smoke_tags.py +0 -0
  294. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/spend_ceiling.py +0 -0
  295. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/split_work.py +0 -0
  296. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/sql.py +0 -0
  297. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/stage_projection.py +0 -0
  298. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/state.py +0 -0
  299. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/store_migrate.py +0 -0
  300. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/store_parity.py +0 -0
  301. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/templates/deploy-cloudflare.node.yml +0 -0
  302. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/test_author.py +0 -0
  303. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/test_chat.py +0 -0
  304. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/test_orchestrator.py +0 -0
  305. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/test_report.py +0 -0
  306. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/tui_release.py +0 -0
  307. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/uat_checks.py +0 -0
  308. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/usage.py +0 -0
  309. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/usage_limits.py +0 -0
  310. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/usage_rollup.py +0 -0
  311. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coord/worker_events.py +0 -0
  312. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/coordinator.example.yml +0 -0
  313. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/deploy/coord-agent.service +0 -0
  314. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/deploy/coord-backup.service +0 -0
  315. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/deploy/coord-backup.timer +0 -0
  316. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/deploy/coord-db-backup.service +0 -0
  317. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/deploy/coord-db-backup.sh +0 -0
  318. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/deploy/coord-db-backup.timer +0 -0
  319. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/deploy/coord-dr-verify.service +0 -0
  320. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/deploy/coord-dr-verify.timer +0 -0
  321. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/deploy/coord-drive-queue.service +0 -0
  322. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/deploy/coord-drive-queue.timer +0 -0
  323. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/deploy/coord-failure-notify.service +0 -0
  324. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/deploy/coord-failure-notify.sh +0 -0
  325. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/deploy/coord-fleet-watchdog.service +0 -0
  326. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/deploy/coord-fleet-watchdog.timer +0 -0
  327. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/deploy/coord-notify.service +0 -0
  328. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/deploy/coord-notify.timer +0 -0
  329. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/deploy/coord-release-propagate.service +0 -0
  330. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/deploy/coord-release-propagate.timer +0 -0
  331. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/deploy/coord-release-window.service +0 -0
  332. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/deploy/coord-release-window.timer +0 -0
  333. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/deploy/coord-serve.service +0 -0
  334. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/deploy/coord-web-dist-build.service +0 -0
  335. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/deploy/coord-web-dist-build.sh +0 -0
  336. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/deploy/coord-web-dist-build.timer +0 -0
  337. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/deploy/coord-web-rollback.sh +0 -0
  338. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/deploy/coord-web.service +0 -0
  339. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/deploy/node-shim.sh +0 -0
  340. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/docs/ADR_COORD_TUI_CI.md +0 -0
  341. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  342. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/docs/ADR_COORD_WEB_CI.md +0 -0
  343. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/docs/ADR_COORD_WEB_DIST.md +0 -0
  344. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
  345. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/docs/AGENT_OPERATIONS.md +0 -0
  346. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/docs/ARCHITECTURE.md +0 -0
  347. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/docs/ARCH_SECURITY_GATES.md +0 -0
  348. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/docs/COCKPIT.md +0 -0
  349. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/docs/CONTROL_CENTER.md +0 -0
  350. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/docs/COST_DISCIPLINE.md +0 -0
  351. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/docs/CROSS_PLATFORM.md +0 -0
  352. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/docs/CUSTOMER_FACING_APPS.md +0 -0
  353. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/docs/CUSTOMER_PORTAL.md +0 -0
  354. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/docs/DATA_STORE_SELECTION.md +0 -0
  355. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/docs/DISASTER_RECOVERY.md +0 -0
  356. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/docs/DRIVE_QUEUE.md +0 -0
  357. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/docs/EPHEMERAL_WORKERS.md +0 -0
  358. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/docs/FORGE_MIGRATION.md +0 -0
  359. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/docs/GRAPHIFY_SETUP.md +0 -0
  360. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/docs/ISSUE_GUIDANCE.md +0 -0
  361. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/docs/MAC_MINI.md +0 -0
  362. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  363. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/docs/NOTIFIER.md +0 -0
  364. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/docs/OPENCODE_VERIFICATION.md +0 -0
  365. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/docs/OPERATING_GOTCHAS.md +0 -0
  366. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/docs/OPERATOR_GUIDES.md +0 -0
  367. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/docs/ORACLE_LOOP.md +0 -0
  368. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/docs/PHONE_WEBAPP.md +0 -0
  369. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/docs/PIPELINE_V2.md +0 -0
  370. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/docs/PLATFORM_EVOLUTION.md +0 -0
  371. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/docs/SECOND_BACKEND.md +0 -0
  372. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/docs/STORE_SERVICE.md +0 -0
  373. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  374. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/docs/WEB_CONTROL_CENTER.md +0 -0
  375. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/docs/WSL_WINDOWS_WORKER.md +0 -0
  376. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/docs/mocks/web/README.md +0 -0
  377. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/docs/mocks/web/_tokens.css +0 -0
  378. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/docs/mocks/web/issue-detail.html +0 -0
  379. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/docs/mocks/web/pipeline-narrow.html +0 -0
  380. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/docs/mocks/web/pipeline-wide.html +0 -0
  381. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/graphify-out/.gitignore +0 -0
  382. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/install-agent.sh +0 -0
  383. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/scripts/audit_review_verdict_overrides.py +0 -0
  384. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  385. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/scripts/azure-workers/build-worker-image.sh +0 -0
  386. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/scripts/azure-workers/coordinator-machine.py +0 -0
  387. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/scripts/azure-workers/dr-down.sh +0 -0
  388. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/scripts/azure-workers/dr-up.sh +0 -0
  389. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/scripts/azure-workers/epic-down.sh +0 -0
  390. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/scripts/azure-workers/epic-up.sh +0 -0
  391. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/scripts/azure-workers/preflight.sh +0 -0
  392. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/scripts/azure-workers/provision-server.sh +0 -0
  393. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/scripts/azure-workers/provision-worker.sh +0 -0
  394. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  395. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  396. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/scripts/azure-workers/throwaway-vm.sh +0 -0
  397. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/scripts/azure-workers/verify-github-token.sh +0 -0
  398. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/scripts/check_gh_argv_containment.py +0 -0
  399. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/scripts/codegen.py +0 -0
  400. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/scripts/coord-test-runner.sh +0 -0
  401. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
  402. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
  403. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
  404. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
  405. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/scripts/coord-venv-rollback.sh +0 -0
  406. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/scripts/drive-batch.sh +0 -0
  407. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/scripts/extract-coord-tui.sh +0 -0
  408. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/scripts/fleet_watchdog.py +0 -0
  409. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/scripts/gen_board_fixture.py +0 -0
  410. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/scripts/gen_mock_index.py +0 -0
  411. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/scripts/lib/provision-core.sh +0 -0
  412. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/scripts/next_release_tag.py +0 -0
  413. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/scripts/provision-machine.sh +0 -0
  414. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/scripts/run_tests_in_populated_home.sh +0 -0
  415. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/scripts/run_tests_without_gh.sh +0 -0
  416. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/scripts/setup-macmini.sh +0 -0
  417. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/scripts/smoke_437_interactive.py +0 -0
  418. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/scripts/verify-provision-noble.sh +0 -0
  419. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/scripts/verify_878_review_capture.py +0 -0
  420. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/scripts/verify_release_published.py +0 -0
  421. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/scripts/verify_release_wheel.py +0 -0
  422. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/setup.cfg +0 -0
  423. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/SMOKE_SET.md +0 -0
  424. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/__init__.py +0 -0
  425. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/acceptance/ms-37/conftest.py +0 -0
  426. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/acceptance/ms-37/contract.md +0 -0
  427. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/acceptance/ms-37/manifest.yml +0 -0
  428. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  429. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  430. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/acceptance/ms-51/contract.md +0 -0
  431. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  432. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  433. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/acceptance/ms-51/manifest.yml +0 -0
  434. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  435. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/acceptance/ms-51/tsconfig.json +0 -0
  436. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  437. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/backends.py +0 -0
  438. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/conftest.py +0 -0
  439. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/fixtures/board-pipeline-basic.json +0 -0
  440. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  441. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  442. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  443. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  444. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/fixtures/playwright/all_pass.json +0 -0
  445. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  446. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/fixtures/playwright/mixed_fail.json +0 -0
  447. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  448. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  449. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/fixtures/playwright/skip.json +0 -0
  450. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/fixtures/playwright/truncated.json +0 -0
  451. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  452. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  453. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  454. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  455. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/fixtures/test_report/pytest_error_log_record.txt +0 -0
  456. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  457. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  458. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  459. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  460. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_acceptance.py +0 -0
  461. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_agent.py +0 -0
  462. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_agent_api_error.py +0 -0
  463. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_agent_app.py +0 -0
  464. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_agent_branch_base.py +0 -0
  465. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_agent_branch_capture.py +0 -0
  466. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_agent_config_free_1712.py +0 -0
  467. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_agent_deploy_units_endpoint.py +0 -0
  468. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_agent_dirty_worktree.py +0 -0
  469. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  470. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_agent_graph_self_heal.py +0 -0
  471. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_agent_health_h3.py +0 -0
  472. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_agent_idle_restart.py +0 -0
  473. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_agent_push_failure.py +0 -0
  474. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_agent_reap.py +0 -0
  475. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_agent_repos_and_pull.py +0 -0
  476. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_agent_restart_services_endpoint.py +0 -0
  477. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_agent_skills_self_heal.py +0 -0
  478. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_agent_startup_diagnostics.py +0 -0
  479. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_agent_update.py +0 -0
  480. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_agent_update_bluegreen.py +0 -0
  481. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_agent_usage_limit.py +0 -0
  482. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_agent_zero_commit.py +0 -0
  483. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_ambient_home_isolation.py +0 -0
  484. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_approve_capability_reroute_3241.py +0 -0
  485. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_approve_dependency_busy_2804.py +0 -0
  486. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_approve_reject_plan.py +0 -0
  487. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_approve_usage_gate.py +0 -0
  488. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_approved_work_2532.py +0 -0
  489. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_approved_work_2996.py +0 -0
  490. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_assignment_already_recorded_daemon.py +0 -0
  491. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_audit_log.py +0 -0
  492. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_audit_outcome.py +0 -0
  493. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_audit_query.py +0 -0
  494. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_auto_loop.py +0 -0
  495. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_auto_release_publish_2035.py +0 -0
  496. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_backend_selection.py +0 -0
  497. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_backup.py +0 -0
  498. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_base_checkout_restore.py +0 -0
  499. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_block_log.py +0 -0
  500. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_board_cap_762.py +0 -0
  501. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_board_fixture.py +0 -0
  502. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_board_read_path.py +0 -0
  503. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_board_schema.py +0 -0
  504. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_board_service.py +0 -0
  505. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_board_state.py +0 -0
  506. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_board_wire.py +0 -0
  507. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_brain.py +0 -0
  508. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_branch_model.py +0 -0
  509. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_bug_intake.py +0 -0
  510. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_build_worker_image_env_update.py +0 -0
  511. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cargo_cache.py +0 -0
  512. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_check_gh_argv_containment.py +0 -0
  513. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_ci_acceptance_gate_1950.py +0 -0
  514. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_ci_fix.py +0 -0
  515. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_ci_github.py +0 -0
  516. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_ci_gitlab.py +0 -0
  517. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_ci_parity_2091.py +0 -0
  518. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_ci_store.py +0 -0
  519. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_claim.py +0 -0
  520. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_claude_md_budget.py +0 -0
  521. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_claude_setup_token.py +0 -0
  522. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_assign.py +0 -0
  523. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  524. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_assign_interactive_remote.py +0 -0
  525. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_assign_provider.py +0 -0
  526. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  527. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_audit.py +0 -0
  528. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_chat_continue.py +0 -0
  529. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_ci.py +0 -0
  530. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_codegen.py +0 -0
  531. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_decide.py +0 -0
  532. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_diagnose_capability_rules.py +0 -0
  533. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_diagnose_config_provenance.py +0 -0
  534. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_diagnose_forge_availability.py +0 -0
  535. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_diagnose_graph.py +0 -0
  536. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_diagnose_self.py +0 -0
  537. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_diagnose_test_coverage.py +0 -0
  538. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_doctor.py +0 -0
  539. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_doctor_config_free_1801.py +0 -0
  540. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  541. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_doctor_store_backend_3084.py +0 -0
  542. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_drive.py +0 -0
  543. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_drive_queue.py +0 -0
  544. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_escalate.py +0 -0
  545. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_fix_headless_review.py +0 -0
  546. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_gate_a.py +0 -0
  547. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_install_drift.py +0 -0
  548. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_install_skills.py +0 -0
  549. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_issue_comment.py +0 -0
  550. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_issue_create_label.py +0 -0
  551. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_issue_reopen.py +0 -0
  552. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_issue_view_list.py +0 -0
  553. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_issues.py +0 -0
  554. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_merge.py +0 -0
  555. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_milestone_assign.py +0 -0
  556. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_milestone_capture.py +0 -0
  557. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_milestone_chat_add_child.py +0 -0
  558. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_milestone_dispatch.py +0 -0
  559. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_milestone_gate_b.py +0 -0
  560. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_milestone_gate_c.py +0 -0
  561. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_milestone_order.py +0 -0
  562. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  563. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_milestone_ship.py +0 -0
  564. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_network.py +0 -0
  565. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_new_issue_chat.py +0 -0
  566. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_plans.py +0 -0
  567. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_portal.py +0 -0
  568. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_pr.py +0 -0
  569. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_pull_artifact.py +0 -0
  570. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_queue.py +0 -0
  571. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_reattach_sessions.py +0 -0
  572. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_refine_board.py +0 -0
  573. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_release_preflight.py +0 -0
  574. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_release_propagate.py +0 -0
  575. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_release_window.py +0 -0
  576. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_repo_2220.py +0 -0
  577. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
  578. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_scorecard.py +0 -0
  579. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_serve_store_backend_3084.py +0 -0
  580. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_set_review_findings.py +0 -0
  581. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_status_advisory_terminal.py +0 -0
  582. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_status_contested_tag.py +0 -0
  583. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_status_invariant_alarms.py +0 -0
  584. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_status_machine_fault.py +0 -0
  585. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_status_merge_queue.py +0 -0
  586. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_status_provider.py +0 -0
  587. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_status_retried_3340.py +0 -0
  588. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_status_review_finalizing.py +0 -0
  589. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_status_supervisor_3366.py +0 -0
  590. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_status_test_failed_tag.py +0 -0
  591. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_status_usage_limit.py +0 -0
  592. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_sync_comments_873.py +0 -0
  593. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_test_plan.py +0 -0
  594. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_track.py +0 -0
  595. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_tui_update.py +0 -0
  596. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cli_wait.py +0 -0
  597. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_client.py +0 -0
  598. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_client_base_install.py +0 -0
  599. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_client_config_cache_atomic_3052.py +0 -0
  600. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_client_resource_migration_1946.py +0 -0
  601. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_commands_common.py +0 -0
  602. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_comments.py +0 -0
  603. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_completion_summary.py +0 -0
  604. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_config.py +0 -0
  605. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_config_acceptance.py +0 -0
  606. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_config_audit.py +0 -0
  607. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_config_drift_check.py +0 -0
  608. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_config_effective.py +0 -0
  609. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_config_pricing.py +0 -0
  610. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  611. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_config_usage_gate.py +0 -0
  612. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_confirm_test.py +0 -0
  613. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_conflict_fix.py +0 -0
  614. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_conflict_fix_semantic.py +0 -0
  615. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
  616. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_coord_test.py +0 -0
  617. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
  618. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_coord_test_runner_baseline.py +0 -0
  619. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_coord_test_runner_populated_home.py +0 -0
  620. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_coord_test_runner_routing.py +0 -0
  621. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_coord_test_runner_toolchain.py +0 -0
  622. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_coord_uat.py +0 -0
  623. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_coord_web_sse_restart_live.py +0 -0
  624. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_coordinator_machine.py +0 -0
  625. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_cross_platform_imports.py +0 -0
  626. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_dao.py +0 -0
  627. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_dashboard.py +0 -0
  628. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_dashboard_api.py +0 -0
  629. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_dashboard_fixture.py +0 -0
  630. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_dashboard_server.py +0 -0
  631. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_dashboard_terminal.py +0 -0
  632. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_dashboard_terminal_live.py +0 -0
  633. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_db.py +0 -0
  634. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_dead_end.py +0 -0
  635. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_decomposition_chat.py +0 -0
  636. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_deploy_coord_db_backup.py +0 -0
  637. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_deploy_coord_web_dist.py +0 -0
  638. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_deploy_coord_web_rollback.py +0 -0
  639. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_deploy_db_backup_unit.py +0 -0
  640. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_deploy_drive_queue_unit.py +0 -0
  641. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_deploy_failure_notify_unit.py +0 -0
  642. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_deploy_manifest.py +0 -0
  643. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_deploy_notify_unit.py +0 -0
  644. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_deploy_units_lane.py +0 -0
  645. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_deploy_web_unit.py +0 -0
  646. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_deprecation_telemetry.py +0 -0
  647. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_deps.py +0 -0
  648. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_diagnose.py +0 -0
  649. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_dispatch.py +0 -0
  650. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_dispatch_liveness.py +0 -0
  651. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_dispatch_target_validation.py +0 -0
  652. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_dispatch_workers.py +0 -0
  653. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_dist_name.py +0 -0
  654. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_done_housekeeping.py +0 -0
  655. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_dr_azure_scripts.py +0 -0
  656. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_dr_promote.py +0 -0
  657. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_dr_verify.py +0 -0
  658. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_drive.py +0 -0
  659. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_drive_machine_fault.py +0 -0
  660. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_drive_queue.py +0 -0
  661. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_drive_queue_blocked_rendering.py +0 -0
  662. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_drive_queue_launch_argv.py +0 -0
  663. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_drive_queue_max_parallel_config.py +0 -0
  664. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
  665. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_drive_queue_roll_pending.py +0 -0
  666. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
  667. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_drive_sessions_snapshot.py +0 -0
  668. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_drive_state.py +0 -0
  669. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_drive_tmux.py +0 -0
  670. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_epic_up_capability_detection.py +0 -0
  671. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  672. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_epic_up_image_provenance.py +0 -0
  673. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_errors.py +0 -0
  674. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_events.py +0 -0
  675. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_failure_class.py +0 -0
  676. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_failure_classifier.py +0 -0
  677. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_filelock.py +0 -0
  678. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  679. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_fix_escalation_classifier.py +0 -0
  680. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_fix_of_force_override.py +0 -0
  681. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_fleet_config_health.py +0 -0
  682. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_fleet_health_probes.py +0 -0
  683. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_fleet_health_snapshot.py +0 -0
  684. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_fleet_watchdog.py +0 -0
  685. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_forge_availability.py +0 -0
  686. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_freshness.py +0 -0
  687. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_gate_a.py +0 -0
  688. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_gate_b.py +0 -0
  689. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_gate_snapshot_staleness.py +0 -0
  690. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_gates.py +0 -0
  691. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  692. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_gen_mock_index.py +0 -0
  693. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_generated_rust_fixture.py +0 -0
  694. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_generated_rust_requests.py +0 -0
  695. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_generated_types_fixture.py +0 -0
  696. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_github_ops.py +0 -0
  697. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_github_throttle.py +0 -0
  698. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_goal.py +0 -0
  699. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_graph_health.py +0 -0
  700. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_graph_selfheal_absent_2237.py +0 -0
  701. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_handoff.py +0 -0
  702. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_health_checks.py +0 -0
  703. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_health_cli.py +0 -0
  704. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_health_cli_graph.py +0 -0
  705. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_health_config.py +0 -0
  706. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_health_context.py +0 -0
  707. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_health_coord_tui_ci_pin.py +0 -0
  708. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_health_coord_web_ci_pin.py +0 -0
  709. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_health_deploy_lane_facts.py +0 -0
  710. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_health_fix.py +0 -0
  711. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_health_incident_regression.py +0 -0
  712. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_health_issues_sync_staleness.py +0 -0
  713. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_health_pr_churn.py +0 -0
  714. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_health_pypi.py +0 -0
  715. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_health_registry.py +0 -0
  716. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_health_release_cordon_probe.py +0 -0
  717. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_health_timer_active.py +0 -0
  718. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_health_toolchain.py +0 -0
  719. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_health_unit_drift.py +0 -0
  720. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_health_unit_enablement.py +0 -0
  721. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_health_wedged_drive_queue.py +0 -0
  722. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_hooks.py +0 -0
  723. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_housekeeping.py +0 -0
  724. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_human_attended_437.py +0 -0
  725. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_init.py +0 -0
  726. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_install_agent_venv_2911.py +0 -0
  727. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_integration.py +0 -0
  728. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_interactive.py +0 -0
  729. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_interactive_briefing_echo.py +0 -0
  730. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_interactive_pane_log_2541.py +0 -0
  731. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_interactive_prefill_state.py +0 -0
  732. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_interactive_session_relaunch.py +0 -0
  733. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_interactive_test_verdict_backstop.py +0 -0
  734. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_interactive_token_attribution.py +0 -0
  735. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_interactive_worktree.py +0 -0
  736. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_invariant_alarms.py +0 -0
  737. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_issue_store_seam.py +0 -0
  738. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_issues_sync_status.py +0 -0
  739. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_liveness_auditor.py +0 -0
  740. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_liveness_notify.py +0 -0
  741. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_lock_contention_ratchet.py +0 -0
  742. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_machine_fault.py +0 -0
  743. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_machine_metrics.py +0 -0
  744. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_machine_onboard.py +0 -0
  745. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_machine_pause.py +0 -0
  746. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_machine_stats.py +0 -0
  747. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_merge_queue.py +0 -0
  748. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_merge_verify.py +0 -0
  749. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_milestone_chat.py +0 -0
  750. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_milestone_dispatch.py +0 -0
  751. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_milestone_gate.py +0 -0
  752. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_milestone_order.py +0 -0
  753. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_milestone_seam.py +0 -0
  754. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_mock_author.py +0 -0
  755. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_model_tiering.py +0 -0
  756. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_models.py +0 -0
  757. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_models_config_labels.py +0 -0
  758. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_needs_attention.py +0 -0
  759. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_network.py +0 -0
  760. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_new_issue_chat.py +0 -0
  761. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_next_release_tag.py +0 -0
  762. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_node_shim.py +0 -0
  763. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_notifier_baseline.py +0 -0
  764. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_notifier_cli.py +0 -0
  765. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_notifier_collect.py +0 -0
  766. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_notifier_config.py +0 -0
  767. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_notifier_drive_seam.py +0 -0
  768. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_notifier_isolation.py +0 -0
  769. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_notifier_predicate.py +0 -0
  770. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_notifier_quiet_hours.py +0 -0
  771. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_notifier_service.py +0 -0
  772. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_notify.py +0 -0
  773. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_notify_drain.py +0 -0
  774. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_openapi.py +0 -0
  775. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_operational_defaults.py +0 -0
  776. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_overlap_fence.py +0 -0
  777. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_overlap_predict.py +0 -0
  778. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_packaged_deploy_units.py +0 -0
  779. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_parentage.py +0 -0
  780. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_paste_landed.py +0 -0
  781. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
  782. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_pipeline.py +0 -0
  783. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_plan_followup_approve_plan_command.py +0 -0
  784. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_plan_followup_pr_command.py +0 -0
  785. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_plan_followup_review_command.py +0 -0
  786. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_plan_only.py +0 -0
  787. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_plan_parser.py +0 -0
  788. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_platform_paths.py +0 -0
  789. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_portal_bridge.py +0 -0
  790. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_portal_config.py +0 -0
  791. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_portal_store.py +0 -0
  792. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_portal_sync.py +0 -0
  793. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_pr_body_lint.py +0 -0
  794. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_prereqs.py +0 -0
  795. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_production_db_guard.py +0 -0
  796. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_progress.py +0 -0
  797. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_provider_seam.py +0 -0
  798. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_providers.py +0 -0
  799. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_providers_config_labels.py +0 -0
  800. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_providers_pty.py +0 -0
  801. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_provision_core.py +0 -0
  802. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_provision_machine.py +0 -0
  803. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_py_rust_mirror_inventory.py +0 -0
  804. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_quiet_hours.py +0 -0
  805. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_quiet_hours_store_2146.py +0 -0
  806. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_reap_merged_sessions.py +0 -0
  807. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_reap_stale_interactive_tick.py +0 -0
  808. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_reconcile.py +0 -0
  809. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_reconcile_branch.py +0 -0
  810. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_reconcile_completions.py +0 -0
  811. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
  812. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_reconcile_merges.py +0 -0
  813. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_reconcile_no_agent_record.py +0 -0
  814. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_reconcile_tick.py +0 -0
  815. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_reconcile_usage_limit_done.py +0 -0
  816. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_refine_chat.py +0 -0
  817. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_release_cordon_2101.py +0 -0
  818. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  819. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_release_cordon_deadlock_2240.py +0 -0
  820. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_release_cordon_drain_stall_3336.py +0 -0
  821. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_release_cordon_stuck_2490.py +0 -0
  822. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_release_propagate.py +0 -0
  823. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_release_propagate_threshold.py +0 -0
  824. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_release_roll_between_legs_2854.py +0 -0
  825. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_release_roll_window_handoff.py +0 -0
  826. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_release_unified_1242.py +0 -0
  827. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_release_verify.py +0 -0
  828. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_release_window.py +0 -0
  829. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_remote_auto_prune.py +0 -0
  830. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_remote_interactive_reaper.py +0 -0
  831. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_repo_add.py +0 -0
  832. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_repo_dormancy.py +0 -0
  833. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_repo_edit_2220.py +0 -0
  834. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_repo_graph_fleet_2237.py +0 -0
  835. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_repo_max_parallel_3423.py +0 -0
  836. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_repo_onboard_2220.py +0 -0
  837. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_report_result_push.py +0 -0
  838. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_reports.py +0 -0
  839. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_restart_cmd.py +0 -0
  840. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_retry.py +0 -0
  841. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_retry_advisory_1606.py +0 -0
  842. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_retry_escalation_classify_3360.py +0 -0
  843. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_retry_type_1636.py +0 -0
  844. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_revalidate.py +0 -0
  845. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_review_end_review_without_verdict.py +0 -0
  846. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_review_parse_failure_diagnostic.py +0 -0
  847. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_review_reaffirm.py +0 -0
  848. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_review_state.py +0 -0
  849. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_review_verdict_backstop.py +0 -0
  850. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_review_verdict_override_audit.py +0 -0
  851. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_review_verdict_relay.py +0 -0
  852. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_review_zero_commits.py +0 -0
  853. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_scoped_review_wiring.py +0 -0
  854. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_scorecard.py +0 -0
  855. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_self_health.py +0 -0
  856. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_serve.py +0 -0
  857. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_serve_app.py +0 -0
  858. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_serve_app_board_trim.py +0 -0
  859. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_serve_rest_routes.py +0 -0
  860. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_session.py +0 -0
  861. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_slice_issue_attribution.py +0 -0
  862. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_smoke.py +0 -0
  863. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_smoke_fanout_manifest_3333.py +0 -0
  864. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_smoke_live_checkout_restore.py +0 -0
  865. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_smoke_workflow.py +0 -0
  866. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_spend_ceiling.py +0 -0
  867. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_spend_ceiling_coordinator.py +0 -0
  868. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_split.py +0 -0
  869. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_split_work.py +0 -0
  870. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_sql_dialect.py +0 -0
  871. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_sqlite_connect_ratchet.py +0 -0
  872. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_stage_projection.py +0 -0
  873. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_stale_busy_reviewer_697.py +0 -0
  874. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_stalled_pipeline.py +0 -0
  875. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_state.py +0 -0
  876. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_state_review_findings_daemon.py +0 -0
  877. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_status_fleet_footer.py +0 -0
  878. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_stop_1567.py +0 -0
  879. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_store_contract.py +0 -0
  880. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_store_migrate.py +0 -0
  881. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_stuck.py +0 -0
  882. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
  883. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_terminal_command.py +0 -0
  884. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_test_author.py +0 -0
  885. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_test_chat.py +0 -0
  886. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_test_orchestrator.py +0 -0
  887. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_test_report.py +0 -0
  888. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_test_verdict_parsing.py +0 -0
  889. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_test_verdict_transcript_floor.py +0 -0
  890. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_text_io_encoding_audit.py +0 -0
  891. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_thin_client_board_audit.py +0 -0
  892. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_thin_client_config_load_1080.py +0 -0
  893. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_thin_client_daemon_routing_906.py +0 -0
  894. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_throwaway_vm.py +0 -0
  895. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_tmux_host.py +0 -0
  896. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_tmux_session.py +0 -0
  897. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_transcript_floor.py +0 -0
  898. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_uat_checks.py +0 -0
  899. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_usage.py +0 -0
  900. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_usage_limits.py +0 -0
  901. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_usage_rollup.py +0 -0
  902. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_venv_live_install_2121.py +0 -0
  903. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_version_single_source.py +0 -0
  904. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_watch.py +0 -0
  905. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  906. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_worker_env_venv_isolation.py +0 -0
  907. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_worker_events.py +0 -0
  908. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_worker_image_pin_sync.py +0 -0
  909. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_worker_safety.py +0 -0
  910. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_worker_test_scoping.py +0 -0
  911. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_worktree.py +0 -0
  912. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  913. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/test_write_parity.py +0 -0
  914. {code_coordinator-0.5.544 → code_coordinator-0.5.546}/tests/write_parity.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-coordinator
3
- Version: 0.5.544
3
+ Version: 0.5.546
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
@@ -30,12 +30,17 @@ Provides-Extra: postgres
30
30
  Requires-Dist: psycopg[binary]>=3.1; extra == "postgres"
31
31
  Provides-Extra: reports-xlsx
32
32
  Requires-Dist: openpyxl>=3.1; extra == "reports-xlsx"
33
+ Provides-Extra: tui-pty
34
+ Requires-Dist: pyte>=0.8; extra == "tui-pty"
35
+ Requires-Dist: pywinpty>=2.0; sys_platform == "win32" and extra == "tui-pty"
33
36
  Provides-Extra: all
34
37
  Requires-Dist: code-coordinator[server]; extra == "all"
35
38
  Requires-Dist: code-coordinator[reports-xlsx]; extra == "all"
39
+ Requires-Dist: code-coordinator[tui-pty]; extra == "all"
36
40
  Provides-Extra: dev
37
41
  Requires-Dist: code-coordinator[server]; extra == "dev"
38
42
  Requires-Dist: code-coordinator[reports-xlsx]; extra == "dev"
43
+ Requires-Dist: code-coordinator[tui-pty]; extra == "dev"
39
44
  Requires-Dist: pytest>=8.0; extra == "dev"
40
45
  Requires-Dist: pytest-asyncio>=0.23; extra == "dev"
41
46
  Requires-Dist: pytest-xdist>=3.5; extra == "dev"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-coordinator
3
- Version: 0.5.544
3
+ Version: 0.5.546
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
@@ -30,12 +30,17 @@ Provides-Extra: postgres
30
30
  Requires-Dist: psycopg[binary]>=3.1; extra == "postgres"
31
31
  Provides-Extra: reports-xlsx
32
32
  Requires-Dist: openpyxl>=3.1; extra == "reports-xlsx"
33
+ Provides-Extra: tui-pty
34
+ Requires-Dist: pyte>=0.8; extra == "tui-pty"
35
+ Requires-Dist: pywinpty>=2.0; sys_platform == "win32" and extra == "tui-pty"
33
36
  Provides-Extra: all
34
37
  Requires-Dist: code-coordinator[server]; extra == "all"
35
38
  Requires-Dist: code-coordinator[reports-xlsx]; extra == "all"
39
+ Requires-Dist: code-coordinator[tui-pty]; extra == "all"
36
40
  Provides-Extra: dev
37
41
  Requires-Dist: code-coordinator[server]; extra == "dev"
38
42
  Requires-Dist: code-coordinator[reports-xlsx]; extra == "dev"
43
+ Requires-Dist: code-coordinator[tui-pty]; extra == "dev"
39
44
  Requires-Dist: pytest>=8.0; extra == "dev"
40
45
  Requires-Dist: pytest-asyncio>=0.23; extra == "dev"
41
46
  Requires-Dist: pytest-xdist>=3.5; extra == "dev"
@@ -163,6 +163,7 @@ coord/test_author.py
163
163
  coord/test_chat.py
164
164
  coord/test_orchestrator.py
165
165
  coord/test_report.py
166
+ coord/tui_pty_driver.py
166
167
  coord/tui_release.py
167
168
  coord/uat_checks.py
168
169
  coord/usage.py
@@ -858,6 +859,7 @@ tests/test_throwaway_vm.py
858
859
  tests/test_tmux_host.py
859
860
  tests/test_tmux_session.py
860
861
  tests/test_transcript_floor.py
862
+ tests/test_tui_pty_driver.py
861
863
  tests/test_uat_checks.py
862
864
  tests/test_usage.py
863
865
  tests/test_usage_limits.py
@@ -9,10 +9,12 @@ tzdata
9
9
  [all]
10
10
  code-coordinator[server]
11
11
  code-coordinator[reports-xlsx]
12
+ code-coordinator[tui-pty]
12
13
 
13
14
  [dev]
14
15
  code-coordinator[server]
15
16
  code-coordinator[reports-xlsx]
17
+ code-coordinator[tui-pty]
16
18
  pytest>=8.0
17
19
  pytest-asyncio>=0.23
18
20
  pytest-xdist>=3.5
@@ -31,3 +33,9 @@ starlette>=0.37
31
33
  uvicorn>=0.30
32
34
  websockets>=12.0
33
35
  psutil>=5.9
36
+
37
+ [tui-pty]
38
+ pyte>=0.8
39
+
40
+ [tui-pty:sys_platform == "win32"]
41
+ pywinpty>=2.0
@@ -290,6 +290,7 @@
290
290
  "coord/test_chat.py",
291
291
  "coord/test_orchestrator.py",
292
292
  "coord/test_report.py",
293
+ "coord/tui_pty_driver.py",
293
294
  "coord/tui_release.py",
294
295
  "coord/uat_checks.py",
295
296
  "coord/usage.py",
@@ -885,6 +886,7 @@
885
886
  "tests/test_tmux_host.py",
886
887
  "tests/test_tmux_session.py",
887
888
  "tests/test_transcript_floor.py",
889
+ "tests/test_tui_pty_driver.py",
888
890
  "tests/test_uat_checks.py",
889
891
  "tests/test_usage.py",
890
892
  "tests/test_usage_limits.py",
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "0.5.544",
2
+ "tag": "0.5.546",
3
3
  "distance": 0,
4
- "node": "g9d671b639715e489d153691e9b55302116326817",
4
+ "node": "g943ce5e80a36cebf246516f67c4e6727011815e4",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-09-30"
@@ -8,11 +8,11 @@ is the one seam that varies per medium — TUI (quadraui ``TuiDriver``), CLI
8
8
  normalized list of ``{"id": str, "status": "pass"|"fail"|"skip", "message":
9
9
  str}`` dicts (``cli-pytest`` additionally carries ``"expected"``/``"got"``
10
10
  on a failing test — see :func:`parse_pytest_junit_xml`). ``tui-tuidriver``,
11
- ``cli-pytest`` (#1125), ``web-playwright`` (#1539), and ``terraform``
12
- (#3232) are implemented; other ``kind`` values are declared in
13
- ``coordinator.yml`` (see :class:`coord.config.AcceptanceConfig`) but
14
- rejected here with a clear "not yet implemented" error until their issues
15
- land (native).
11
+ ``cli-pytest`` (#1125), ``web-playwright`` (#1539), ``terraform``
12
+ (#3232), and ``tui-pty`` (#3483) are implemented; other ``kind`` values are
13
+ declared in ``coordinator.yml`` (see :class:`coord.config.AcceptanceConfig`)
14
+ but rejected here with a clear "not yet implemented" error until their
15
+ issues land (native).
16
16
 
17
17
  ``cli-pytest`` parses pytest's built-in ``--junit-xml`` report (a core
18
18
  pytest flag, not a plugin — no extra dependency required in the driven
@@ -45,6 +45,22 @@ enough to run ``validate`` at all) comes out regardless of what the driven
45
45
  repo's own terraform version prints to plain stdout. This is a compile
46
46
  check, not an acceptance oracle — see :data:`VALIDATE_ONLY_KINDS`.
47
47
 
48
+ ``tui-pty`` (#3483, Tier 2 of the TUI acceptance ladder — ``tui-tuidriver``
49
+ above is Tier 1, in-process) launches the driven repo's real compiled
50
+ binary under a real pty/ConPTY and drives it with real terminal byte
51
+ sequences, rather than going through quadraui's in-process ``TuiDriver``.
52
+ Three real Windows TUI bugs (vimcode#1634-#1636) all passed their
53
+ in-process tests on 2026-09-29 — the bytes an in-process harness feeds and
54
+ reads are never generated by, or read back through, a real terminal, so a
55
+ whole class of bug is invisible to it by construction. All of the actual
56
+ byte-level driving, the VT emulation, and the platform-neutral YAML smoke
57
+ spec live in :mod:`coord.tui_pty_driver` — see that module's docstring for
58
+ the spec format and the ``ESC[6n`` startup-handshake lesson folded in from
59
+ vimcode's own ConPTY tests. This adapter (:func:`_run_tui_pty`) is a thin
60
+ seam: it resolves the smoke spec from the driver's ``entrypoint:`` (the
61
+ ``tui-pty`` analogue of ``tui-tuidriver``'s own entrypoint-as-sealed-file
62
+ convention) and hands off to :func:`coord.tui_pty_driver.run_smoke_spec`.
63
+
48
64
  ``terraform`` additionally runs a deterministic policy gate (#3234, epic
49
65
  #3230 child 3) whenever the driven repo has opted in by carrying the
50
66
  convention files: ``tflint`` (rule-based HCL/provider checks — pinned
@@ -75,7 +91,7 @@ from pathlib import Path
75
91
  # Driver kinds this module knows how to run. Keep in sync with the adapters
76
92
  # implemented below — a kind can be *declared* in coordinator.yml ahead of its
77
93
  # adapter landing, but running it must fail loudly rather than silently no-op.
78
- SUPPORTED_KINDS = ("tui-tuidriver", "cli-pytest", "web-playwright", "terraform")
94
+ SUPPORTED_KINDS = ("tui-tuidriver", "cli-pytest", "web-playwright", "terraform", "tui-pty")
79
95
 
80
96
  # #2748 (IL-2): driver kinds whose `run` produces a real pass/fail verdict
81
97
  # but NOT yet a deterministic one, because an input they depend on hasn't
@@ -229,7 +245,7 @@ def render_run_command(run_command: str, *, ms: str | None = None) -> str:
229
245
 
230
246
  def run_driver(
231
247
  kind: str, run_command: str, cwd: str, *, timeout: int = 900, ms: str | None = None,
232
- setup_command: str = "",
248
+ setup_command: str = "", entrypoint: str = "",
233
249
  ) -> DriverResult:
234
250
  """Execute *run_command* in *cwd* and parse its output for *kind*.
235
251
 
@@ -250,6 +266,13 @@ def run_driver(
250
266
  before *run_command* ever executes — with a message that names it as a
251
267
  provisioning failure so it isn't mistaken for a test failure or folded
252
268
  into a driver's own "wrote no report" crash message.
269
+
270
+ *entrypoint* (``AcceptanceDriverConfig.entrypoint``) is only consulted
271
+ by ``tui-pty`` (#3483) — it names the repo-root-relative smoke-spec YAML
272
+ file (see :mod:`coord.tui_pty_driver`), the same way ``entrypoint``
273
+ already names ``tui-tuidriver``'s sealed Rust acceptance file for
274
+ :func:`coord.acceptance.acceptance_root_for_driver`. Every other kind
275
+ ignores it.
253
276
  """
254
277
  if kind not in SUPPORTED_KINDS:
255
278
  raise DriverError(
@@ -269,6 +292,8 @@ def run_driver(
269
292
  return _run_web_playwright(run_command, cwd, timeout=timeout)
270
293
  if kind == "terraform":
271
294
  return _run_terraform(run_command, cwd, timeout=timeout)
295
+ if kind == "tui-pty":
296
+ return _run_tui_pty(run_command, cwd, entrypoint, timeout=timeout)
272
297
  return _run_generic(run_command, cwd, timeout=timeout)
273
298
 
274
299
 
@@ -572,6 +597,68 @@ def _run_terraform_policy_gate(cwd: str, *, timeout: int) -> tuple[list[dict], s
572
597
  return tests, raw_output
573
598
 
574
599
 
600
+ def _run_tui_pty(run_command: str, cwd: str, entrypoint: str, *, timeout: int) -> DriverResult:
601
+ """The ``tui-pty`` shape (#3483): *run_command* is the shell command
602
+ that launches the driven repo's real compiled binary (e.g.
603
+ ``./target/release/vcd``) — the platform-neutral smoke spec YAML that
604
+ drives it lives at *entrypoint* (repo-root-relative), the ``tui-pty``
605
+ analogue of ``tui-tuidriver``'s own ``entrypoint:``-as-sealed-file
606
+ convention (see the module docstring and CLAUDE.md's sealed-paths
607
+ section).
608
+
609
+ All the actual pty/ConPTY spawning, real terminal-byte input, and VT
610
+ screen assertions live in :mod:`coord.tui_pty_driver` — this function is
611
+ the thin seam that resolves *entrypoint* to a spec file and calls
612
+ :func:`coord.tui_pty_driver.run_smoke_spec`, then folds its normalized
613
+ ``tests`` list into a :class:`DriverResult` the same way every other
614
+ kind in this module does.
615
+
616
+ Raises :class:`DriverError` — never a bare exception — for a missing
617
+ ``entrypoint:``, a spec file that doesn't exist, or a malformed spec
618
+ (an invalid-YAML/unknown-step-type :class:`coord.tui_pty_driver.TuiPtySpecError`).
619
+ A child process that dies mid-run, a step that times out, or a failed
620
+ assertion do NOT raise here — :func:`coord.tui_pty_driver.run_smoke_spec`
621
+ folds those into individual failing entries in ``tests`` instead, so a
622
+ real regression (e.g. vimcode#1634's idle-flicker check) reads as a
623
+ normal failing test, not a crashed driver run.
624
+ """
625
+ from coord.tui_pty_driver import ( # noqa: PLC0415 — see module docstring on the deferred import
626
+ TuiPtyRuntimeError,
627
+ TuiPtySpecError,
628
+ run_smoke_spec,
629
+ )
630
+
631
+ if not entrypoint:
632
+ raise DriverError(
633
+ "tui-pty driver requires an `entrypoint:` naming the smoke-spec "
634
+ "YAML file (repo-root-relative) — none configured"
635
+ )
636
+ spec_path = Path(cwd) / entrypoint
637
+ if not spec_path.is_file():
638
+ raise DriverError(f"tui-pty smoke spec not found: {spec_path}")
639
+
640
+ try:
641
+ spec_text = spec_path.read_text()
642
+ except OSError as e:
643
+ raise DriverError(f"tui-pty smoke spec could not be read: {spec_path}: {e}") from e
644
+
645
+ try:
646
+ tests = run_smoke_spec(
647
+ spec_text, launch_command=run_command, cwd=cwd, timeout=timeout,
648
+ )
649
+ except TuiPtySpecError as e:
650
+ raise DriverError(f"tui-pty smoke spec is invalid: {e}") from e
651
+ except TuiPtyRuntimeError as e:
652
+ raise DriverError(f"tui-pty driver could not run: {e}") from e
653
+
654
+ exit_code = 0 if tests and all(t.get("status") != "fail" for t in tests) else 1
655
+ raw_output = "\n".join(
656
+ f"{t.get('status')}: {t.get('id')} {t.get('message', '')}".rstrip()
657
+ for t in tests
658
+ )
659
+ return DriverResult(exit_code=exit_code, tests=tests, raw_output=raw_output)
660
+
661
+
575
662
  def parse_test_output(output: str) -> list[dict]:
576
663
  """Parse a driver's stdout into normalized ``{"id", "status", "message"}``.
577
664
 
@@ -352,7 +352,7 @@ def acceptance_run(
352
352
  try:
353
353
  result = run_driver(
354
354
  driver_cfg.kind, driver_cfg.run, cwd=str(cwd), ms=ms,
355
- setup_command=driver_cfg.setup,
355
+ setup_command=driver_cfg.setup, entrypoint=driver_cfg.entrypoint,
356
356
  )
357
357
  except DriverError as e:
358
358
  click.echo(f"error: {e}", err=True)
@@ -1019,7 +1019,7 @@ def _acceptance_record_local(
1019
1019
  try:
1020
1020
  result = run_driver(
1021
1021
  driver_cfg.kind, driver_cfg.run, cwd=str(wt_path), ms=ms,
1022
- setup_command=driver_cfg.setup,
1022
+ setup_command=driver_cfg.setup, entrypoint=driver_cfg.entrypoint,
1023
1023
  )
1024
1024
  except DriverError as e:
1025
1025
  click.echo(f"error: {e}", err=True)
@@ -1842,7 +1842,10 @@ def milestone_gate_c_cmd(
1842
1842
  # suite dir for Gate C's "full accumulated suite" semantics.
1843
1843
  ms = ms_dirname(ctx.milestone_number)
1844
1844
  try:
1845
- result = run_driver(driver_cfg.kind, driver_cfg.run, cwd=str(repo_dir), ms=ms)
1845
+ result = run_driver(
1846
+ driver_cfg.kind, driver_cfg.run, cwd=str(repo_dir), ms=ms,
1847
+ entrypoint=driver_cfg.entrypoint,
1848
+ )
1846
1849
  except DriverError as e:
1847
1850
  click.echo(f"error: {e}", err=True)
1848
1851
  sys.exit(1)
@@ -2148,7 +2151,10 @@ def milestone_ship_cmd(
2148
2151
  click.echo(f"Gate C: running the full accumulated acceptance suite in {repo_dir}...")
2149
2152
  ms = ms_dirname(ctx.milestone_number)
2150
2153
  try:
2151
- result = run_driver(driver_cfg.kind, driver_cfg.run, cwd=str(repo_dir), ms=ms)
2154
+ result = run_driver(
2155
+ driver_cfg.kind, driver_cfg.run, cwd=str(repo_dir), ms=ms,
2156
+ entrypoint=driver_cfg.entrypoint,
2157
+ )
2152
2158
  except DriverError as e:
2153
2159
  click.echo(f"error: {e}", err=True)
2154
2160
  sys.exit(1)
@@ -169,6 +169,13 @@ class ConfigError(Exception):
169
169
  """Raised when coordinator.yml is missing, malformed, or fails validation."""
170
170
 
171
171
 
172
+ # #3489: default repo-relative directory a repo's shared, backend-neutral
173
+ # conformance scenarios live in when `reviews.require_shared_scenario`
174
+ # opts a repo in with `true` rather than an explicit path string. Matches
175
+ # quadraui's actual `tests/conformance/scenarios/*.scn.json` layout.
176
+ DEFAULT_SHARED_SCENARIO_DIR = "tests/conformance/scenarios"
177
+
178
+
172
179
  @dataclass
173
180
  class HooksConfig:
174
181
  on_round_complete: list[str] = field(default_factory=list)
@@ -210,6 +217,35 @@ class ReviewsConfig:
210
217
  "Check for platform-specific code in shared/cross-platform paths",
211
218
  ])
212
219
  repo_overrides: dict[str, list[str]] = field(default_factory=dict)
220
+ # #3489: opt-in review rule — "if it works in one backend it works in
221
+ # all" only holds when behaviour is tested ONCE, through a shared,
222
+ # backend-neutral scenario suite every backend runs (quadraui's
223
+ # `tests/conformance/scenarios/*.scn.json` through `ConformanceDriver`).
224
+ # Without this, reviewers happily accept a single-backend test and the
225
+ # suites go lopsided — vimcode's driver suites are ~277 GTK / ~159 TUI /
226
+ # ~22 macOS / ~9 Windows `#[test]`s, and quadraui has only 19 shared
227
+ # scenarios to date.
228
+ #
229
+ # Keyed by repo name -> the repo-relative directory its shared scenarios
230
+ # live in (e.g. `tests/conformance/scenarios`). A repo absent from this
231
+ # mapping has NOT opted in and the rule is completely inert for it —
232
+ # `coord.review.diff_missing_shared_scenario` returns False before
233
+ # looking at the diff at all, so repos that don't declare a conformance
234
+ # suite see no behavior change from this feature existing. `true` (bool)
235
+ # is shorthand for `_DEFAULT_SHARED_SCENARIO_DIR` (parsed in
236
+ # `_parse_reviews`); an explicit string names a repo-specific location.
237
+ #
238
+ # Enforcement mirrors CLAUDE.md's existing black-box-coverage rule
239
+ # (`coord.review.diff_missing_test_coverage`, #2192): a free, path-only,
240
+ # non-blocking static nudge feeds the reviewer's own judgment via
241
+ # `build_review_briefing`'s prompt text, which names the rule and the
242
+ # repo's scenario directory and instructs the reviewer to request-changes
243
+ # when a behaviour-changing diff adds only a single-backend test. Pure
244
+ # refactors / internal-only changes stay exempt, the same way CLAUDE.md's
245
+ # black-box rule exempts them — honored the same way, by the diff simply
246
+ # touching no user-visible source, or by the worker's own stated
247
+ # refactor/internal-only claim in `completion_summary`.
248
+ require_shared_scenario: dict[str, str] = field(default_factory=dict)
213
249
  # Flood guard (incident 2026-06-08): bound *bulk* review dispatch so a
214
250
  # backlog "unmasking" (e.g. removing a gate that had been suppressing
215
251
  # reviews) can't fire hundreds of metered `claude -p` reviews in one pass.
@@ -3523,6 +3559,35 @@ def _parse_reviews(
3523
3559
  f"reviews.repo_overrides[{repo_name}] must be a list of strings"
3524
3560
  )
3525
3561
  cfg.repo_overrides = overrides
3562
+
3563
+ # #3489: require_shared_scenario — opt-in per repo, keyed by repo name.
3564
+ # Value is either `true` (shorthand for DEFAULT_SHARED_SCENARIO_DIR) or
3565
+ # an explicit non-empty string naming the repo-relative scenario
3566
+ # directory. A repo absent from this mapping is NOT opted in.
3567
+ shared_scenario_raw = raw.get("require_shared_scenario", {}) or {}
3568
+ if not isinstance(shared_scenario_raw, dict):
3569
+ raise ConfigError(
3570
+ "reviews.require_shared_scenario must be a mapping of repo → "
3571
+ "scenario dir (string) or true"
3572
+ )
3573
+ shared_scenario: dict[str, str] = {}
3574
+ for repo_name, value in shared_scenario_raw.items():
3575
+ if not isinstance(repo_name, str):
3576
+ raise ConfigError("reviews.require_shared_scenario keys must be repo names")
3577
+ if repo_name not in repo_names:
3578
+ raise ConfigError(
3579
+ f"reviews.require_shared_scenario references unknown repo: {repo_name!r}"
3580
+ )
3581
+ if value is True:
3582
+ shared_scenario[repo_name] = DEFAULT_SHARED_SCENARIO_DIR
3583
+ elif isinstance(value, str) and value.strip():
3584
+ shared_scenario[repo_name] = value.strip()
3585
+ else:
3586
+ raise ConfigError(
3587
+ f"reviews.require_shared_scenario[{repo_name}] must be `true` "
3588
+ "or a non-empty string (the repo-relative scenario directory)"
3589
+ )
3590
+ cfg.require_shared_scenario = shared_scenario
3526
3591
  return cfg
3527
3592
 
3528
3593
 
@@ -13,6 +13,12 @@ Public entry points:
13
13
  for a repo's `reviews.repo_overrides`. Shared with `coord.dispatch.dispatch`
14
14
  so the worker's briefing and the reviewer's briefing are graded/shown the
15
15
  exact same rule text, and can never drift apart.
16
+ - `diff_missing_shared_scenario(...)`, `shared_scenario_focus_lines(...)` —
17
+ #3489: opt-in per-repo rule (`reviews.require_shared_scenario`) — a
18
+ behaviour-changing diff in an opted-in repo must add/extend a shared,
19
+ backend-neutral scenario (or Tier-2 smoke-spec step), not only a
20
+ single-backend test. Same free/non-blocking-nudge shape as
21
+ `diff_missing_test_coverage` below; inert for a repo that hasn't opted in.
16
22
  - `build_review_briefing(...)` — assemble the reviewer's prompt from the
17
23
  repo's CLAUDE.md, the generic checklist, any repo-specific overrides
18
24
  (`repo_focus_lines`), and the worker's own claims (completion summary +
@@ -1719,6 +1725,153 @@ def diff_missing_test_coverage(diff_text: str | None) -> bool:
1719
1725
  return not any(_is_test_path(p) for p in paths)
1720
1726
 
1721
1727
 
1728
+ # ── #3489: opt-in "shared (backend-neutral) scenario" review rule ──────────
1729
+ #
1730
+ # "If it works in one backend it works in all" only holds when behaviour is
1731
+ # tested ONCE, through the shared scenario suite every backend runs
1732
+ # (quadraui's `tests/conformance/scenarios/*.scn.json` through
1733
+ # `ConformanceDriver`). Without this, reviewers happily accept a
1734
+ # single-backend test and the suites go lopsided (vimcode: ~277 GTK / ~159
1735
+ # TUI / ~22 macOS / ~9 Windows `#[test]`s; quadraui: only 19 shared
1736
+ # scenarios).
1737
+ #
1738
+ # Same shape as `diff_missing_test_coverage` (#2192) immediately above: a
1739
+ # free, path-only, non-blocking static check. It never gates dispatch by
1740
+ # itself — enforcement is the reviewer's own judgment, driven by the prompt
1741
+ # text `shared_scenario_focus_lines` appends to `build_review_briefing`,
1742
+ # naming the rule and instructing a `request-changes` verdict when it fires.
1743
+ # Inert (returns False unconditionally) for a repo absent from
1744
+ # `reviews.require_shared_scenario` — the per-repo opt-in guard.
1745
+
1746
+ _REFACTOR_EXEMPTION_MARKERS = (
1747
+ "pure refactor",
1748
+ "internal-only",
1749
+ "internal only",
1750
+ "no user-visible",
1751
+ "no behavior change",
1752
+ "no behaviour change",
1753
+ )
1754
+
1755
+
1756
+ def _states_refactor_exemption(completion_summary: str | None) -> bool:
1757
+ """Does the worker's own *completion_summary* state the CLAUDE.md "pure
1758
+ refactor / internal-only" exemption (#3489)?
1759
+
1760
+ A path-only heuristic cannot tell a genuine behavior-preserving refactor
1761
+ of shipped source from a real behavior change — the same limitation
1762
+ `diff_missing_test_coverage`'s docstring notes. The worker's own stated
1763
+ claim (#3112's `completion_summary` — the one surface a worker can
1764
+ actually make this claim on) is the only signal available to a pure
1765
+ function here; the reviewer still verifies the claim against the diff,
1766
+ the same way it verifies any other claim in the "Worker's own claims"
1767
+ section.
1768
+ """
1769
+ text = (completion_summary or "").lower()
1770
+ return any(marker in text for marker in _REFACTOR_EXEMPTION_MARKERS)
1771
+
1772
+
1773
+ def _is_shared_scenario_path(path: str, scenario_dir: str) -> bool:
1774
+ """Does *path* look like a shared/backend-neutral scenario (or Tier-2
1775
+ smoke-spec step) for *scenario_dir* (#3489)?
1776
+
1777
+ Matches anything under *scenario_dir* itself, plus any path with a
1778
+ `smoke-spec/` segment — the issue's explicit "or a Tier-2 smoke-spec
1779
+ step" carve-out, which need not live under the same directory.
1780
+ """
1781
+ normalized_dir = scenario_dir.strip("/").lower()
1782
+ lower = path.lower()
1783
+ if normalized_dir and (lower == normalized_dir or lower.startswith(normalized_dir + "/")):
1784
+ return True
1785
+ return "/smoke-spec/" in f"/{lower}"
1786
+
1787
+
1788
+ def diff_missing_shared_scenario(
1789
+ diff_text: str | None,
1790
+ *,
1791
+ repo_name: str,
1792
+ reviews_cfg: ReviewsConfig,
1793
+ completion_summary: str | None = None,
1794
+ ) -> bool:
1795
+ """#3489: True when *diff_text* changes user-visible behavior in a repo
1796
+ that has opted into `reviews.require_shared_scenario` but adds/extends
1797
+ no shared, backend-neutral scenario (or Tier-2 smoke-spec step) — e.g.
1798
+ only a single-backend test, or no test at all.
1799
+
1800
+ Inert (always False) when *repo_name* hasn't opted in
1801
+ (`reviews_cfg.require_shared_scenario`), when *diff_text* is empty, when
1802
+ the diff touches no user-visible source (CLAUDE.md's internal-only
1803
+ exemption, same granularity as `diff_missing_test_coverage`), or when
1804
+ *completion_summary* states the pure-refactor/internal-only exemption
1805
+ (`_states_refactor_exemption`).
1806
+ """
1807
+ scenario_dir = reviews_cfg.require_shared_scenario.get(repo_name)
1808
+ if not scenario_dir:
1809
+ return False
1810
+ if not diff_text or not diff_text.strip():
1811
+ return False
1812
+ if _states_refactor_exemption(completion_summary):
1813
+ return False
1814
+ paths = github_ops.diff_file_paths(diff_text)
1815
+ if not any(_is_user_visible_path(p) for p in paths):
1816
+ return False
1817
+ return not any(_is_shared_scenario_path(p, scenario_dir) for p in paths)
1818
+
1819
+
1820
+ def shared_scenario_focus_lines(
1821
+ reviews_cfg: ReviewsConfig,
1822
+ repo_name: str,
1823
+ *,
1824
+ diff_text: str | None = None,
1825
+ completion_summary: str | None = None,
1826
+ ) -> list[str]:
1827
+ """Return the ``## Shared scenario coverage`` briefing section for
1828
+ *repo_name*'s `reviews.require_shared_scenario` opt-in (#3489), or
1829
+ ``[]`` when the repo hasn't opted in.
1830
+
1831
+ Mirrors `repo_focus_lines`'s "inert unless configured" shape (#3112) so
1832
+ this rule changes nothing — not even prompt text — for a repo that
1833
+ hasn't declared a conformance scenario suite. When configured, always
1834
+ names the rule and the repo's scenario directory; when the free
1835
+ `diff_missing_shared_scenario` check also fires for *diff_text*/
1836
+ *completion_summary*, a mandatory ``request-changes`` instruction is
1837
+ appended, naming the rule the same way the sealed-path tamper banner
1838
+ names itself.
1839
+ """
1840
+ scenario_dir = reviews_cfg.require_shared_scenario.get(repo_name)
1841
+ if not scenario_dir:
1842
+ return []
1843
+ lines = [
1844
+ "",
1845
+ "## Shared scenario coverage (`reviews.require_shared_scenario`, #3489)",
1846
+ "",
1847
+ "This repo opts into the shared-scenario review rule: a "
1848
+ "behaviour-changing diff must add or extend a backend-neutral "
1849
+ f"scenario under `{scenario_dir}/` (or a Tier-2 smoke-spec step) — "
1850
+ "not only a single-backend test. \"If it works in one backend it "
1851
+ "works in all\" only holds when behaviour is tested once, through "
1852
+ "the shared scenario suite every backend runs. Pure refactors / "
1853
+ "internal-only changes stay exempt — say so in the PR if that "
1854
+ "applies, the same way CLAUDE.md's black-box rule is honored.",
1855
+ ]
1856
+ if diff_missing_shared_scenario(
1857
+ diff_text,
1858
+ repo_name=repo_name,
1859
+ reviews_cfg=reviews_cfg,
1860
+ completion_summary=completion_summary,
1861
+ ):
1862
+ lines.append("")
1863
+ lines.append(
1864
+ f"**This diff changes user-visible behavior but touches no file "
1865
+ f"under `{scenario_dir}/` (and no Tier-2 smoke-spec step), and "
1866
+ "claims no pure-refactor/internal-only exemption. Per the "
1867
+ "`require_shared_scenario` rule, you MUST `request-changes`, "
1868
+ "naming this rule — unless you independently determine this "
1869
+ "diff really is a pure refactor / internal-only change the "
1870
+ "static check couldn't see.**"
1871
+ )
1872
+ return lines
1873
+
1874
+
1722
1875
  def repo_focus_lines(reviews_cfg: ReviewsConfig, repo_name: str) -> list[str]:
1723
1876
  """Return the ``### Repo-specific focus`` block for *repo_name*, or ``[]``
1724
1877
  if the repo has no ``reviews.repo_overrides`` configured (#3112).
@@ -2002,6 +2155,14 @@ def build_review_briefing(
2002
2155
  lines.append("- Any security issues (injection, auth bypass, credential exposure)?")
2003
2156
 
2004
2157
  lines.extend(repo_focus_lines(reviews_cfg, repo_name))
2158
+ lines.extend(
2159
+ shared_scenario_focus_lines(
2160
+ reviews_cfg,
2161
+ repo_name,
2162
+ diff_text=diff_text,
2163
+ completion_summary=completion_summary,
2164
+ )
2165
+ )
2005
2166
 
2006
2167
  if reviews_cfg.reviewer_prompt.strip():
2007
2168
  lines.append("")
@@ -3398,6 +3559,25 @@ def dispatch_review(
3398
3559
  completed.assignment_id,
3399
3560
  )
3400
3561
 
3562
+ # #3489: same free/non-blocking shape as the #2192 nudge above, for
3563
+ # the opt-in "shared (backend-neutral) scenario" rule — inert (never
3564
+ # logs) for a repo absent from `reviews.require_shared_scenario`.
3565
+ if diff_missing_shared_scenario(
3566
+ full_diff_text,
3567
+ repo_name=repo.name,
3568
+ reviews_cfg=config.reviews,
3569
+ completion_summary=completed.completion_summary,
3570
+ ):
3571
+ log.warning(
3572
+ "[review] %s: repo %r opted into reviews.require_shared_scenario "
3573
+ "and this diff changes user-visible behavior but adds/extends no "
3574
+ "shared scenario under %r (free static check, non-blocking; "
3575
+ "dispatching review as normal — the reviewer's briefing names "
3576
+ "the rule)",
3577
+ completed.assignment_id, repo.name,
3578
+ config.reviews.require_shared_scenario.get(repo.name),
3579
+ )
3580
+
3401
3581
  # #1811: does the resolved review provider share the worker's model
3402
3582
  # family? ``completed.provider_name`` is the *resolved* name recorded at
3403
3583
  # work-dispatch time (spec > repo > providers.default); ``None`` means a