code-coordinator 0.5.264__tar.gz → 0.5.267__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 (873) hide show
  1. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/code_coordinator.egg-info/scm_version.json +2 -2
  4. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/board_wire.py +131 -18
  5. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/commands/release.py +28 -2
  6. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/serve_app.py +39 -0
  7. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/scripts/codegen.py +22 -7
  8. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_board_read_path.py +8 -7
  9. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_board_wire.py +96 -6
  10. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_release_propagate.py +36 -0
  11. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/src/app/approved.rs +444 -16
  12. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/src/app/data.rs +31 -16
  13. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/src/app/dialogs.rs +233 -0
  14. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/src/app/drive_queue.rs +34 -8
  15. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/src/app/events.rs +12 -2
  16. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/src/app/fixtures.rs +2 -0
  17. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/src/app/mod.rs +14 -0
  18. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/src/app/pipeline.rs +33 -12
  19. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/src/app/sessions.rs +31 -2
  20. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/src/app/settings_ui.rs +42 -5
  21. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/src/app/sidebar.rs +11 -0
  22. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/src/app/tests.rs +304 -0
  23. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/src/app/types/generated.rs +9 -6
  24. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/.claude/commands/board.md +0 -0
  25. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/.claude/commands/complete-session.md +0 -0
  26. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/.claude/commands/coordinator.md +0 -0
  27. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/.githooks/_lib.sh +0 -0
  28. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/.githooks/post-checkout +0 -0
  29. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/.githooks/post-commit +0 -0
  30. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/.githooks/post-merge +0 -0
  31. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  32. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/.github/coord-ci-acceptance.yml +0 -0
  33. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/.github/workflows/auto-release.yml +0 -0
  34. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/.github/workflows/cargo-test.yml +0 -0
  35. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/.github/workflows/publish.yml +0 -0
  36. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/.github/workflows/release-tui.yml +0 -0
  37. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/.github/workflows/test.yml +0 -0
  38. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/.gitignore +0 -0
  39. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/CLAUDE.md +0 -0
  40. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/GOAL.md +0 -0
  41. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/LICENSE +0 -0
  42. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/MANIFEST.in +0 -0
  43. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/README.md +0 -0
  44. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/code_coordinator.egg-info/SOURCES.txt +0 -0
  45. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/code_coordinator.egg-info/dependency_links.txt +0 -0
  46. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/code_coordinator.egg-info/entry_points.txt +0 -0
  47. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/code_coordinator.egg-info/requires.txt +0 -0
  48. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/code_coordinator.egg-info/scm_file_list.json +0 -0
  49. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/code_coordinator.egg-info/top_level.txt +0 -0
  50. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/__init__.py +0 -0
  51. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/_board_mapping.py +0 -0
  52. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/acceptance.py +0 -0
  53. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/acceptance_drivers.py +0 -0
  54. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/agent.py +0 -0
  55. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/agent_app.py +0 -0
  56. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/agent_update.py +0 -0
  57. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/agents/opencode/.gitignore +0 -0
  58. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/agents/opencode/agents/work.md +0 -0
  59. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/agents/opencode/routing.jsonc +0 -0
  60. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/approved_work.py +0 -0
  61. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/audit.py +0 -0
  62. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/auto_loop.py +0 -0
  63. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/block_log.py +0 -0
  64. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/board_bool_guard.py +0 -0
  65. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/board_schema.py +0 -0
  66. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/board_service.py +0 -0
  67. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/brain.py +0 -0
  68. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/branch_model.py +0 -0
  69. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/bug_intake.py +0 -0
  70. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/cargo_cache.py +0 -0
  71. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/ci_fix.py +0 -0
  72. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/ci_github.py +0 -0
  73. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/ci_gitlab.py +0 -0
  74. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/ci_store.py +0 -0
  75. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/claim.py +0 -0
  76. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/cli.py +0 -0
  77. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/client.py +0 -0
  78. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/commands/__init__.py +0 -0
  79. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/commands/_common.py +0 -0
  80. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/commands/acceptance.py +0 -0
  81. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/commands/agent_ops.py +0 -0
  82. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/commands/audit.py +0 -0
  83. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/commands/chat.py +0 -0
  84. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/commands/dispatch.py +0 -0
  85. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/commands/dispatch_workers.py +0 -0
  86. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/commands/drive.py +0 -0
  87. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/commands/drive_queue.py +0 -0
  88. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/commands/gate_a.py +0 -0
  89. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/commands/gates.py +0 -0
  90. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/commands/issues.py +0 -0
  91. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/commands/lifecycle.py +0 -0
  92. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/commands/merge.py +0 -0
  93. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/commands/milestone.py +0 -0
  94. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/commands/plan_followup.py +0 -0
  95. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/commands/plans.py +0 -0
  96. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/commands/portal.py +0 -0
  97. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/commands/pr.py +0 -0
  98. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/commands/repo.py +0 -0
  99. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/commands/report.py +0 -0
  100. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/commands/review.py +0 -0
  101. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/commands/scorecard.py +0 -0
  102. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/commands/sessions.py +0 -0
  103. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/commands/setup.py +0 -0
  104. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/commands/status.py +0 -0
  105. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/commands/terminal.py +0 -0
  106. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/commands/test_gate.py +0 -0
  107. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/commands/tui.py +0 -0
  108. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/comments.py +0 -0
  109. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/config.py +0 -0
  110. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/config_reload.py +0 -0
  111. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/confirm_test.py +0 -0
  112. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/conflict_fix.py +0 -0
  113. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/dao.py +0 -0
  114. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/dashboard/__init__.py +0 -0
  115. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/dashboard/fixture.py +0 -0
  116. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/dashboard/index.html +0 -0
  117. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/dashboard/server.py +0 -0
  118. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/dashboard/terminal.py +0 -0
  119. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/db.py +0 -0
  120. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/dead_end.py +0 -0
  121. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/decomposition_chat.py +0 -0
  122. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/deploy/README.md +0 -0
  123. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/deploy/coord-agent.service +0 -0
  124. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/deploy/coord-db-backup.service +0 -0
  125. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/deploy/coord-db-backup.sh +0 -0
  126. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/deploy/coord-db-backup.timer +0 -0
  127. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/deploy/coord-drive-queue.service +0 -0
  128. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/deploy/coord-drive-queue.timer +0 -0
  129. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/deploy/coord-failure-notify.service +0 -0
  130. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/deploy/coord-fleet-watchdog.service +0 -0
  131. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/deploy/coord-fleet-watchdog.timer +0 -0
  132. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/deploy/coord-notify.service +0 -0
  133. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/deploy/coord-notify.timer +0 -0
  134. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/deploy/coord-release-propagate.service +0 -0
  135. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/deploy/coord-release-propagate.timer +0 -0
  136. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/deploy/coord-release-window.service +0 -0
  137. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/deploy/coord-release-window.timer +0 -0
  138. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/deploy/coord-serve.service +0 -0
  139. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/deploy/coord-web-dist-build.service +0 -0
  140. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/deploy/coord-web-dist-build.timer +0 -0
  141. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/deploy/coord-web.service +0 -0
  142. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/deploy_manifest.py +0 -0
  143. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/deploy_units.py +0 -0
  144. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/deps.py +0 -0
  145. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/diagnose.py +0 -0
  146. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/dispatch.py +0 -0
  147. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/dist_name.py +0 -0
  148. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/drive.py +0 -0
  149. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/drive_queue.py +0 -0
  150. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/drive_state.py +0 -0
  151. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/events.py +0 -0
  152. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/failure_class.py +0 -0
  153. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/filelock.py +0 -0
  154. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/fleet_config_health.py +0 -0
  155. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/forge_availability.py +0 -0
  156. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/freshness.py +0 -0
  157. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/gate_a.py +0 -0
  158. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/gate_b.py +0 -0
  159. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/gate_snapshot.py +0 -0
  160. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/gates.py +0 -0
  161. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/github_ops.py +0 -0
  162. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/github_throttle.py +0 -0
  163. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/goal.py +0 -0
  164. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/graph_health.py +0 -0
  165. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/health/__init__.py +0 -0
  166. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/health/aggregate.py +0 -0
  167. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/health/checks/__init__.py +0 -0
  168. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/health/checks/agent_install.py +0 -0
  169. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/health/checks/cargo_targets.py +0 -0
  170. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/health/checks/claude_binary.py +0 -0
  171. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/health/checks/coord_web_ci_pin.py +0 -0
  172. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/health/checks/deploy_lane_facts.py +0 -0
  173. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/health/checks/disk.py +0 -0
  174. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/health/checks/fleet_board.py +0 -0
  175. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  176. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/health/checks/fleet_phantom.py +0 -0
  177. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/health/checks/fleet_unit_drift.py +0 -0
  178. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/health/checks/graph.py +0 -0
  179. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/health/checks/graphify_cli.py +0 -0
  180. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/health/checks/index_lock.py +0 -0
  181. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/health/checks/issues_sync_staleness.py +0 -0
  182. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/health/checks/plan_usage.py +0 -0
  183. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/health/checks/release_cordon.py +0 -0
  184. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/health/checks/repo_state.py +0 -0
  185. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/health/checks/spawned_coord.py +0 -0
  186. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/health/checks/stalled_pipeline.py +0 -0
  187. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/health/checks/timer_active.py +0 -0
  188. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/health/checks/toolchain.py +0 -0
  189. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/health/checks/unit_drift.py +0 -0
  190. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/health/checks/unit_enablement.py +0 -0
  191. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/health/checks/worktrees.py +0 -0
  192. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/health/cli.py +0 -0
  193. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/health/context.py +0 -0
  194. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/health/fleet_snapshot.py +0 -0
  195. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/health/models.py +0 -0
  196. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/health/pypi.py +0 -0
  197. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/health/registry.py +0 -0
  198. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/health/render.py +0 -0
  199. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/health/units.py +0 -0
  200. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/hooks.py +0 -0
  201. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/housekeeping.py +0 -0
  202. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/interactive.py +0 -0
  203. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/issue_store.py +0 -0
  204. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/issues_sync_status.py +0 -0
  205. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/liveness_auditor.py +0 -0
  206. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/machine_pause.py +0 -0
  207. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/merge_queue.py +0 -0
  208. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/milestone_chat.py +0 -0
  209. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/milestone_dispatch.py +0 -0
  210. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/milestone_gate.py +0 -0
  211. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/milestone_order.py +0 -0
  212. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/mock_author.py +0 -0
  213. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/models.py +0 -0
  214. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/network.py +0 -0
  215. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/new_issue_chat.py +0 -0
  216. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/notifier/__init__.py +0 -0
  217. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/notifier/baseline.py +0 -0
  218. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/notifier/cli.py +0 -0
  219. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/notifier/collect.py +0 -0
  220. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/notifier/digest.py +0 -0
  221. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/notifier/models.py +0 -0
  222. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/notifier/predicate.py +0 -0
  223. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/notifier/service.py +0 -0
  224. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/notifier/store.py +0 -0
  225. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/notifier/transport.py +0 -0
  226. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/notify.py +0 -0
  227. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/openapi.py +0 -0
  228. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/overlap_fence.py +0 -0
  229. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/overlap_predict.py +0 -0
  230. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/parentage.py +0 -0
  231. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/parentage_github.py +0 -0
  232. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/pipeline.py +0 -0
  233. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/plan_parser.py +0 -0
  234. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/plans.py +0 -0
  235. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/platform_paths.py +0 -0
  236. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/portal_bridge.py +0 -0
  237. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/portal_store.py +0 -0
  238. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/portal_sync.py +0 -0
  239. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/pr_body_lint.py +0 -0
  240. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/prereqs.py +0 -0
  241. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/progress.py +0 -0
  242. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/providers/__init__.py +0 -0
  243. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/providers/base.py +0 -0
  244. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/providers/claude.py +0 -0
  245. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/providers/claude_pty.py +0 -0
  246. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/providers/opencode.py +0 -0
  247. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/queue_diagnose.py +0 -0
  248. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/reconcile.py +0 -0
  249. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/reconcile_tick.py +0 -0
  250. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/refine_chat.py +0 -0
  251. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/release_cordon.py +0 -0
  252. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/release_propagate.py +0 -0
  253. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/release_verify.py +0 -0
  254. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/release_window.py +0 -0
  255. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/repo_edit.py +0 -0
  256. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/repo_onboard.py +0 -0
  257. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/reports.py +0 -0
  258. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/revalidate.py +0 -0
  259. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/review.py +0 -0
  260. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/scorecard.py +0 -0
  261. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/self_health.py +0 -0
  262. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  263. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  264. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  265. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  266. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  267. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/skills/portal-followup/SKILL.md +0 -0
  268. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/skills/release-now/SKILL.md +0 -0
  269. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  270. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  271. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/skills/update-issue/SKILL.md +0 -0
  272. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/smoke.py +0 -0
  273. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/spend_ceiling.py +0 -0
  274. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/split_work.py +0 -0
  275. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/sql.py +0 -0
  276. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/stage_projection.py +0 -0
  277. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/state.py +0 -0
  278. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/test_author.py +0 -0
  279. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/test_chat.py +0 -0
  280. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/test_orchestrator.py +0 -0
  281. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/test_report.py +0 -0
  282. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/tui_release.py +0 -0
  283. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/usage.py +0 -0
  284. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/usage_limits.py +0 -0
  285. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/usage_rollup.py +0 -0
  286. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coord/worker_events.py +0 -0
  287. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/coordinator.example.yml +0 -0
  288. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/deploy/coord-agent.service +0 -0
  289. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/deploy/coord-db-backup.service +0 -0
  290. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/deploy/coord-db-backup.sh +0 -0
  291. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/deploy/coord-db-backup.timer +0 -0
  292. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/deploy/coord-drive-queue.service +0 -0
  293. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/deploy/coord-drive-queue.timer +0 -0
  294. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/deploy/coord-failure-notify.service +0 -0
  295. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/deploy/coord-failure-notify.sh +0 -0
  296. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/deploy/coord-fleet-watchdog.service +0 -0
  297. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/deploy/coord-fleet-watchdog.timer +0 -0
  298. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/deploy/coord-notify.service +0 -0
  299. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/deploy/coord-notify.timer +0 -0
  300. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/deploy/coord-release-propagate.service +0 -0
  301. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/deploy/coord-release-propagate.timer +0 -0
  302. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/deploy/coord-release-window.service +0 -0
  303. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/deploy/coord-release-window.timer +0 -0
  304. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/deploy/coord-serve.service +0 -0
  305. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/deploy/coord-web-dist-build.service +0 -0
  306. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/deploy/coord-web-dist-build.sh +0 -0
  307. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/deploy/coord-web-dist-build.timer +0 -0
  308. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/deploy/coord-web-rollback.sh +0 -0
  309. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/deploy/coord-web.service +0 -0
  310. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/deploy/node-shim.sh +0 -0
  311. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  312. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/docs/ADR_COORD_WEB_CI.md +0 -0
  313. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/docs/ADR_COORD_WEB_DIST.md +0 -0
  314. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/docs/AGENT_OPERATIONS.md +0 -0
  315. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/docs/ARCHITECTURE.md +0 -0
  316. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/docs/ARCH_SECURITY_GATES.md +0 -0
  317. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/docs/COCKPIT.md +0 -0
  318. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/docs/CONTROL_CENTER.md +0 -0
  319. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/docs/COST_DISCIPLINE.md +0 -0
  320. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/docs/CROSS_PLATFORM.md +0 -0
  321. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/docs/CUSTOMER_FACING_APPS.md +0 -0
  322. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/docs/CUSTOMER_PORTAL.md +0 -0
  323. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/docs/DRIVE_QUEUE.md +0 -0
  324. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/docs/EPHEMERAL_WORKERS.md +0 -0
  325. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/docs/FORGE_MIGRATION.md +0 -0
  326. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/docs/GRAPHIFY_SETUP.md +0 -0
  327. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/docs/ISSUE_GUIDANCE.md +0 -0
  328. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/docs/MAC_MINI.md +0 -0
  329. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  330. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/docs/NOTIFIER.md +0 -0
  331. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/docs/OPENCODE_VERIFICATION.md +0 -0
  332. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/docs/OPERATING_GOTCHAS.md +0 -0
  333. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/docs/OPERATOR_GUIDES.md +0 -0
  334. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/docs/ORACLE_LOOP.md +0 -0
  335. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/docs/PHONE_WEBAPP.md +0 -0
  336. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/docs/PIPELINE_V2.md +0 -0
  337. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/docs/PLATFORM_EVOLUTION.md +0 -0
  338. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/docs/SECOND_BACKEND.md +0 -0
  339. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/docs/STORE_SERVICE.md +0 -0
  340. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  341. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/docs/WEB_CONTROL_CENTER.md +0 -0
  342. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/docs/WSL_WINDOWS_WORKER.md +0 -0
  343. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/docs/mocks/web/README.md +0 -0
  344. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/docs/mocks/web/_tokens.css +0 -0
  345. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/docs/mocks/web/issue-detail.html +0 -0
  346. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/docs/mocks/web/pipeline-narrow.html +0 -0
  347. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/docs/mocks/web/pipeline-wide.html +0 -0
  348. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/graphify-out/.gitignore +0 -0
  349. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/install-agent.sh +0 -0
  350. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/pyproject.toml +0 -0
  351. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/scripts/audit_review_verdict_overrides.py +0 -0
  352. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  353. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/scripts/azure-workers/build-worker-image.sh +0 -0
  354. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/scripts/azure-workers/coordinator-machine.py +0 -0
  355. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/scripts/azure-workers/epic-down.sh +0 -0
  356. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/scripts/azure-workers/epic-up.sh +0 -0
  357. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/scripts/azure-workers/preflight.sh +0 -0
  358. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/scripts/azure-workers/provision-worker.sh +0 -0
  359. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  360. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  361. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/scripts/azure-workers/verify-github-token.sh +0 -0
  362. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/scripts/check_gh_argv_containment.py +0 -0
  363. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/scripts/coord-test-runner.sh +0 -0
  364. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/scripts/coord-venv-rollback.sh +0 -0
  365. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/scripts/drive-batch.sh +0 -0
  366. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/scripts/fleet_watchdog.py +0 -0
  367. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/scripts/gen_board_fixture.py +0 -0
  368. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/scripts/gen_mock_index.py +0 -0
  369. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/scripts/next_release_tag.py +0 -0
  370. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/scripts/run_tests_in_populated_home.sh +0 -0
  371. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/scripts/run_tests_without_gh.sh +0 -0
  372. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/scripts/smoke_437_interactive.py +0 -0
  373. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/scripts/verify_878_review_capture.py +0 -0
  374. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/scripts/verify_release_published.py +0 -0
  375. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/scripts/verify_release_wheel.py +0 -0
  376. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/setup.cfg +0 -0
  377. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/SMOKE_SET.md +0 -0
  378. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/__init__.py +0 -0
  379. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  380. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-33/contract.md +0 -0
  381. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-33/manifest.yml +0 -0
  382. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  383. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  384. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  385. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  386. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-37/conftest.py +0 -0
  387. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-37/contract.md +0 -0
  388. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-37/manifest.yml +0 -0
  389. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  390. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  391. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-38/contract.md +0 -0
  392. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-38/manifest.yml +0 -0
  393. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  394. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  395. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  396. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  397. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  398. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  399. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  400. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  401. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  402. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  403. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-51/contract.md +0 -0
  404. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  405. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  406. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-51/manifest.yml +0 -0
  407. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  408. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-51/tsconfig.json +0 -0
  409. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-65/board_split_2288.rs +0 -0
  410. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
  411. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
  412. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-65/contract.md +0 -0
  413. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
  414. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-65/manifest.yml +0 -0
  415. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
  416. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
  417. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
  418. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
  419. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
  420. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
  421. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
  422. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
  423. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
  424. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
  425. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-65/tabs_persistence_2286.rs +0 -0
  426. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-67/approved_items_2532.rs +0 -0
  427. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-67/contract.md +0 -0
  428. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-67/manifest.d/2533.yml +0 -0
  429. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-67/manifest.yml +0 -0
  430. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-67/mocks/approved-items-chat-opened.screen +0 -0
  431. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-67/mocks/approved-items-context-menu.screen +0 -0
  432. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-67/mocks/approved-items-detail.screen +0 -0
  433. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-67/mocks/approved-items-empty.screen +0 -0
  434. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-67/mocks/approved-items-populated.screen +0 -0
  435. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-67/pull_decomposition_2533.rs +0 -0
  436. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  437. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/conftest.py +0 -0
  438. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/fixtures/board-pipeline-basic.json +0 -0
  439. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  440. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  441. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  442. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  443. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/fixtures/playwright/all_pass.json +0 -0
  444. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  445. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/fixtures/playwright/mixed_fail.json +0 -0
  446. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  447. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  448. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/fixtures/playwright/skip.json +0 -0
  449. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/fixtures/playwright/truncated.json +0 -0
  450. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  451. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  452. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  453. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  454. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  455. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  456. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  457. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  458. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_acceptance.py +0 -0
  459. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_acceptance_drivers.py +0 -0
  460. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_agent.py +0 -0
  461. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_agent_api_error.py +0 -0
  462. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_agent_app.py +0 -0
  463. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_agent_branch_base.py +0 -0
  464. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_agent_branch_capture.py +0 -0
  465. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_agent_config_free_1712.py +0 -0
  466. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_agent_deploy_units_endpoint.py +0 -0
  467. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_agent_dirty_worktree.py +0 -0
  468. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  469. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_agent_graph_self_heal.py +0 -0
  470. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_agent_health_h3.py +0 -0
  471. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_agent_idle_restart.py +0 -0
  472. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_agent_push_failure.py +0 -0
  473. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_agent_reap.py +0 -0
  474. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_agent_repos_and_pull.py +0 -0
  475. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_agent_restart_services_endpoint.py +0 -0
  476. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_agent_skills_self_heal.py +0 -0
  477. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_agent_startup_diagnostics.py +0 -0
  478. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_agent_update.py +0 -0
  479. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_agent_update_bluegreen.py +0 -0
  480. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_agent_usage_limit.py +0 -0
  481. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_agent_zero_commit.py +0 -0
  482. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_ambient_home_isolation.py +0 -0
  483. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_approve_dependency_busy_2804.py +0 -0
  484. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_approve_reject_plan.py +0 -0
  485. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_approve_usage_gate.py +0 -0
  486. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_approved_work_2532.py +0 -0
  487. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_assignment_already_recorded_daemon.py +0 -0
  488. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_audit_log.py +0 -0
  489. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_audit_outcome.py +0 -0
  490. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_audit_query.py +0 -0
  491. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_auto_loop.py +0 -0
  492. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_auto_release_publish_2035.py +0 -0
  493. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_base_checkout_restore.py +0 -0
  494. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_block_log.py +0 -0
  495. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_board_cap_762.py +0 -0
  496. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_board_fixture.py +0 -0
  497. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_board_schema.py +0 -0
  498. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_board_service.py +0 -0
  499. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_board_state.py +0 -0
  500. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_brain.py +0 -0
  501. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_branch_model.py +0 -0
  502. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_bug_intake.py +0 -0
  503. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_build_worker_image_env_update.py +0 -0
  504. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cargo_cache.py +0 -0
  505. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_check_gh_argv_containment.py +0 -0
  506. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_ci_acceptance_gate_1950.py +0 -0
  507. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_ci_fix.py +0 -0
  508. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_ci_gitlab.py +0 -0
  509. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_ci_parity_2091.py +0 -0
  510. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_ci_store.py +0 -0
  511. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_claim.py +0 -0
  512. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_claude_md_budget.py +0 -0
  513. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_acceptance.py +0 -0
  514. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_assign.py +0 -0
  515. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  516. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_assign_interactive_remote.py +0 -0
  517. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_assign_provider.py +0 -0
  518. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  519. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_audit.py +0 -0
  520. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_chat_continue.py +0 -0
  521. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_decide.py +0 -0
  522. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_diagnose_config_provenance.py +0 -0
  523. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_diagnose_forge_availability.py +0 -0
  524. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_diagnose_graph.py +0 -0
  525. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_diagnose_self.py +0 -0
  526. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_doctor.py +0 -0
  527. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_doctor_config_free_1801.py +0 -0
  528. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  529. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_drive.py +0 -0
  530. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_drive_queue.py +0 -0
  531. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_escalate.py +0 -0
  532. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_fix_headless_review.py +0 -0
  533. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_gate_a.py +0 -0
  534. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_install_drift.py +0 -0
  535. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_install_skills.py +0 -0
  536. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_issue_comment.py +0 -0
  537. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_issue_create_label.py +0 -0
  538. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_issue_reopen.py +0 -0
  539. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_issue_view_list.py +0 -0
  540. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_merge.py +0 -0
  541. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_milestone_assign.py +0 -0
  542. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_milestone_capture.py +0 -0
  543. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_milestone_chat_add_child.py +0 -0
  544. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_milestone_dispatch.py +0 -0
  545. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_milestone_gate_b.py +0 -0
  546. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_milestone_gate_c.py +0 -0
  547. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_milestone_order.py +0 -0
  548. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  549. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_milestone_ship.py +0 -0
  550. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_network.py +0 -0
  551. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_new_issue_chat.py +0 -0
  552. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_plans.py +0 -0
  553. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_portal.py +0 -0
  554. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_pr.py +0 -0
  555. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_pull_artifact.py +0 -0
  556. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_queue.py +0 -0
  557. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_reattach_sessions.py +0 -0
  558. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_refine_board.py +0 -0
  559. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_release_preflight.py +0 -0
  560. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_release_window.py +0 -0
  561. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_repo_2220.py +0 -0
  562. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
  563. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_scorecard.py +0 -0
  564. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_set_review_findings.py +0 -0
  565. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_status_advisory_terminal.py +0 -0
  566. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_status_contested_tag.py +0 -0
  567. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_status_merge_queue.py +0 -0
  568. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_status_provider.py +0 -0
  569. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_status_review_finalizing.py +0 -0
  570. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_status_test_failed_tag.py +0 -0
  571. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_status_usage_limit.py +0 -0
  572. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_sync_comments_873.py +0 -0
  573. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_test_plan.py +0 -0
  574. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_track.py +0 -0
  575. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_tui_update.py +0 -0
  576. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cli_wait.py +0 -0
  577. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_client_base_install.py +0 -0
  578. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_commands_common.py +0 -0
  579. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_comments.py +0 -0
  580. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_completion_summary.py +0 -0
  581. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_config.py +0 -0
  582. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_config_acceptance.py +0 -0
  583. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_config_audit.py +0 -0
  584. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_config_pricing.py +0 -0
  585. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  586. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_config_usage_gate.py +0 -0
  587. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_confirm_test.py +0 -0
  588. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_conflict_fix.py +0 -0
  589. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_conflict_fix_semantic.py +0 -0
  590. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
  591. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_coord_test.py +0 -0
  592. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_coord_test_runner_baseline.py +0 -0
  593. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_coord_test_runner_populated_home.py +0 -0
  594. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_coord_test_runner_routing.py +0 -0
  595. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_coord_test_runner_toolchain.py +0 -0
  596. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_coord_uat.py +0 -0
  597. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_coord_web_sse_restart_live.py +0 -0
  598. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_coordinator_machine.py +0 -0
  599. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_cross_platform_imports.py +0 -0
  600. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_dao.py +0 -0
  601. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_dashboard.py +0 -0
  602. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_dashboard_fixture.py +0 -0
  603. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_dashboard_terminal.py +0 -0
  604. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_dashboard_terminal_live.py +0 -0
  605. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_db.py +0 -0
  606. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_dead_end.py +0 -0
  607. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_decomposition_chat.py +0 -0
  608. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_deploy_coord_db_backup.py +0 -0
  609. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_deploy_coord_web_dist.py +0 -0
  610. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_deploy_coord_web_rollback.py +0 -0
  611. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_deploy_drive_queue_unit.py +0 -0
  612. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_deploy_failure_notify_unit.py +0 -0
  613. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_deploy_manifest.py +0 -0
  614. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_deploy_notify_unit.py +0 -0
  615. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_deploy_units_lane.py +0 -0
  616. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_deploy_web_unit.py +0 -0
  617. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_deps.py +0 -0
  618. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_diagnose.py +0 -0
  619. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_dispatch.py +0 -0
  620. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_dispatch_target_validation.py +0 -0
  621. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_dist_name.py +0 -0
  622. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_done_housekeeping.py +0 -0
  623. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_drive.py +0 -0
  624. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_drive_queue.py +0 -0
  625. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_drive_queue_blocked_rendering.py +0 -0
  626. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_drive_queue_launch_argv.py +0 -0
  627. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
  628. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_drive_queue_roll_pending.py +0 -0
  629. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
  630. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_drive_state.py +0 -0
  631. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_drive_tmux.py +0 -0
  632. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_epic_up_capability_detection.py +0 -0
  633. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  634. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_epic_up_image_provenance.py +0 -0
  635. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_errors.py +0 -0
  636. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_events.py +0 -0
  637. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_failure_class.py +0 -0
  638. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_filelock.py +0 -0
  639. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  640. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_fix_of_force_override.py +0 -0
  641. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_fleet_config_health.py +0 -0
  642. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_fleet_health_probes.py +0 -0
  643. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_fleet_health_snapshot.py +0 -0
  644. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_fleet_watchdog.py +0 -0
  645. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_forge_availability.py +0 -0
  646. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_freshness.py +0 -0
  647. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_gate_a.py +0 -0
  648. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_gate_b.py +0 -0
  649. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_gate_snapshot_staleness.py +0 -0
  650. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_gates.py +0 -0
  651. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  652. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_gen_mock_index.py +0 -0
  653. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_generated_rust_fixture.py +0 -0
  654. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_generated_types_fixture.py +0 -0
  655. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_github_ops.py +0 -0
  656. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_github_throttle.py +0 -0
  657. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_goal.py +0 -0
  658. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_graph_health.py +0 -0
  659. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_graph_selfheal_absent_2237.py +0 -0
  660. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_handoff.py +0 -0
  661. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_health_checks.py +0 -0
  662. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_health_cli.py +0 -0
  663. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_health_cli_graph.py +0 -0
  664. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_health_config.py +0 -0
  665. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_health_context.py +0 -0
  666. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_health_coord_web_ci_pin.py +0 -0
  667. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_health_deploy_lane_facts.py +0 -0
  668. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_health_fix.py +0 -0
  669. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_health_incident_regression.py +0 -0
  670. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_health_issues_sync_staleness.py +0 -0
  671. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_health_pypi.py +0 -0
  672. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_health_registry.py +0 -0
  673. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_health_release_cordon_probe.py +0 -0
  674. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_health_timer_active.py +0 -0
  675. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_health_toolchain.py +0 -0
  676. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_health_unit_drift.py +0 -0
  677. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_health_unit_enablement.py +0 -0
  678. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_hooks.py +0 -0
  679. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_human_attended_437.py +0 -0
  680. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_init.py +0 -0
  681. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_integration.py +0 -0
  682. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_interactive_briefing_echo.py +0 -0
  683. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_interactive_pane_log_2541.py +0 -0
  684. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_interactive_prefill_state.py +0 -0
  685. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_interactive_session_relaunch.py +0 -0
  686. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_interactive_test_verdict_backstop.py +0 -0
  687. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_interactive_token_attribution.py +0 -0
  688. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_interactive_worktree.py +0 -0
  689. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_issue_store_seam.py +0 -0
  690. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_issues_sync_status.py +0 -0
  691. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_liveness_auditor.py +0 -0
  692. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_liveness_notify.py +0 -0
  693. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_lock_contention_ratchet.py +0 -0
  694. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_machine_pause.py +0 -0
  695. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_merge_queue.py +0 -0
  696. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_merge_verify.py +0 -0
  697. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_milestone_chat.py +0 -0
  698. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_milestone_dispatch.py +0 -0
  699. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_milestone_gate.py +0 -0
  700. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_milestone_order.py +0 -0
  701. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_milestone_seam.py +0 -0
  702. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_mock_author.py +0 -0
  703. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_model_tiering.py +0 -0
  704. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_models.py +0 -0
  705. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_models_config_labels.py +0 -0
  706. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_needs_attention.py +0 -0
  707. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_network.py +0 -0
  708. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_new_issue_chat.py +0 -0
  709. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_next_release_tag.py +0 -0
  710. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_node_shim.py +0 -0
  711. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_notifier_baseline.py +0 -0
  712. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_notifier_cli.py +0 -0
  713. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_notifier_collect.py +0 -0
  714. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_notifier_config.py +0 -0
  715. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_notifier_drive_seam.py +0 -0
  716. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_notifier_isolation.py +0 -0
  717. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_notifier_predicate.py +0 -0
  718. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_notifier_quiet_hours.py +0 -0
  719. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_notifier_service.py +0 -0
  720. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_notify.py +0 -0
  721. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_notify_drain.py +0 -0
  722. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_openapi.py +0 -0
  723. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_operational_defaults.py +0 -0
  724. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_overlap_fence.py +0 -0
  725. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_overlap_predict.py +0 -0
  726. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_packaged_deploy_units.py +0 -0
  727. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_parentage.py +0 -0
  728. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_paste_landed.py +0 -0
  729. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
  730. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_pipeline.py +0 -0
  731. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_plan_followup_approve_plan_command.py +0 -0
  732. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_plan_followup_pr_command.py +0 -0
  733. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_plan_followup_review_command.py +0 -0
  734. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_plan_only.py +0 -0
  735. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_plan_parser.py +0 -0
  736. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_platform_paths.py +0 -0
  737. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_portal_bridge.py +0 -0
  738. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_portal_config.py +0 -0
  739. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_portal_store.py +0 -0
  740. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_portal_sync.py +0 -0
  741. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_pr_body_lint.py +0 -0
  742. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_prereqs.py +0 -0
  743. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_production_db_guard.py +0 -0
  744. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_progress.py +0 -0
  745. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_provider_seam.py +0 -0
  746. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_providers.py +0 -0
  747. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_providers_config_labels.py +0 -0
  748. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_providers_pty.py +0 -0
  749. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_quiet_hours.py +0 -0
  750. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_quiet_hours_store_2146.py +0 -0
  751. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_reap_merged_sessions.py +0 -0
  752. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_reap_stale_interactive_tick.py +0 -0
  753. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_reconcile.py +0 -0
  754. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_reconcile_branch.py +0 -0
  755. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_reconcile_completions.py +0 -0
  756. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
  757. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_reconcile_merges.py +0 -0
  758. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_reconcile_no_agent_record.py +0 -0
  759. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_reconcile_tick.py +0 -0
  760. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_reconcile_usage_limit_done.py +0 -0
  761. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_refine_chat.py +0 -0
  762. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_release_cordon_2101.py +0 -0
  763. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  764. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_release_cordon_deadlock_2240.py +0 -0
  765. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_release_cordon_stuck_2490.py +0 -0
  766. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_release_propagate.py +0 -0
  767. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_release_propagate_threshold.py +0 -0
  768. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_release_roll_between_legs_2854.py +0 -0
  769. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_release_roll_window_handoff.py +0 -0
  770. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_release_unified_1242.py +0 -0
  771. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_release_verify.py +0 -0
  772. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_release_window.py +0 -0
  773. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_remote_auto_prune.py +0 -0
  774. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_remote_interactive_reaper.py +0 -0
  775. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_repo_add.py +0 -0
  776. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_repo_edit_2220.py +0 -0
  777. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_repo_graph_fleet_2237.py +0 -0
  778. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_repo_onboard_2220.py +0 -0
  779. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_report_result_push.py +0 -0
  780. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_reports.py +0 -0
  781. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_retry.py +0 -0
  782. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_retry_advisory_1606.py +0 -0
  783. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_retry_type_1636.py +0 -0
  784. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_revalidate.py +0 -0
  785. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_review.py +0 -0
  786. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_review_end_review_without_verdict.py +0 -0
  787. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_review_parse_failure_diagnostic.py +0 -0
  788. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_review_reaffirm.py +0 -0
  789. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_review_state.py +0 -0
  790. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_review_verdict_backstop.py +0 -0
  791. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_review_verdict_override_audit.py +0 -0
  792. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_review_verdict_relay.py +0 -0
  793. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_review_zero_commits.py +0 -0
  794. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_scoped_review_wiring.py +0 -0
  795. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_scorecard.py +0 -0
  796. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_self_health.py +0 -0
  797. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_serve.py +0 -0
  798. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_serve_app_board_trim.py +0 -0
  799. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_session.py +0 -0
  800. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_slice_issue_attribution.py +0 -0
  801. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_smoke.py +0 -0
  802. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_smoke_live_checkout_restore.py +0 -0
  803. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_smoke_workflow.py +0 -0
  804. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_spend_ceiling.py +0 -0
  805. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_spend_ceiling_coordinator.py +0 -0
  806. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_split.py +0 -0
  807. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_split_work.py +0 -0
  808. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_sql_dialect.py +0 -0
  809. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_stage_projection.py +0 -0
  810. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_stalled_pipeline.py +0 -0
  811. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_state.py +0 -0
  812. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_state_review_findings_daemon.py +0 -0
  813. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_status_fleet_footer.py +0 -0
  814. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_stop_1567.py +0 -0
  815. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_store_contract.py +0 -0
  816. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_stuck.py +0 -0
  817. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
  818. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_terminal_command.py +0 -0
  819. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_test_author.py +0 -0
  820. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_test_chat.py +0 -0
  821. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_test_orchestrator.py +0 -0
  822. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_test_report.py +0 -0
  823. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_test_verdict_parsing.py +0 -0
  824. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_test_verdict_transcript_floor.py +0 -0
  825. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_text_io_encoding_audit.py +0 -0
  826. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_thin_client_board_audit.py +0 -0
  827. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_thin_client_config_load_1080.py +0 -0
  828. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_thin_client_daemon_routing_906.py +0 -0
  829. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_tmux_host.py +0 -0
  830. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_tmux_session.py +0 -0
  831. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_transcript_floor.py +0 -0
  832. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_usage.py +0 -0
  833. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_usage_limits.py +0 -0
  834. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_usage_rollup.py +0 -0
  835. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_venv_live_install_2121.py +0 -0
  836. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_version_single_source.py +0 -0
  837. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_watch.py +0 -0
  838. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  839. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_worker_env_venv_isolation.py +0 -0
  840. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_worker_events.py +0 -0
  841. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_worker_image_pin_sync.py +0 -0
  842. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_worker_safety.py +0 -0
  843. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_worker_test_scoping.py +0 -0
  844. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_worktree.py +0 -0
  845. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  846. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/Cargo.lock +0 -0
  847. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/Cargo.toml +0 -0
  848. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/cargo-config-local-quadraui.toml.example +0 -0
  849. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/src/app/audit.rs +0 -0
  850. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/src/app/chat.rs +0 -0
  851. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/src/app/doc_tabs.rs +0 -0
  852. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/src/app/drive.rs +0 -0
  853. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/src/app/escalation.rs +0 -0
  854. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/src/app/fleet_health.rs +0 -0
  855. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/src/app/fleet_sessions.rs +0 -0
  856. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/src/app/fleet_terminals.rs +0 -0
  857. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/src/app/format.rs +0 -0
  858. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/src/app/milestone_dag.rs +0 -0
  859. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/src/app/msv.rs +0 -0
  860. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/src/app/plans.rs +0 -0
  861. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/src/app/render.rs +0 -0
  862. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/src/app/reports.rs +0 -0
  863. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/src/app/terminal.rs +0 -0
  864. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/src/app/types.rs +0 -0
  865. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/src/app/workspace.rs +0 -0
  866. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/src/bin/gtk.rs +0 -0
  867. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/src/commands.rs +0 -0
  868. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/src/lib.rs +0 -0
  869. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/src/main.rs +0 -0
  870. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/src/settings.rs +0 -0
  871. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/tests/acceptance.rs +0 -0
  872. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/tests/cli.rs +0 -0
  873. {code_coordinator-0.5.264 → code_coordinator-0.5.267}/tui/tests/fixtures/board_sample.json +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-coordinator
3
- Version: 0.5.264
3
+ Version: 0.5.267
4
4
  Summary: Coordinate Claude Code workers across multiple machines and repos.
5
5
  Author-email: John Donaghy <johnfdonaghy@gmail.com>
6
6
  License-Expression: LicenseRef-FSL-1.1-MIT
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-coordinator
3
- Version: 0.5.264
3
+ Version: 0.5.267
4
4
  Summary: Coordinate Claude Code workers across multiple machines and repos.
5
5
  Author-email: John Donaghy <johnfdonaghy@gmail.com>
6
6
  License-Expression: LicenseRef-FSL-1.1-MIT
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "0.5.264",
2
+ "tag": "0.5.267",
3
3
  "distance": 0,
4
- "node": "g037604ea4782108f989df77750337682d26f2a36",
4
+ "node": "g1fa630fb3cebe560405cb33c1b2ce1e3fed742a4",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-28"
@@ -15,14 +15,12 @@ This module is the single place the per-field wire policy lives:
15
15
  with ``<field>_truncated: true`` (+ ``<field>_len``). Consumers that need
16
16
  the full text (fix-worker briefings, the TUI findings pane) fetch the
17
17
  single-resource detail endpoint ``GET /assignment/{id}``.
18
- * **Bounded documents** — ``issues.body``, ``test_plan`` — get a *high* hard
19
- cap that today truncates nothing real (issue-body p99 ≈ 9 KB, cap 16 KB)
20
- but bounds the pathological row, because clients parse these semantically
21
- (work orders, ``## Files`` globs) and an aggressive prefix cut would break
22
- those parses. **Tracking (epic) issue bodies are exempt entirely** — the
23
- TUI's Milestone DAG parses ``## Work order`` client-side out of the full
24
- body (see :func:`bound_issue_row`); GitHub's own 64 KB issue-body limit ×
25
- the handful of epics per board keeps the exemption bounded. Full body:
18
+ * **Bounded documents** — ``test_plan`` — get a *high* hard cap that today
19
+ truncates nothing real but bounds the pathological row, because clients
20
+ parse these semantically and an aggressive prefix cut would break those
21
+ parses.
22
+ * **``issues.body`` is not on the collection wire at all** (#1939), except
23
+ for tracking (epic) issues. See :func:`bound_issue_row`. Full body:
26
24
  ``GET /issue/{repo}/{number}``.
27
25
 
28
26
  Everything here is wire-only: the DB row, the detail endpoints, and local
@@ -49,6 +47,24 @@ issues outright, on top of the existing per-field width caps. Both cuts are
49
47
  flagged on the payload (``board_truncated`` + counts) so a client can tell
50
48
  it received a trimmed board rather than the whole history — see
51
49
  :func:`bound_board_payload`.
50
+
51
+ **#1939 (instance #5): the 16 KB body cap bounded the pathological row and
52
+ nothing else.** #1337 gave ``issues.body`` a *document* cap high enough that
53
+ it truncates no real issue (p99 ≈ 9 KB against a 16 KB cap), and #1791 then
54
+ dropped the body of *closed* issues outright. What was left — every **open,
55
+ non-epic** body, shipped whole on every uncached poll — was still 1.44 MB of
56
+ a 1.69 MB issue-body payload measured on the live board, for a field that is
57
+ display material, not something a collection *view* renders directly: the
58
+ TUI reads it lazily, on demand, through several panes that share the same
59
+ ``issue_detail_cache`` / ``GET /issue/{repo}/{number}`` hydration path (the
60
+ Board and Pipeline Issue tabs since #2497; the Drive/Merge Queue tab's
61
+ issue-detail pane and the "Chat about issue" briefing as of this fix) rather
62
+ than each parsing the wire body eagerly. Do not assume the Board/Pipeline
63
+ tabs are the only consumers when touching this policy again — check every
64
+ Rust call site of ``OpenIssue.body`` / ``PipelineIssue.body`` first. So the
65
+ body now leaves the collection wire for open issues too, and
66
+ :func:`bound_issue_row` keeps only the machine-parsed *residue* a client
67
+ cannot re-fetch in time — see :data:`ALLOWED_GLOB_MARKER`.
52
68
  """
53
69
 
54
70
  from __future__ import annotations
@@ -88,6 +104,27 @@ BOARD_PAYLOAD_BYTE_BUDGET = 2_500_000
88
104
  # (TUI pane, dialog) knows it is one — machine consumers use the flags.
89
105
  TRUNCATION_NOTICE = "\n… [truncated on the /board wire — full text: detail endpoint]"
90
106
 
107
+ # #1939: the ONE line-level marker a thin client parses out of a non-epic
108
+ # issue body *synchronously*, without a user action that could wait for a
109
+ # detail fetch — `tui/src/app/pipeline.rs`'s
110
+ # `parse_allowed_globs_from_issue_body` MARKER, read by
111
+ # `acceptance_for_path_arg` while handling a Pipeline right-click dispatch on
112
+ # a repo with more than one acceptance route (`claude-coordinator` itself has
113
+ # two: `coord/**` and `tui/**`). Lines carrying it survive the body cut; see
114
+ # `_machine_readable_residue`. Kept in sync with the Rust side by
115
+ # tests/test_board_wire.py::test_allowed_glob_marker_matches_the_rust_parser,
116
+ # the same cross-language guard posture as coord/board_bool_guard.py.
117
+ #
118
+ # Measured cost of the retention: ZERO on today's live board — 0 of 781
119
+ # issue bodies carry the marker (the house `## Files` convention is a bare
120
+ # backticked-path list, which that parser does not read), so the residue is
121
+ # empty for every real row and the byte win below is unaffected. It is kept
122
+ # anyway because the marker IS the documented spelling
123
+ # (`parse_allowed_globs_from_issue_body`'s own tests use it) and a body that
124
+ # adopts it must keep resolving `--for-path` from the Pipeline right-click
125
+ # rather than silently degrading to "dispatch from the CLI instead".
126
+ ALLOWED_GLOB_MARKER = "**Allowed:**"
127
+
91
128
 
92
129
  def _preview(text: str, cap: int) -> str:
93
130
  return text[:cap] + TRUNCATION_NOTICE
@@ -150,8 +187,31 @@ def _bound_test_plan(row: dict, cap: int) -> None:
150
187
  row["test_plan"] = None
151
188
 
152
189
 
190
+ #: table → every field this module may stamp ``<field>_truncated`` /
191
+ #: ``<field>_len`` onto. Those flags are **wire-only**: they are not DB
192
+ #: columns, so they are deliberately absent from the DTOs in
193
+ #: ``coord/board_schema.py`` (whose rule — "a column not declared here is not
194
+ #: on the wire" — is about *columns*). They are still on the wire, so
195
+ #: ``coord/serve_app.py``'s ``_board_payload_schema`` publishes them off this
196
+ #: table; before #1939 made issue-body bounding unconditional they fired
197
+ #: rarely enough that ``/openapi.json`` never had to admit they existed.
198
+ BOUNDED_TEXT_FIELDS: dict[str, tuple[str, ...]] = {
199
+ "assignments": (
200
+ "review_findings",
201
+ "test_reason",
202
+ "smoke_test_reason",
203
+ "failure_reason",
204
+ "test_plan",
205
+ ),
206
+ "issues": ("body",),
207
+ }
208
+
209
+
153
210
  def bound_assignment_row(row: dict) -> None:
154
- """Apply the wire policy to one ``/board`` assignment row (mutates)."""
211
+ """Apply the wire policy to one ``/board`` assignment row (mutates).
212
+
213
+ Every field it may bound is listed in :data:`BOUNDED_TEXT_FIELDS`.
214
+ """
155
215
  _bound_review_findings(row, PREVIEW_CHARS)
156
216
  _bound_text_field(row, "test_reason", PREVIEW_CHARS)
157
217
  _bound_text_field(row, "smoke_test_reason", PREVIEW_CHARS)
@@ -172,6 +232,26 @@ def _is_closed_issue(row: dict) -> bool:
172
232
  return isinstance(state, str) and state.strip().lower() == "closed"
173
233
 
174
234
 
235
+ def _machine_readable_residue(body: str) -> str:
236
+ """The lines of *body* a **client** parses without a user action, joined
237
+ back together (#1939).
238
+
239
+ Everything else in a non-epic body is display material, and the Issue
240
+ tab re-fetches that from ``GET /issue/{repo}/{number}`` on demand. What
241
+ cannot be re-fetched in time is the ``## Files`` glob declaration that
242
+ ``acceptance_for_path_arg`` reads *synchronously* while handling a
243
+ right-click dispatch — so those lines, and only those, stay inline.
244
+
245
+ Line-scoped by construction: the Rust parser matches
246
+ :data:`ALLOWED_GLOB_MARKER` per line and reads only the backtick spans
247
+ that follow it on that same line, so retaining whole matching lines is
248
+ exactly equivalent to retaining the whole body as far as it can tell.
249
+ """
250
+ return "".join(
251
+ f"{line}\n" for line in body.splitlines() if ALLOWED_GLOB_MARKER in line
252
+ )
253
+
254
+
175
255
  def bound_issue_row(row: dict) -> None:
176
256
  """Apply the wire policy to one ``/board`` issue row (mutates).
177
257
 
@@ -183,24 +263,57 @@ def bound_issue_row(row: dict) -> None:
183
263
  work-order items past DOCUMENT_CHARS would silently drop DAG nodes on
184
264
  thin clients — a regression in exactly the failure class #1337 exists to
185
265
  close. The exemption stays bounded in practice: an epic body is capped
186
- at 65,536 chars by GitHub itself and boards carry few epics (~31 today,
187
- 0.19 MB total).
266
+ at 65,536 chars by GitHub itself and boards carry few epics (48 open
267
+ today, 0.24 MB total).
188
268
 
189
269
  **Closed (non-epic) issues drop the body entirely** (#1791): a closed
190
270
  issue is terminal — no pipeline decision, client-side or server-side,
191
- reads its body once it's closed — and #1337's DOCUMENT_CHARS cap alone
192
- still left 110 closed issues carrying 0.57 MB on every /board GET. Full
193
- text stays on ``GET /issue/{repo}/{number}``. Open (non-epic) issue
194
- bodies — the ones ``pipeline.rs``'s ``acceptance_for_path_arg`` and
195
- ``dialogs.rs`` parse client-side — keep the DOCUMENT_CHARS cap
196
- unchanged.
271
+ reads its body once it's closed.
272
+
273
+ **Open (non-epic) issues keep only the machine-parsed residue** (#1939).
274
+ The rest of an open body is display material, and every Rust consumer of
275
+ the synced row (the Board/Pipeline Issue tabs since #2497; the
276
+ Drive/Merge Queue tab's issue-detail pane and the "Chat about issue"
277
+ briefing as of this fix) hydrates it lazily from
278
+ ``GET /issue/{repo}/{number}`` instead — so shipping it inline was
279
+ 1.44 MB per uncached poll, per client, for text nothing renders until a
280
+ user opens one issue. ``body_truncated`` + ``body_len`` are stamped
281
+ exactly as for a closed issue, which is what arms that hydration
282
+ (``pipeline.rs::issue_body_fetch_target``).
197
283
  """
198
284
  if _is_tracking_issue(row):
199
285
  return
200
286
  if _is_closed_issue(row):
201
287
  _bound_text_field(row, "body", 0)
202
288
  return
203
- _bound_text_field(row, "body", DOCUMENT_CHARS)
289
+ _bound_open_issue_body(row)
290
+
291
+
292
+ def _bound_open_issue_body(row: dict) -> None:
293
+ """#1939: replace an open non-epic ``body`` with its machine-readable
294
+ residue + the truncation notice, stamping the same
295
+ ``body_truncated``/``body_len`` flags :func:`_bound_text_field` does.
296
+
297
+ A body whose residue is not actually smaller than the original (a body
298
+ that *is* one ``**Allowed:**`` line, or an empty one) is left alone
299
+ rather than flagged — same "nothing was cut, so the shape is unchanged"
300
+ rule the width caps follow.
301
+ """
302
+ val = row.get("body")
303
+ if not isinstance(val, str) or not val:
304
+ return
305
+ residue = _machine_readable_residue(val)
306
+ # Backstop for a pathological body that is nothing but glob declarations
307
+ # — can't happen with a real issue, but the point of this module is that
308
+ # no collection field is unbounded.
309
+ if len(residue) > DOCUMENT_CHARS:
310
+ residue = residue[:DOCUMENT_CHARS]
311
+ replacement = residue + TRUNCATION_NOTICE
312
+ if len(replacement) >= len(val):
313
+ return
314
+ row["body_len"] = len(val)
315
+ row["body_truncated"] = True
316
+ row["body"] = replacement
204
317
 
205
318
 
206
319
  def _open_issue_keys(issues) -> set[tuple[str, int]]:
@@ -653,10 +653,22 @@ def _lane_versions_by_host(report) -> dict[str, list[str | None]]:
653
653
  return out
654
654
 
655
655
 
656
- def _ensure_roll_pending_marker(target_version: str, *, reason: str) -> None:
656
+ def _ensure_roll_pending_marker(
657
+ target_version: str, *, reason: str, dry_run: bool = False
658
+ ) -> None:
657
659
  """#2587: make sure a roll-pending marker exists for *target_version*,
658
660
  without resetting an already-live one's clock.
659
661
 
662
+ #2869: ``dry_run=True`` is the ONE seam every call site must go through —
663
+ it never touches disk, only echoing what it *would* have written, in the
664
+ same "would ..." register as ``_fire_pending_roll``'s and
665
+ ``_apply_cordons``'s own dry-run wording. A caller-side ``if dry_run:``
666
+ guard around the call site was tried first and is exactly what let this
667
+ bug happen: the marker write is the one state mutation on the #2587
668
+ defer branch that never got that guard. Folding the check in here means
669
+ a future second call site inherits the guard for free instead of having
670
+ to remember to add its own.
671
+
660
672
  Called from the one place `coord release propagate` itself hits the
661
673
  #2112 daemon-busy deadlock it cannot roll through on its own (the
662
674
  daemon-first ``busy_hosts`` check in :func:`release_propagate`) — so a
@@ -692,10 +704,24 @@ def _ensure_roll_pending_marker(target_version: str, *, reason: str) -> None:
692
704
  if existing is not None and existing.target_version == target_version:
693
705
  return
694
706
  if existing is not None:
707
+ if dry_run:
708
+ click.echo(
709
+ f"--dry-run: would replace the pending roll-pending marker "
710
+ f"({existing.describe()}) with v{target_version} (reason="
711
+ f"{reason!r}), preserving its original set_at/deferrals (#2607)"
712
+ )
713
+ return
695
714
  write_roll_pending(
696
715
  _dataclasses.replace(existing, target_version=target_version, reason=reason)
697
716
  )
698
717
  return
718
+ if dry_run:
719
+ click.echo(
720
+ f"--dry-run: would set a roll-pending marker for v{target_version} "
721
+ f"(reason={reason!r}) — the drive-queue tick would then hold "
722
+ "capacity at 0 until the queue drains"
723
+ )
724
+ return
699
725
  write_roll_pending(
700
726
  RollPending(target_version=target_version, set_at=_time.time(), reason=reason)
701
727
  )
@@ -1097,7 +1123,7 @@ def release_propagate( # noqa: PLR0912, PLR0915 — a pipeline; the decisions a
1097
1123
  # too, so a plain periodic `coord-release-propagate.timer` run also
1098
1124
  # arms the drive-queue tick's own inter-drive-gap trigger instead of
1099
1125
  # requiring an operator to separately reach for `nightly-window`.
1100
- _ensure_roll_pending_marker(record.target_version, reason="propagate")
1126
+ _ensure_roll_pending_marker(record.target_version, reason="propagate", dry_run=dry_run)
1101
1127
  _finish(rp.STATUS_DEFERRED, 0)
1102
1128
 
1103
1129
  still_busy = busy_hosts - set(current)
@@ -2303,6 +2303,45 @@ def _board_response_schema(components: dict) -> dict:
2303
2303
  for cls in board_schema.BOARD_PROJECTIONS.values():
2304
2304
  dataclass_schema(cls, components)
2305
2305
 
2306
+ # #1939: `coord.board_wire` stamps `<field>_truncated` / `<field>_len`
2307
+ # onto bounded rows *after* the DTO projection. They are wire-only (no DB
2308
+ # column backs them), so they are not — and should not be — DTO fields;
2309
+ # but they ARE on the wire, and since #1939 made issue-body bounding
2310
+ # unconditional EVERY open non-epic issue carries them, where before they
2311
+ # fired rarely enough that nothing noticed the spec omitted them.
2312
+ # Declared off board_wire's own field table so the published schema stays
2313
+ # a superset of what /board emits (asserted by
2314
+ # tests/test_board_schema.py::test_board_dtos_and_projection_cannot_drift).
2315
+ #
2316
+ # Only `issues` is published here, not board_wire's whole
2317
+ # BOUNDED_TEXT_FIELDS table. `assignments`' four remaining flag pairs
2318
+ # (test_reason/smoke_test_reason/failure_reason/test_plan — review_findings
2319
+ # is already hand-declared on the Rust side) are the same pre-existing
2320
+ # omission, but they are not what #1939 changed, and declaring them makes
2321
+ # `scripts/codegen.py --rust` emit eight new `Assignment` fields, which
2322
+ # forces ~380 lines of struct-literal churn across 48 fixture sites for a
2323
+ # diff about /board byte size. Left for its own change.
2324
+ from coord.board_wire import BOUNDED_TEXT_FIELDS # noqa: PLC0415
2325
+
2326
+ for _table, _fields in ((t, BOUNDED_TEXT_FIELDS[t]) for t in ("issues",)):
2327
+ _props = components[board_schema.BOARD_PROJECTIONS[_table].__name__]["properties"]
2328
+ for _field in _fields:
2329
+ _props[f"{_field}_truncated"] = {
2330
+ "type": "boolean",
2331
+ "description": (
2332
+ f"#1337/#1939: true when the /board wire bounded `{_field}`. "
2333
+ "Additive-only — absent (not false) when nothing was cut. "
2334
+ "Fetch the full value from the single-resource detail read."
2335
+ ),
2336
+ }
2337
+ _props[f"{_field}_len"] = {
2338
+ "type": "integer",
2339
+ "description": (
2340
+ f"#1337/#1939: `{_field}`'s full length before bounding. "
2341
+ f"Present only alongside `{_field}_truncated`."
2342
+ ),
2343
+ }
2344
+
2306
2345
  planned_merge_ref = dataclass_schema(PlannedMerge, components)
2307
2346
  staging_item_ref = dataclass_schema(StagingItem, components)
2308
2347
 
@@ -1050,12 +1050,15 @@ RUST_EXTRA_FIELDS: dict[str, tuple[RustField, ...]] = {
1050
1050
  RustField(
1051
1051
  name="body_truncated", ty="bool", serde=("default",),
1052
1052
  doc=(
1053
- "#2497: true when the `/board` wire bounded `body` — set for a closed",
1054
- "(non-epic) issue, whose body `board_wire.bound_issue_row` drops to 0",
1055
- "chars (#1791). `#[serde(default)]` so an older daemon (pre-#2497,",
1056
- "never stamps this) deserializes as `false` — the pre-existing",
1057
- "behavior of trusting `body` verbatim. Absent for open/epic issues,",
1058
- "whose bodies the wire never truncates to 0.",
1053
+ "#2497: true when the `/board` wire bounded `body`. Set for every",
1054
+ "NON-EPIC issue, closed or open: `board_wire.bound_issue_row` drops a",
1055
+ "closed body to 0 chars (#1791) and an open one to its machine-parsed",
1056
+ "`**Allowed:**` residue (#1939), because the Issue tabs hydrate the",
1057
+ "real text lazily from `GET /issue/{repo}/{number}`. Absent only for",
1058
+ "epic bodies, which stay inline for the client-side Milestone DAG",
1059
+ "parse. `#[serde(default)]` so an older daemon (pre-#2497, never",
1060
+ "stamps this) deserializes as `false` — the pre-existing behavior of",
1061
+ "trusting `body` verbatim.",
1059
1062
  "",
1060
1063
  "Not part of `coord.board_schema.BoardIssue` — stamped onto the row",
1061
1064
  "afterward by `coord/board_wire.py`; kept here by hand alongside its",
@@ -1142,10 +1145,22 @@ def emit_rust_struct(schema_name: str, rust_name: str, schemas: dict[str, Any])
1142
1145
  lines.extend(meta["attrs"])
1143
1146
  lines.append(f"#[derive({', '.join(meta['derives'])})]")
1144
1147
  lines.append(f"{meta['vis']} struct {rust_name} {{")
1148
+ extras = RUST_EXTRA_FIELDS.get(rust_name, ())
1149
+ # #1939: an extras entry WINS over the mechanical walk when the spec also
1150
+ # declares that property. `RUST_EXTRA_FIELDS` exists for the wire-only
1151
+ # `<field>_truncated`/`<field>_len` flags `board_wire.py` stamps on, and
1152
+ # `/openapi.json` now declares them too (it always should have — they were
1153
+ # just rare enough on the wire that nothing noticed). Without this the walk
1154
+ # and the table would BOTH emit them: duplicate struct fields, and the
1155
+ # auto-derived `body_len: i64` would shadow the hand-written
1156
+ # `Option<i64>` that `issue_body_fetch_target`'s `len?` gate depends on.
1157
+ extra_names = {f.name for f in extras}
1145
1158
  for python_name, field_schema in properties.items():
1159
+ if python_name in extra_names:
1160
+ continue
1146
1161
  field = overrides.get(python_name) or _rust_auto_field(python_name, field_schema)
1147
1162
  lines.extend(_render_rust_field(field))
1148
- for field in RUST_EXTRA_FIELDS.get(rust_name, ()):
1163
+ for field in extras:
1149
1164
  lines.extend(_render_rust_field(field))
1150
1165
  lines.append("}")
1151
1166
  return "\n".join(lines)
@@ -975,16 +975,17 @@ def test_board_wire_bounds_assignment_text_fields(app_client: TestClient) -> Non
975
975
 
976
976
 
977
977
  def test_board_wire_bounds_issue_bodies(app_client: TestClient) -> None:
978
- """Issue bodies get the high document cap (semantic parses — work orders,
979
- ## Files globs — must survive for every real body; today p99 ≈ 9 KB)."""
980
- from coord.board_wire import DOCUMENT_CHARS
978
+ """#1939: an open non-epic body leaves the collection wire entirely — it
979
+ is 1.44 MB of display material the Issue tabs hydrate lazily (#2497) —
980
+ and is flagged so a client knows to fetch the detail read."""
981
+ from coord.board_wire import TRUNCATION_NOTICE
981
982
 
982
983
  board = app_client.get("/board").json()
983
984
  issue = next(i for i in board["issues"] if i["number"] == 42)
984
- # 9 KB body is under the document cap: served whole, no flag.
985
- assert issue["body"] == "B" * 9000
986
- assert "body_truncated" not in issue
987
- assert DOCUMENT_CHARS >= 16384
985
+ # 9 KB body: no longer served on the collection wire at all.
986
+ assert issue["body"] == TRUNCATION_NOTICE
987
+ assert issue["body_truncated"] is True
988
+ assert issue["body_len"] == 9000
988
989
 
989
990
 
990
991
  def test_board_wire_short_fields_untouched(
@@ -18,6 +18,7 @@ flag so a client can tell it received a trimmed board.
18
18
  from __future__ import annotations
19
19
 
20
20
  import json
21
+ import re
21
22
  import sqlite3
22
23
  import time
23
24
  from pathlib import Path
@@ -142,15 +143,104 @@ def test_bound_issue_row_drops_closed_issue_body() -> None:
142
143
  assert len(row["body"]) < 200 # notice text only — no prefix survives
143
144
 
144
145
 
145
- def test_bound_issue_row_open_issue_keeps_document_cap() -> None:
146
- """Unchanged #1337 behaviour: OPEN non-epic issues keep the DOCUMENT_CHARS
147
- prefix, not a hard drop — coord-tui's client-side parses need it."""
148
- from coord.board_wire import DOCUMENT_CHARS
146
+ def test_bound_issue_row_drops_open_non_epic_issue_body() -> None:
147
+ """#1939: an OPEN non-epic body is display material the Issue tabs
148
+ hydrate lazily (#2497), so it leaves the collection wire too — the
149
+ #1337 DOCUMENT_CHARS prefix truncated no real issue (p99 ≈ 9 KB against
150
+ a 16 KB cap) and therefore saved nothing."""
151
+ body = "x" * 9000
152
+ row = {"state": "open", "labels": ["bug"], "body": body}
153
+ bound_issue_row(row)
154
+ assert row["body_truncated"] is True
155
+ assert row["body_len"] == 9000
156
+ assert len(row["body"]) < 200 # notice text only
157
+ assert "x" * 100 not in row["body"]
158
+
159
+
160
+ def test_bound_issue_row_open_body_keeps_the_allowed_globs_line() -> None:
161
+ """#1939: `acceptance_for_path_arg` parses `**Allowed:**` out of an open
162
+ issue's body SYNCHRONOUSLY while handling a Pipeline right-click
163
+ dispatch — there is no user action it could wait for a detail fetch
164
+ behind — so those lines survive the cut while the prose does not."""
165
+ body = (
166
+ "Some long prose that nothing parses.\n" * 200
167
+ + "## Files\n"
168
+ + "- **Allowed:** `coord/board_wire.py`, `tests/test_board_wire.py`\n"
169
+ + "- **Forbidden:** docs/README.\n"
170
+ + "More prose.\n" * 200
171
+ )
172
+ row = {"state": "open", "labels": ["bug"], "body": body}
173
+ bound_issue_row(row)
174
+
175
+ assert row["body_truncated"] is True
176
+ assert row["body_len"] == len(body)
177
+ assert "**Allowed:** `coord/board_wire.py`, `tests/test_board_wire.py`" in row["body"]
178
+ assert "Some long prose" not in row["body"]
179
+ assert "Forbidden" not in row["body"]
180
+ assert len(row["body"]) < len(body) // 10
181
+
182
+
183
+ def test_bound_issue_row_open_body_of_only_globs_is_left_alone() -> None:
184
+ """Additive-only rule: when the residue isn't actually smaller than the
185
+ original, nothing is cut and no flag is stamped — an old client sees an
186
+ unchanged shape, same as the width caps."""
187
+ body = "- **Allowed:** `coord/**`\n"
188
+ row = {"state": "open", "labels": ["bug"], "body": body}
189
+ bound_issue_row(row)
190
+ assert row["body"] == body
191
+ assert "body_truncated" not in row
192
+
149
193
 
150
- row = {"state": "open", "labels": ["bug"], "body": "x" * (DOCUMENT_CHARS + 500)}
194
+ def test_bound_issue_row_short_open_body_still_dropped() -> None:
195
+ """A *short* open body is still not free: 490 open non-epic issues at a
196
+ ~2.9 KB mean were 1.44 MB per uncached poll, per client. The cut is
197
+ unconditional, not size-gated."""
198
+ body = "a short but entirely unrendered issue description\n" * 5
199
+ row = {"state": "open", "labels": ["bug"], "body": body}
151
200
  bound_issue_row(row)
152
201
  assert row["body_truncated"] is True
153
- assert len(row["body"]) > DOCUMENT_CHARS # prefix + notice, not dropped to ~0
202
+ assert "unrendered" not in row["body"]
203
+
204
+
205
+ def test_bound_issue_row_empty_open_body_untouched() -> None:
206
+ row = {"state": "open", "labels": ["bug"], "body": ""}
207
+ bound_issue_row(row)
208
+ assert row["body"] == ""
209
+ assert "body_truncated" not in row
210
+
211
+
212
+ def test_bound_issue_row_open_epic_body_still_inline() -> None:
213
+ """#1939 must not reach the Milestone DAG: `milestone_dag.rs` parses
214
+ `## Work order` client-side out of the epic body with NO extra
215
+ round-trip, so epics stay exempt (48 open epics, 0.24 MB — bounded)."""
216
+ body = "## Work order\n" + "x" * 20000 + "\n- [ ] #4243 {after: #4242}\n"
217
+ row = {"state": "open", "labels": ["epic", "coord"], "body": body}
218
+ bound_issue_row(row)
219
+ assert row["body"] == body
220
+ assert "body_truncated" not in row
221
+
222
+
223
+ def test_allowed_glob_marker_matches_the_rust_parser() -> None:
224
+ """Cross-language guard (#1939), same posture as coord/board_bool_guard.py:
225
+ `ALLOWED_GLOB_MARKER` decides what survives the body cut on the *server*,
226
+ but the consumer that needs it is `parse_allowed_globs_from_issue_body`
227
+ in the Rust TUI. If someone renames the marker on one side only, the
228
+ residue silently stops carrying what the client parses — so assert the
229
+ two spellings are still the same string.
230
+ """
231
+ from coord.board_wire import ALLOWED_GLOB_MARKER
232
+
233
+ src = Path(__file__).resolve().parents[1] / "tui" / "src" / "app" / "pipeline.rs"
234
+ if not src.exists(): # pragma: no cover — coord installed without the TUI tree
235
+ pytest.skip("tui/src/app/pipeline.rs not present in this checkout")
236
+ text = src.read_text(encoding="utf-8")
237
+ marker = re.search(r'const MARKER: &str = "([^"]+)";', text)
238
+ assert marker is not None, (
239
+ "parse_allowed_globs_from_issue_body's MARKER const is gone or was "
240
+ "reshaped — re-check what the Rust side parses before trusting "
241
+ "_machine_readable_residue"
242
+ )
243
+ assert marker.group(1) == ALLOWED_GLOB_MARKER
154
244
 
155
245
 
156
246
  def test_bound_issue_row_closed_epic_still_exempt() -> None:
@@ -459,6 +459,42 @@ def test_a_busy_daemon_host_defers_the_whole_run(
459
459
  assert pending.reason == "propagate"
460
460
 
461
461
 
462
+ def test_a_busy_daemon_dry_run_defers_without_writing_the_marker(
463
+ valid_config_path, state_dir, no_network, monkeypatch
464
+ ):
465
+ """#2869: `--dry-run` promises to "print the window verdict and the roll
466
+ plan; change nothing" — but the daemon-busy defer branch above called
467
+ `_ensure_roll_pending_marker` unconditionally, so a purely read-only
468
+ `coord release propagate --dry-run` against a busy daemon armed the
469
+ REAL #2587 roll-pending marker, freezing the whole drive queue (capacity
470
+ forced to 0) even though nothing was supposed to change. This asserts
471
+ the marker file stays absent and the output names what would have been
472
+ set instead, matching `_fire_pending_roll`'s and `_apply_cordons`'s
473
+ existing dry-run wording conventions."""
474
+ monkeypatch.setattr(
475
+ release_cmd, "_fetch_board",
476
+ lambda: ({"assignments": [{"machine_name": "server", "issue_number": 9,
477
+ "status": "RUNNING"}]}, None),
478
+ )
479
+ monkeypatch.setattr(
480
+ release_cmd, "_roll_python",
481
+ lambda *a, **k: pytest.fail("a busy daemon must roll nothing, anywhere"),
482
+ )
483
+ _stub_verify(monkeypatch, versions={"laptop": ["0.4.110"], "server": ["0.4.110"]},
484
+ daemon="server")
485
+ result = CliRunner().invoke(
486
+ main,
487
+ ["release", "propagate", "--config", str(valid_config_path),
488
+ "--target", "0.4.111", "--dry-run"],
489
+ )
490
+ assert result.exit_code == 0, result.output
491
+ assert dq_cmd.read_roll_pending() is None, (
492
+ "--dry-run must never write the real #2587 roll-pending marker"
493
+ )
494
+ assert "would set a roll-pending marker" in result.output
495
+ assert "0.4.111" in result.output
496
+
497
+
462
498
  def test_a_second_busy_daemon_deferral_does_not_re_arm_the_marker(
463
499
  valid_config_path, state_dir, no_network, monkeypatch
464
500
  ):