code-coordinator 0.5.266__tar.gz → 0.5.268__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.266 → code_coordinator-0.5.268}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/code_coordinator.egg-info/scm_version.json +2 -2
  4. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/board_wire.py +131 -18
  5. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/drive.py +117 -8
  6. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/drive_queue.py +23 -9
  7. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/drive_state.py +25 -0
  8. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/serve_app.py +39 -0
  9. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/scripts/codegen.py +22 -7
  10. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_board_read_path.py +8 -7
  11. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_board_wire.py +96 -6
  12. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_drive.py +65 -0
  13. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_drive_queue.py +17 -0
  14. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_drive_state.py +38 -0
  15. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tui/src/app/data.rs +31 -16
  16. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tui/src/app/drive_queue.rs +34 -8
  17. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tui/src/app/pipeline.rs +33 -12
  18. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tui/src/app/sessions.rs +31 -2
  19. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tui/src/app/settings_ui.rs +8 -5
  20. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tui/src/app/tests.rs +304 -0
  21. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tui/src/app/types/generated.rs +9 -6
  22. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/.claude/commands/board.md +0 -0
  23. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/.claude/commands/complete-session.md +0 -0
  24. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/.claude/commands/coordinator.md +0 -0
  25. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/.githooks/_lib.sh +0 -0
  26. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/.githooks/post-checkout +0 -0
  27. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/.githooks/post-commit +0 -0
  28. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/.githooks/post-merge +0 -0
  29. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  30. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/.github/coord-ci-acceptance.yml +0 -0
  31. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/.github/workflows/auto-release.yml +0 -0
  32. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/.github/workflows/cargo-test.yml +0 -0
  33. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/.github/workflows/publish.yml +0 -0
  34. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/.github/workflows/release-tui.yml +0 -0
  35. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/.github/workflows/test.yml +0 -0
  36. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/.gitignore +0 -0
  37. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/CLAUDE.md +0 -0
  38. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/GOAL.md +0 -0
  39. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/LICENSE +0 -0
  40. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/MANIFEST.in +0 -0
  41. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/README.md +0 -0
  42. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/code_coordinator.egg-info/SOURCES.txt +0 -0
  43. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/code_coordinator.egg-info/dependency_links.txt +0 -0
  44. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/code_coordinator.egg-info/entry_points.txt +0 -0
  45. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/code_coordinator.egg-info/requires.txt +0 -0
  46. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/code_coordinator.egg-info/scm_file_list.json +0 -0
  47. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/code_coordinator.egg-info/top_level.txt +0 -0
  48. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/__init__.py +0 -0
  49. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/_board_mapping.py +0 -0
  50. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/acceptance.py +0 -0
  51. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/acceptance_drivers.py +0 -0
  52. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/agent.py +0 -0
  53. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/agent_app.py +0 -0
  54. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/agent_update.py +0 -0
  55. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/agents/opencode/.gitignore +0 -0
  56. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/agents/opencode/agents/work.md +0 -0
  57. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/agents/opencode/routing.jsonc +0 -0
  58. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/approved_work.py +0 -0
  59. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/audit.py +0 -0
  60. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/auto_loop.py +0 -0
  61. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/block_log.py +0 -0
  62. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/board_bool_guard.py +0 -0
  63. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/board_schema.py +0 -0
  64. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/board_service.py +0 -0
  65. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/brain.py +0 -0
  66. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/branch_model.py +0 -0
  67. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/bug_intake.py +0 -0
  68. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/cargo_cache.py +0 -0
  69. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/ci_fix.py +0 -0
  70. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/ci_github.py +0 -0
  71. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/ci_gitlab.py +0 -0
  72. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/ci_store.py +0 -0
  73. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/claim.py +0 -0
  74. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/cli.py +0 -0
  75. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/client.py +0 -0
  76. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/commands/__init__.py +0 -0
  77. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/commands/_common.py +0 -0
  78. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/commands/acceptance.py +0 -0
  79. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/commands/agent_ops.py +0 -0
  80. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/commands/audit.py +0 -0
  81. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/commands/chat.py +0 -0
  82. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/commands/dispatch.py +0 -0
  83. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/commands/dispatch_workers.py +0 -0
  84. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/commands/drive.py +0 -0
  85. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/commands/drive_queue.py +0 -0
  86. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/commands/gate_a.py +0 -0
  87. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/commands/gates.py +0 -0
  88. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/commands/issues.py +0 -0
  89. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/commands/lifecycle.py +0 -0
  90. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/commands/merge.py +0 -0
  91. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/commands/milestone.py +0 -0
  92. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/commands/plan_followup.py +0 -0
  93. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/commands/plans.py +0 -0
  94. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/commands/portal.py +0 -0
  95. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/commands/pr.py +0 -0
  96. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/commands/release.py +0 -0
  97. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/commands/repo.py +0 -0
  98. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/commands/report.py +0 -0
  99. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/commands/review.py +0 -0
  100. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/commands/scorecard.py +0 -0
  101. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/commands/sessions.py +0 -0
  102. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/commands/setup.py +0 -0
  103. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/commands/status.py +0 -0
  104. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/commands/terminal.py +0 -0
  105. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/commands/test_gate.py +0 -0
  106. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/commands/tui.py +0 -0
  107. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/comments.py +0 -0
  108. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/config.py +0 -0
  109. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/config_reload.py +0 -0
  110. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/confirm_test.py +0 -0
  111. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/conflict_fix.py +0 -0
  112. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/dao.py +0 -0
  113. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/dashboard/__init__.py +0 -0
  114. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/dashboard/fixture.py +0 -0
  115. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/dashboard/index.html +0 -0
  116. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/dashboard/server.py +0 -0
  117. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/dashboard/terminal.py +0 -0
  118. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/db.py +0 -0
  119. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/dead_end.py +0 -0
  120. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/decomposition_chat.py +0 -0
  121. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/deploy/README.md +0 -0
  122. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/deploy/coord-agent.service +0 -0
  123. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/deploy/coord-db-backup.service +0 -0
  124. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/deploy/coord-db-backup.sh +0 -0
  125. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/deploy/coord-db-backup.timer +0 -0
  126. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/deploy/coord-drive-queue.service +0 -0
  127. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/deploy/coord-drive-queue.timer +0 -0
  128. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/deploy/coord-failure-notify.service +0 -0
  129. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/deploy/coord-fleet-watchdog.service +0 -0
  130. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/deploy/coord-fleet-watchdog.timer +0 -0
  131. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/deploy/coord-notify.service +0 -0
  132. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/deploy/coord-notify.timer +0 -0
  133. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/deploy/coord-release-propagate.service +0 -0
  134. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/deploy/coord-release-propagate.timer +0 -0
  135. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/deploy/coord-release-window.service +0 -0
  136. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/deploy/coord-release-window.timer +0 -0
  137. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/deploy/coord-serve.service +0 -0
  138. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/deploy/coord-web-dist-build.service +0 -0
  139. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/deploy/coord-web-dist-build.timer +0 -0
  140. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/deploy/coord-web.service +0 -0
  141. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/deploy_manifest.py +0 -0
  142. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/deploy_units.py +0 -0
  143. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/deps.py +0 -0
  144. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/diagnose.py +0 -0
  145. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/dispatch.py +0 -0
  146. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/dist_name.py +0 -0
  147. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/events.py +0 -0
  148. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/failure_class.py +0 -0
  149. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/filelock.py +0 -0
  150. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/fleet_config_health.py +0 -0
  151. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/forge_availability.py +0 -0
  152. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/freshness.py +0 -0
  153. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/gate_a.py +0 -0
  154. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/gate_b.py +0 -0
  155. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/gate_snapshot.py +0 -0
  156. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/gates.py +0 -0
  157. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/github_ops.py +0 -0
  158. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/github_throttle.py +0 -0
  159. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/goal.py +0 -0
  160. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/graph_health.py +0 -0
  161. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/health/__init__.py +0 -0
  162. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/health/aggregate.py +0 -0
  163. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/health/checks/__init__.py +0 -0
  164. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/health/checks/agent_install.py +0 -0
  165. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/health/checks/cargo_targets.py +0 -0
  166. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/health/checks/claude_binary.py +0 -0
  167. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/health/checks/coord_web_ci_pin.py +0 -0
  168. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/health/checks/deploy_lane_facts.py +0 -0
  169. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/health/checks/disk.py +0 -0
  170. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/health/checks/fleet_board.py +0 -0
  171. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  172. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/health/checks/fleet_phantom.py +0 -0
  173. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/health/checks/fleet_unit_drift.py +0 -0
  174. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/health/checks/graph.py +0 -0
  175. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/health/checks/graphify_cli.py +0 -0
  176. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/health/checks/index_lock.py +0 -0
  177. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/health/checks/issues_sync_staleness.py +0 -0
  178. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/health/checks/plan_usage.py +0 -0
  179. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/health/checks/release_cordon.py +0 -0
  180. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/health/checks/repo_state.py +0 -0
  181. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/health/checks/spawned_coord.py +0 -0
  182. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/health/checks/stalled_pipeline.py +0 -0
  183. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/health/checks/timer_active.py +0 -0
  184. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/health/checks/toolchain.py +0 -0
  185. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/health/checks/unit_drift.py +0 -0
  186. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/health/checks/unit_enablement.py +0 -0
  187. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/health/checks/worktrees.py +0 -0
  188. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/health/cli.py +0 -0
  189. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/health/context.py +0 -0
  190. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/health/fleet_snapshot.py +0 -0
  191. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/health/models.py +0 -0
  192. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/health/pypi.py +0 -0
  193. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/health/registry.py +0 -0
  194. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/health/render.py +0 -0
  195. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/health/units.py +0 -0
  196. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/hooks.py +0 -0
  197. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/housekeeping.py +0 -0
  198. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/interactive.py +0 -0
  199. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/issue_store.py +0 -0
  200. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/issues_sync_status.py +0 -0
  201. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/liveness_auditor.py +0 -0
  202. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/machine_pause.py +0 -0
  203. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/merge_queue.py +0 -0
  204. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/milestone_chat.py +0 -0
  205. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/milestone_dispatch.py +0 -0
  206. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/milestone_gate.py +0 -0
  207. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/milestone_order.py +0 -0
  208. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/mock_author.py +0 -0
  209. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/models.py +0 -0
  210. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/network.py +0 -0
  211. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/new_issue_chat.py +0 -0
  212. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/notifier/__init__.py +0 -0
  213. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/notifier/baseline.py +0 -0
  214. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/notifier/cli.py +0 -0
  215. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/notifier/collect.py +0 -0
  216. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/notifier/digest.py +0 -0
  217. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/notifier/models.py +0 -0
  218. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/notifier/predicate.py +0 -0
  219. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/notifier/service.py +0 -0
  220. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/notifier/store.py +0 -0
  221. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/notifier/transport.py +0 -0
  222. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/notify.py +0 -0
  223. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/openapi.py +0 -0
  224. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/overlap_fence.py +0 -0
  225. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/overlap_predict.py +0 -0
  226. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/parentage.py +0 -0
  227. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/parentage_github.py +0 -0
  228. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/pipeline.py +0 -0
  229. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/plan_parser.py +0 -0
  230. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/plans.py +0 -0
  231. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/platform_paths.py +0 -0
  232. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/portal_bridge.py +0 -0
  233. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/portal_store.py +0 -0
  234. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/portal_sync.py +0 -0
  235. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/pr_body_lint.py +0 -0
  236. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/prereqs.py +0 -0
  237. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/progress.py +0 -0
  238. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/providers/__init__.py +0 -0
  239. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/providers/base.py +0 -0
  240. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/providers/claude.py +0 -0
  241. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/providers/claude_pty.py +0 -0
  242. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/providers/opencode.py +0 -0
  243. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/queue_diagnose.py +0 -0
  244. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/reconcile.py +0 -0
  245. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/reconcile_tick.py +0 -0
  246. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/refine_chat.py +0 -0
  247. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/release_cordon.py +0 -0
  248. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/release_propagate.py +0 -0
  249. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/release_verify.py +0 -0
  250. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/release_window.py +0 -0
  251. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/repo_edit.py +0 -0
  252. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/repo_onboard.py +0 -0
  253. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/reports.py +0 -0
  254. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/revalidate.py +0 -0
  255. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/review.py +0 -0
  256. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/scorecard.py +0 -0
  257. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/self_health.py +0 -0
  258. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  259. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  260. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  261. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  262. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  263. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/skills/portal-followup/SKILL.md +0 -0
  264. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/skills/release-now/SKILL.md +0 -0
  265. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  266. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  267. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/skills/update-issue/SKILL.md +0 -0
  268. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/smoke.py +0 -0
  269. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/spend_ceiling.py +0 -0
  270. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/split_work.py +0 -0
  271. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/sql.py +0 -0
  272. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/stage_projection.py +0 -0
  273. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/state.py +0 -0
  274. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/test_author.py +0 -0
  275. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/test_chat.py +0 -0
  276. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/test_orchestrator.py +0 -0
  277. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/test_report.py +0 -0
  278. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/tui_release.py +0 -0
  279. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/usage.py +0 -0
  280. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/usage_limits.py +0 -0
  281. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/usage_rollup.py +0 -0
  282. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coord/worker_events.py +0 -0
  283. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/coordinator.example.yml +0 -0
  284. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/deploy/coord-agent.service +0 -0
  285. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/deploy/coord-db-backup.service +0 -0
  286. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/deploy/coord-db-backup.sh +0 -0
  287. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/deploy/coord-db-backup.timer +0 -0
  288. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/deploy/coord-drive-queue.service +0 -0
  289. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/deploy/coord-drive-queue.timer +0 -0
  290. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/deploy/coord-failure-notify.service +0 -0
  291. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/deploy/coord-failure-notify.sh +0 -0
  292. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/deploy/coord-fleet-watchdog.service +0 -0
  293. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/deploy/coord-fleet-watchdog.timer +0 -0
  294. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/deploy/coord-notify.service +0 -0
  295. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/deploy/coord-notify.timer +0 -0
  296. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/deploy/coord-release-propagate.service +0 -0
  297. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/deploy/coord-release-propagate.timer +0 -0
  298. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/deploy/coord-release-window.service +0 -0
  299. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/deploy/coord-release-window.timer +0 -0
  300. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/deploy/coord-serve.service +0 -0
  301. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/deploy/coord-web-dist-build.service +0 -0
  302. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/deploy/coord-web-dist-build.sh +0 -0
  303. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/deploy/coord-web-dist-build.timer +0 -0
  304. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/deploy/coord-web-rollback.sh +0 -0
  305. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/deploy/coord-web.service +0 -0
  306. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/deploy/node-shim.sh +0 -0
  307. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  308. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/docs/ADR_COORD_WEB_CI.md +0 -0
  309. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/docs/ADR_COORD_WEB_DIST.md +0 -0
  310. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/docs/AGENT_OPERATIONS.md +0 -0
  311. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/docs/ARCHITECTURE.md +0 -0
  312. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/docs/ARCH_SECURITY_GATES.md +0 -0
  313. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/docs/COCKPIT.md +0 -0
  314. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/docs/CONTROL_CENTER.md +0 -0
  315. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/docs/COST_DISCIPLINE.md +0 -0
  316. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/docs/CROSS_PLATFORM.md +0 -0
  317. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/docs/CUSTOMER_FACING_APPS.md +0 -0
  318. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/docs/CUSTOMER_PORTAL.md +0 -0
  319. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/docs/DRIVE_QUEUE.md +0 -0
  320. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/docs/EPHEMERAL_WORKERS.md +0 -0
  321. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/docs/FORGE_MIGRATION.md +0 -0
  322. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/docs/GRAPHIFY_SETUP.md +0 -0
  323. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/docs/ISSUE_GUIDANCE.md +0 -0
  324. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/docs/MAC_MINI.md +0 -0
  325. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  326. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/docs/NOTIFIER.md +0 -0
  327. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/docs/OPENCODE_VERIFICATION.md +0 -0
  328. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/docs/OPERATING_GOTCHAS.md +0 -0
  329. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/docs/OPERATOR_GUIDES.md +0 -0
  330. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/docs/ORACLE_LOOP.md +0 -0
  331. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/docs/PHONE_WEBAPP.md +0 -0
  332. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/docs/PIPELINE_V2.md +0 -0
  333. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/docs/PLATFORM_EVOLUTION.md +0 -0
  334. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/docs/SECOND_BACKEND.md +0 -0
  335. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/docs/STORE_SERVICE.md +0 -0
  336. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  337. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/docs/WEB_CONTROL_CENTER.md +0 -0
  338. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/docs/WSL_WINDOWS_WORKER.md +0 -0
  339. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/docs/mocks/web/README.md +0 -0
  340. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/docs/mocks/web/_tokens.css +0 -0
  341. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/docs/mocks/web/issue-detail.html +0 -0
  342. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/docs/mocks/web/pipeline-narrow.html +0 -0
  343. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/docs/mocks/web/pipeline-wide.html +0 -0
  344. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/graphify-out/.gitignore +0 -0
  345. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/install-agent.sh +0 -0
  346. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/pyproject.toml +0 -0
  347. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/scripts/audit_review_verdict_overrides.py +0 -0
  348. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  349. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/scripts/azure-workers/build-worker-image.sh +0 -0
  350. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/scripts/azure-workers/coordinator-machine.py +0 -0
  351. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/scripts/azure-workers/epic-down.sh +0 -0
  352. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/scripts/azure-workers/epic-up.sh +0 -0
  353. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/scripts/azure-workers/preflight.sh +0 -0
  354. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/scripts/azure-workers/provision-worker.sh +0 -0
  355. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  356. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  357. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/scripts/azure-workers/verify-github-token.sh +0 -0
  358. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/scripts/check_gh_argv_containment.py +0 -0
  359. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/scripts/coord-test-runner.sh +0 -0
  360. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/scripts/coord-venv-rollback.sh +0 -0
  361. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/scripts/drive-batch.sh +0 -0
  362. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/scripts/fleet_watchdog.py +0 -0
  363. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/scripts/gen_board_fixture.py +0 -0
  364. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/scripts/gen_mock_index.py +0 -0
  365. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/scripts/next_release_tag.py +0 -0
  366. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/scripts/run_tests_in_populated_home.sh +0 -0
  367. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/scripts/run_tests_without_gh.sh +0 -0
  368. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/scripts/smoke_437_interactive.py +0 -0
  369. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/scripts/verify_878_review_capture.py +0 -0
  370. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/scripts/verify_release_published.py +0 -0
  371. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/scripts/verify_release_wheel.py +0 -0
  372. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/setup.cfg +0 -0
  373. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/SMOKE_SET.md +0 -0
  374. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/__init__.py +0 -0
  375. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  376. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/acceptance/ms-33/contract.md +0 -0
  377. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/acceptance/ms-33/manifest.yml +0 -0
  378. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  379. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  380. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  381. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  382. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/acceptance/ms-37/conftest.py +0 -0
  383. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/acceptance/ms-37/contract.md +0 -0
  384. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/acceptance/ms-37/manifest.yml +0 -0
  385. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  386. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  387. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/acceptance/ms-38/contract.md +0 -0
  388. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/acceptance/ms-38/manifest.yml +0 -0
  389. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  390. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  391. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  392. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  393. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  394. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  395. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  396. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  397. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  398. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  399. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/acceptance/ms-51/contract.md +0 -0
  400. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  401. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  402. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/acceptance/ms-51/manifest.yml +0 -0
  403. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  404. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/acceptance/ms-51/tsconfig.json +0 -0
  405. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/acceptance/ms-65/board_split_2288.rs +0 -0
  406. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
  407. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
  408. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/acceptance/ms-65/contract.md +0 -0
  409. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
  410. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/acceptance/ms-65/manifest.yml +0 -0
  411. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
  412. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
  413. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
  414. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
  415. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
  416. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
  417. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
  418. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
  419. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
  420. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
  421. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/acceptance/ms-65/tabs_persistence_2286.rs +0 -0
  422. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/acceptance/ms-67/approved_items_2532.rs +0 -0
  423. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/acceptance/ms-67/contract.md +0 -0
  424. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/acceptance/ms-67/manifest.d/2533.yml +0 -0
  425. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/acceptance/ms-67/manifest.yml +0 -0
  426. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/acceptance/ms-67/mocks/approved-items-chat-opened.screen +0 -0
  427. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/acceptance/ms-67/mocks/approved-items-context-menu.screen +0 -0
  428. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/acceptance/ms-67/mocks/approved-items-detail.screen +0 -0
  429. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/acceptance/ms-67/mocks/approved-items-empty.screen +0 -0
  430. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/acceptance/ms-67/mocks/approved-items-populated.screen +0 -0
  431. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/acceptance/ms-67/pull_decomposition_2533.rs +0 -0
  432. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  433. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/conftest.py +0 -0
  434. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/fixtures/board-pipeline-basic.json +0 -0
  435. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  436. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  437. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  438. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  439. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/fixtures/playwright/all_pass.json +0 -0
  440. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  441. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/fixtures/playwright/mixed_fail.json +0 -0
  442. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  443. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  444. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/fixtures/playwright/skip.json +0 -0
  445. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/fixtures/playwright/truncated.json +0 -0
  446. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  447. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  448. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  449. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  450. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  451. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  452. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  453. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  454. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_acceptance.py +0 -0
  455. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_acceptance_drivers.py +0 -0
  456. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_agent.py +0 -0
  457. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_agent_api_error.py +0 -0
  458. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_agent_app.py +0 -0
  459. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_agent_branch_base.py +0 -0
  460. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_agent_branch_capture.py +0 -0
  461. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_agent_config_free_1712.py +0 -0
  462. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_agent_deploy_units_endpoint.py +0 -0
  463. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_agent_dirty_worktree.py +0 -0
  464. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  465. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_agent_graph_self_heal.py +0 -0
  466. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_agent_health_h3.py +0 -0
  467. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_agent_idle_restart.py +0 -0
  468. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_agent_push_failure.py +0 -0
  469. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_agent_reap.py +0 -0
  470. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_agent_repos_and_pull.py +0 -0
  471. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_agent_restart_services_endpoint.py +0 -0
  472. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_agent_skills_self_heal.py +0 -0
  473. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_agent_startup_diagnostics.py +0 -0
  474. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_agent_update.py +0 -0
  475. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_agent_update_bluegreen.py +0 -0
  476. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_agent_usage_limit.py +0 -0
  477. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_agent_zero_commit.py +0 -0
  478. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_ambient_home_isolation.py +0 -0
  479. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_approve_dependency_busy_2804.py +0 -0
  480. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_approve_reject_plan.py +0 -0
  481. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_approve_usage_gate.py +0 -0
  482. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_approved_work_2532.py +0 -0
  483. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_assignment_already_recorded_daemon.py +0 -0
  484. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_audit_log.py +0 -0
  485. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_audit_outcome.py +0 -0
  486. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_audit_query.py +0 -0
  487. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_auto_loop.py +0 -0
  488. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_auto_release_publish_2035.py +0 -0
  489. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_base_checkout_restore.py +0 -0
  490. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_block_log.py +0 -0
  491. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_board_cap_762.py +0 -0
  492. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_board_fixture.py +0 -0
  493. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_board_schema.py +0 -0
  494. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_board_service.py +0 -0
  495. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_board_state.py +0 -0
  496. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_brain.py +0 -0
  497. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_branch_model.py +0 -0
  498. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_bug_intake.py +0 -0
  499. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_build_worker_image_env_update.py +0 -0
  500. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_cargo_cache.py +0 -0
  501. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_check_gh_argv_containment.py +0 -0
  502. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_ci_acceptance_gate_1950.py +0 -0
  503. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_ci_fix.py +0 -0
  504. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_ci_gitlab.py +0 -0
  505. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_ci_parity_2091.py +0 -0
  506. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_ci_store.py +0 -0
  507. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_claim.py +0 -0
  508. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_claude_md_budget.py +0 -0
  509. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_cli_acceptance.py +0 -0
  510. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_cli_assign.py +0 -0
  511. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  512. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_cli_assign_interactive_remote.py +0 -0
  513. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_cli_assign_provider.py +0 -0
  514. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  515. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_cli_audit.py +0 -0
  516. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_cli_chat_continue.py +0 -0
  517. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_cli_decide.py +0 -0
  518. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_cli_diagnose_config_provenance.py +0 -0
  519. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_cli_diagnose_forge_availability.py +0 -0
  520. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_cli_diagnose_graph.py +0 -0
  521. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_cli_diagnose_self.py +0 -0
  522. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_cli_doctor.py +0 -0
  523. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_cli_doctor_config_free_1801.py +0 -0
  524. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  525. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_cli_drive.py +0 -0
  526. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_cli_drive_queue.py +0 -0
  527. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_cli_escalate.py +0 -0
  528. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_cli_fix_headless_review.py +0 -0
  529. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_cli_gate_a.py +0 -0
  530. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_cli_install_drift.py +0 -0
  531. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_cli_install_skills.py +0 -0
  532. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_cli_issue_comment.py +0 -0
  533. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_cli_issue_create_label.py +0 -0
  534. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_cli_issue_reopen.py +0 -0
  535. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_cli_issue_view_list.py +0 -0
  536. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_cli_merge.py +0 -0
  537. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_cli_milestone_assign.py +0 -0
  538. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_cli_milestone_capture.py +0 -0
  539. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_cli_milestone_chat_add_child.py +0 -0
  540. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_cli_milestone_dispatch.py +0 -0
  541. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_cli_milestone_gate_b.py +0 -0
  542. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_cli_milestone_gate_c.py +0 -0
  543. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_cli_milestone_order.py +0 -0
  544. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  545. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_cli_milestone_ship.py +0 -0
  546. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_cli_network.py +0 -0
  547. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_cli_new_issue_chat.py +0 -0
  548. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_cli_plans.py +0 -0
  549. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_cli_portal.py +0 -0
  550. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_cli_pr.py +0 -0
  551. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_cli_pull_artifact.py +0 -0
  552. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_cli_queue.py +0 -0
  553. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_cli_reattach_sessions.py +0 -0
  554. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_cli_refine_board.py +0 -0
  555. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_cli_release_preflight.py +0 -0
  556. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_cli_release_propagate.py +0 -0
  557. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_cli_release_window.py +0 -0
  558. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_cli_repo_2220.py +0 -0
  559. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
  560. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_cli_scorecard.py +0 -0
  561. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_cli_set_review_findings.py +0 -0
  562. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_cli_status_advisory_terminal.py +0 -0
  563. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_cli_status_contested_tag.py +0 -0
  564. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_cli_status_merge_queue.py +0 -0
  565. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_cli_status_provider.py +0 -0
  566. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_cli_status_review_finalizing.py +0 -0
  567. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_cli_status_test_failed_tag.py +0 -0
  568. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_cli_status_usage_limit.py +0 -0
  569. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_cli_sync_comments_873.py +0 -0
  570. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_cli_test_plan.py +0 -0
  571. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_cli_track.py +0 -0
  572. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_cli_tui_update.py +0 -0
  573. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_cli_wait.py +0 -0
  574. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_client_base_install.py +0 -0
  575. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_commands_common.py +0 -0
  576. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_comments.py +0 -0
  577. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_completion_summary.py +0 -0
  578. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_config.py +0 -0
  579. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_config_acceptance.py +0 -0
  580. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_config_audit.py +0 -0
  581. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_config_pricing.py +0 -0
  582. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  583. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_config_usage_gate.py +0 -0
  584. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_confirm_test.py +0 -0
  585. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_conflict_fix.py +0 -0
  586. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_conflict_fix_semantic.py +0 -0
  587. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
  588. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_coord_test.py +0 -0
  589. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_coord_test_runner_baseline.py +0 -0
  590. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_coord_test_runner_populated_home.py +0 -0
  591. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_coord_test_runner_routing.py +0 -0
  592. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_coord_test_runner_toolchain.py +0 -0
  593. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_coord_uat.py +0 -0
  594. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_coord_web_sse_restart_live.py +0 -0
  595. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_coordinator_machine.py +0 -0
  596. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_cross_platform_imports.py +0 -0
  597. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_dao.py +0 -0
  598. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_dashboard.py +0 -0
  599. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_dashboard_fixture.py +0 -0
  600. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_dashboard_terminal.py +0 -0
  601. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_dashboard_terminal_live.py +0 -0
  602. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_db.py +0 -0
  603. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_dead_end.py +0 -0
  604. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_decomposition_chat.py +0 -0
  605. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_deploy_coord_db_backup.py +0 -0
  606. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_deploy_coord_web_dist.py +0 -0
  607. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_deploy_coord_web_rollback.py +0 -0
  608. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_deploy_drive_queue_unit.py +0 -0
  609. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_deploy_failure_notify_unit.py +0 -0
  610. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_deploy_manifest.py +0 -0
  611. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_deploy_notify_unit.py +0 -0
  612. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_deploy_units_lane.py +0 -0
  613. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_deploy_web_unit.py +0 -0
  614. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_deps.py +0 -0
  615. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_diagnose.py +0 -0
  616. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_dispatch.py +0 -0
  617. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_dispatch_target_validation.py +0 -0
  618. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_dist_name.py +0 -0
  619. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_done_housekeeping.py +0 -0
  620. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_drive_queue_blocked_rendering.py +0 -0
  621. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_drive_queue_launch_argv.py +0 -0
  622. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
  623. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_drive_queue_roll_pending.py +0 -0
  624. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
  625. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_drive_tmux.py +0 -0
  626. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_epic_up_capability_detection.py +0 -0
  627. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  628. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_epic_up_image_provenance.py +0 -0
  629. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_errors.py +0 -0
  630. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_events.py +0 -0
  631. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_failure_class.py +0 -0
  632. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_filelock.py +0 -0
  633. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  634. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_fix_of_force_override.py +0 -0
  635. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_fleet_config_health.py +0 -0
  636. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_fleet_health_probes.py +0 -0
  637. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_fleet_health_snapshot.py +0 -0
  638. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_fleet_watchdog.py +0 -0
  639. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_forge_availability.py +0 -0
  640. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_freshness.py +0 -0
  641. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_gate_a.py +0 -0
  642. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_gate_b.py +0 -0
  643. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_gate_snapshot_staleness.py +0 -0
  644. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_gates.py +0 -0
  645. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  646. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_gen_mock_index.py +0 -0
  647. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_generated_rust_fixture.py +0 -0
  648. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_generated_types_fixture.py +0 -0
  649. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_github_ops.py +0 -0
  650. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_github_throttle.py +0 -0
  651. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_goal.py +0 -0
  652. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_graph_health.py +0 -0
  653. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_graph_selfheal_absent_2237.py +0 -0
  654. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_handoff.py +0 -0
  655. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_health_checks.py +0 -0
  656. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_health_cli.py +0 -0
  657. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_health_cli_graph.py +0 -0
  658. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_health_config.py +0 -0
  659. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_health_context.py +0 -0
  660. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_health_coord_web_ci_pin.py +0 -0
  661. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_health_deploy_lane_facts.py +0 -0
  662. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_health_fix.py +0 -0
  663. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_health_incident_regression.py +0 -0
  664. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_health_issues_sync_staleness.py +0 -0
  665. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_health_pypi.py +0 -0
  666. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_health_registry.py +0 -0
  667. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_health_release_cordon_probe.py +0 -0
  668. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_health_timer_active.py +0 -0
  669. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_health_toolchain.py +0 -0
  670. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_health_unit_drift.py +0 -0
  671. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_health_unit_enablement.py +0 -0
  672. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_hooks.py +0 -0
  673. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_human_attended_437.py +0 -0
  674. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_init.py +0 -0
  675. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_integration.py +0 -0
  676. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_interactive_briefing_echo.py +0 -0
  677. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_interactive_pane_log_2541.py +0 -0
  678. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_interactive_prefill_state.py +0 -0
  679. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_interactive_session_relaunch.py +0 -0
  680. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_interactive_test_verdict_backstop.py +0 -0
  681. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_interactive_token_attribution.py +0 -0
  682. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_interactive_worktree.py +0 -0
  683. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_issue_store_seam.py +0 -0
  684. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_issues_sync_status.py +0 -0
  685. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_liveness_auditor.py +0 -0
  686. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_liveness_notify.py +0 -0
  687. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_lock_contention_ratchet.py +0 -0
  688. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_machine_pause.py +0 -0
  689. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_merge_queue.py +0 -0
  690. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_merge_verify.py +0 -0
  691. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_milestone_chat.py +0 -0
  692. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_milestone_dispatch.py +0 -0
  693. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_milestone_gate.py +0 -0
  694. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_milestone_order.py +0 -0
  695. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_milestone_seam.py +0 -0
  696. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_mock_author.py +0 -0
  697. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_model_tiering.py +0 -0
  698. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_models.py +0 -0
  699. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_models_config_labels.py +0 -0
  700. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_needs_attention.py +0 -0
  701. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_network.py +0 -0
  702. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_new_issue_chat.py +0 -0
  703. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_next_release_tag.py +0 -0
  704. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_node_shim.py +0 -0
  705. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_notifier_baseline.py +0 -0
  706. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_notifier_cli.py +0 -0
  707. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_notifier_collect.py +0 -0
  708. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_notifier_config.py +0 -0
  709. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_notifier_drive_seam.py +0 -0
  710. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_notifier_isolation.py +0 -0
  711. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_notifier_predicate.py +0 -0
  712. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_notifier_quiet_hours.py +0 -0
  713. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_notifier_service.py +0 -0
  714. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_notify.py +0 -0
  715. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_notify_drain.py +0 -0
  716. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_openapi.py +0 -0
  717. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_operational_defaults.py +0 -0
  718. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_overlap_fence.py +0 -0
  719. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_overlap_predict.py +0 -0
  720. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_packaged_deploy_units.py +0 -0
  721. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_parentage.py +0 -0
  722. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_paste_landed.py +0 -0
  723. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
  724. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_pipeline.py +0 -0
  725. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_plan_followup_approve_plan_command.py +0 -0
  726. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_plan_followup_pr_command.py +0 -0
  727. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_plan_followup_review_command.py +0 -0
  728. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_plan_only.py +0 -0
  729. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_plan_parser.py +0 -0
  730. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_platform_paths.py +0 -0
  731. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_portal_bridge.py +0 -0
  732. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_portal_config.py +0 -0
  733. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_portal_store.py +0 -0
  734. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_portal_sync.py +0 -0
  735. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_pr_body_lint.py +0 -0
  736. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_prereqs.py +0 -0
  737. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_production_db_guard.py +0 -0
  738. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_progress.py +0 -0
  739. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_provider_seam.py +0 -0
  740. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_providers.py +0 -0
  741. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_providers_config_labels.py +0 -0
  742. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_providers_pty.py +0 -0
  743. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_quiet_hours.py +0 -0
  744. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_quiet_hours_store_2146.py +0 -0
  745. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_reap_merged_sessions.py +0 -0
  746. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_reap_stale_interactive_tick.py +0 -0
  747. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_reconcile.py +0 -0
  748. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_reconcile_branch.py +0 -0
  749. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_reconcile_completions.py +0 -0
  750. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
  751. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_reconcile_merges.py +0 -0
  752. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_reconcile_no_agent_record.py +0 -0
  753. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_reconcile_tick.py +0 -0
  754. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_reconcile_usage_limit_done.py +0 -0
  755. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_refine_chat.py +0 -0
  756. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_release_cordon_2101.py +0 -0
  757. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  758. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_release_cordon_deadlock_2240.py +0 -0
  759. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_release_cordon_stuck_2490.py +0 -0
  760. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_release_propagate.py +0 -0
  761. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_release_propagate_threshold.py +0 -0
  762. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_release_roll_between_legs_2854.py +0 -0
  763. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_release_roll_window_handoff.py +0 -0
  764. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_release_unified_1242.py +0 -0
  765. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_release_verify.py +0 -0
  766. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_release_window.py +0 -0
  767. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_remote_auto_prune.py +0 -0
  768. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_remote_interactive_reaper.py +0 -0
  769. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_repo_add.py +0 -0
  770. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_repo_edit_2220.py +0 -0
  771. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_repo_graph_fleet_2237.py +0 -0
  772. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_repo_onboard_2220.py +0 -0
  773. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_report_result_push.py +0 -0
  774. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_reports.py +0 -0
  775. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_retry.py +0 -0
  776. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_retry_advisory_1606.py +0 -0
  777. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_retry_type_1636.py +0 -0
  778. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_revalidate.py +0 -0
  779. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_review.py +0 -0
  780. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_review_end_review_without_verdict.py +0 -0
  781. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_review_parse_failure_diagnostic.py +0 -0
  782. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_review_reaffirm.py +0 -0
  783. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_review_state.py +0 -0
  784. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_review_verdict_backstop.py +0 -0
  785. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_review_verdict_override_audit.py +0 -0
  786. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_review_verdict_relay.py +0 -0
  787. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_review_zero_commits.py +0 -0
  788. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_scoped_review_wiring.py +0 -0
  789. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_scorecard.py +0 -0
  790. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_self_health.py +0 -0
  791. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_serve.py +0 -0
  792. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_serve_app_board_trim.py +0 -0
  793. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_session.py +0 -0
  794. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_slice_issue_attribution.py +0 -0
  795. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_smoke.py +0 -0
  796. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_smoke_live_checkout_restore.py +0 -0
  797. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_smoke_workflow.py +0 -0
  798. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_spend_ceiling.py +0 -0
  799. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_spend_ceiling_coordinator.py +0 -0
  800. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_split.py +0 -0
  801. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_split_work.py +0 -0
  802. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_sql_dialect.py +0 -0
  803. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_stage_projection.py +0 -0
  804. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_stalled_pipeline.py +0 -0
  805. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_state.py +0 -0
  806. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_state_review_findings_daemon.py +0 -0
  807. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_status_fleet_footer.py +0 -0
  808. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_stop_1567.py +0 -0
  809. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_store_contract.py +0 -0
  810. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_stuck.py +0 -0
  811. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
  812. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_terminal_command.py +0 -0
  813. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_test_author.py +0 -0
  814. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_test_chat.py +0 -0
  815. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_test_orchestrator.py +0 -0
  816. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_test_report.py +0 -0
  817. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_test_verdict_parsing.py +0 -0
  818. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_test_verdict_transcript_floor.py +0 -0
  819. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_text_io_encoding_audit.py +0 -0
  820. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_thin_client_board_audit.py +0 -0
  821. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_thin_client_config_load_1080.py +0 -0
  822. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_thin_client_daemon_routing_906.py +0 -0
  823. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_tmux_host.py +0 -0
  824. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_tmux_session.py +0 -0
  825. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_transcript_floor.py +0 -0
  826. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_usage.py +0 -0
  827. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_usage_limits.py +0 -0
  828. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_usage_rollup.py +0 -0
  829. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_venv_live_install_2121.py +0 -0
  830. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_version_single_source.py +0 -0
  831. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_watch.py +0 -0
  832. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  833. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_worker_env_venv_isolation.py +0 -0
  834. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_worker_events.py +0 -0
  835. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_worker_image_pin_sync.py +0 -0
  836. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_worker_safety.py +0 -0
  837. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_worker_test_scoping.py +0 -0
  838. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_worktree.py +0 -0
  839. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  840. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tui/Cargo.lock +0 -0
  841. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tui/Cargo.toml +0 -0
  842. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tui/cargo-config-local-quadraui.toml.example +0 -0
  843. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tui/src/app/approved.rs +0 -0
  844. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tui/src/app/audit.rs +0 -0
  845. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tui/src/app/chat.rs +0 -0
  846. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tui/src/app/dialogs.rs +0 -0
  847. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tui/src/app/doc_tabs.rs +0 -0
  848. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tui/src/app/drive.rs +0 -0
  849. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tui/src/app/escalation.rs +0 -0
  850. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tui/src/app/events.rs +0 -0
  851. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tui/src/app/fixtures.rs +0 -0
  852. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tui/src/app/fleet_health.rs +0 -0
  853. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tui/src/app/fleet_sessions.rs +0 -0
  854. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tui/src/app/fleet_terminals.rs +0 -0
  855. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tui/src/app/format.rs +0 -0
  856. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tui/src/app/milestone_dag.rs +0 -0
  857. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tui/src/app/mod.rs +0 -0
  858. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tui/src/app/msv.rs +0 -0
  859. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tui/src/app/plans.rs +0 -0
  860. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tui/src/app/render.rs +0 -0
  861. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tui/src/app/reports.rs +0 -0
  862. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tui/src/app/sidebar.rs +0 -0
  863. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tui/src/app/terminal.rs +0 -0
  864. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tui/src/app/types.rs +0 -0
  865. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tui/src/app/workspace.rs +0 -0
  866. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tui/src/bin/gtk.rs +0 -0
  867. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tui/src/commands.rs +0 -0
  868. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tui/src/lib.rs +0 -0
  869. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tui/src/main.rs +0 -0
  870. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tui/src/settings.rs +0 -0
  871. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tui/tests/acceptance.rs +0 -0
  872. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/tui/tests/cli.rs +0 -0
  873. {code_coordinator-0.5.266 → code_coordinator-0.5.268}/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.266
3
+ Version: 0.5.268
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.266
3
+ Version: 0.5.268
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.266",
2
+ "tag": "0.5.268",
3
3
  "distance": 0,
4
- "node": "g23c969e54007ec14987e0a9980c5163bfa5f4e75",
4
+ "node": "gf1fb3361f55813adaa28edcc31c2b9a1b6a20836",
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]]:
@@ -587,6 +587,14 @@ class Action:
587
587
  # the work row's own last attempt reported, or `_decide_merge` would
588
588
  # diagnose one PR using the other PR's gates.
589
589
  merge_scope: str = "work"
590
+ # #2871: an explicit ``(event_type, summary, details)`` for `Driver._loop`
591
+ # to write via `_record_drive_audit`, independent of whatever this Action
592
+ # otherwise does (WAIT/RUN/EXIT). `decide()` stays a pure function of its
593
+ # inputs — it hands back *what happened*, never writes the audit log
594
+ # itself — while still letting a poll that neither dispatches nor exits
595
+ # (e.g. bypassing a stale pre-dispatch refusal) leave a durable trail
596
+ # instead of only a run-log line nobody queries later.
597
+ audit_event: tuple[str, str, dict[str, Any]] | None = None
590
598
 
591
599
  @property
592
600
  def is_exit(self) -> bool:
@@ -605,6 +613,44 @@ def _die(message: str, exit_code: int = EXIT_TERMINAL_FAILURE) -> Action:
605
613
  return Action(kind=EXIT, message=message, exit_code=exit_code)
606
614
 
607
615
 
616
+ def _format_age(seconds: float) -> str:
617
+ """Coarse human age ('38m', '15h', '1.2d') for a pre-dispatch audit note.
618
+
619
+ Deliberately not the CLI's full relative-time renderer — this is one
620
+ field inside an audit `summary`/`details`, not a UI surface, so a small
621
+ self-contained formatter is enough (#2871).
622
+ """
623
+ seconds = max(0.0, seconds)
624
+ if seconds < 3600:
625
+ return f"{int(seconds // 60)}m"
626
+ if seconds < 86400:
627
+ return f"{seconds / 3600:.0f}h"
628
+ return f"{seconds / 86400:.1f}d"
629
+
630
+
631
+ def _refused_policy_is_stale(state: IssueState) -> bool:
632
+ """True when a terminal ``refused_policy`` work row no longer describes
633
+ the issue as it stands now (#2871).
634
+
635
+ A worker refuses pre-dispatch work exactly once, correctly, for the ask
636
+ it was shown — the refusal says nothing about a DIFFERENT ask on the same
637
+ issue number. If the issue was retargeted (title rewritten) after that
638
+ row finished, the branch it would have produced (workers name branches
639
+ ``issue-{N}-{slugify(title)}`` at dispatch time, see
640
+ ``coord.agent``'s ``branch_name`` construction) no longer matches what a
641
+ fresh dispatch would name — that mismatch is the signal a retarget
642
+ happened. Conservative on every uncertainty (no branch recorded, no
643
+ title resolved): returns ``False`` — i.e. still treated as blocking —
644
+ rather than risk waving a genuinely-unresolved refusal through.
645
+ """
646
+ if not state.work_branch or not state.issue_title:
647
+ return False
648
+ from coord.agent import _slugify # noqa: PLC0415
649
+
650
+ expected_branch = f"issue-{state.issue}-{_slugify(state.issue_title)}"
651
+ return state.work_branch != expected_branch
652
+
653
+
608
654
  # ── oracle-loop JIT slice authoring (#1453) ─────────────────────────────────
609
655
 
610
656
 
@@ -2036,8 +2082,58 @@ def decide(
2036
2082
  # deliverable was a doc edit, which CLAUDE.md itself tells a worker
2037
2083
  # to refuse and stop rather than attempt). Unlike an ADVISORY 0-commit
2038
2084
  # exit, retrying changes nothing — the rule this worker cited is not
2039
- # going anywhere — so this is a `_die()` exactly like every other
2040
- # terminal branch here, but the message embeds
2085
+ # going anywhere — UNLESS the issue itself has since changed.
2086
+ #
2087
+ # #2871: a refusal is a verdict on the ASK the worker was shown, not
2088
+ # a standing veto on the issue NUMBER forever. `coord/claim.py`'s
2089
+ # `find_work_claim` never even sees this row (it's terminal, so it
2090
+ # lives in `board.completed`) — the reason a stale refusal blocks
2091
+ # every later drive is entirely HERE: `work_aid`/`work_status` above
2092
+ # are the latest work-like row for this issue regardless of how old
2093
+ # or how differently-scoped it is, so a fresh `coord drive` launch
2094
+ # reads the fossil row as "this run's" state before ever reaching
2095
+ # `_dispatch_work_stage`. If the issue was retargeted (title
2096
+ # rewritten) after this row finished, `_refused_policy_is_stale`
2097
+ # detects it — the old refusal no longer describes what a fresh
2098
+ # dispatch would even be asked to do — and this bypasses the veto
2099
+ # instead of dying again on the SAME prose a fresh worker never
2100
+ # produced this run (CC#916).
2101
+ age_seconds = (
2102
+ time.time() - state.work_finished_at
2103
+ if state.work_finished_at is not None
2104
+ else None
2105
+ )
2106
+ age = _format_age(age_seconds) if age_seconds is not None else "unknown age"
2107
+ if _refused_policy_is_stale(state):
2108
+ bypass_summary = (
2109
+ f"pre-dispatch: bypassing stale refused_policy assignment "
2110
+ f"{state.work_aid} ({age} old) on issue {state.repo}#{state.issue} "
2111
+ f"— retargeted since (branch {state.work_branch!r} no longer "
2112
+ "matches the issue's current title); dispatching fresh work (#2871)"
2113
+ )
2114
+ dispatch = _dispatch_work_stage(
2115
+ state, opts, counters, machine, oracle, gate_checker, verifier
2116
+ )
2117
+ return replace(
2118
+ dispatch,
2119
+ audit_event=(
2120
+ "refused_policy_stale",
2121
+ bypass_summary,
2122
+ {
2123
+ "stale_assignment_id": state.work_aid,
2124
+ "stale_branch": state.work_branch,
2125
+ "age_seconds": age_seconds,
2126
+ },
2127
+ ),
2128
+ )
2129
+ # Still genuinely blocking: `_die()` exactly like every other
2130
+ # terminal branch here, but the message now says explicitly that
2131
+ # THIS run refused pre-dispatch on an OLD row (naming it and its
2132
+ # age) rather than reading as a fresh worker refusing again — and
2133
+ # names the remedy that actually clears it (#2871: retargeting is
2134
+ # what makes the branch above fire on the next drive; `coord
2135
+ # drive-queue remove`+`add` alone does nothing, since the queue row
2136
+ # was never what was blocking). The message still embeds
2041
2137
  # `POLICY_REFUSAL_MARKER`: `coord/drive_queue.py`'s
2042
2138
  # `_reconcile_running` recognises that marker in this run's own
2043
2139
  # `drive_exited` audit summary and parks the queue entry
@@ -2046,12 +2142,16 @@ def decide(
2046
2142
  # principle #1844 already applies pre-dispatch, applied here
2047
2143
  # post-dispatch.
2048
2144
  return _die(
2049
- f"work {state.work_aid} refused on a standing repo-rule "
2050
- "prohibition rather than doing the dispatched work — the worker "
2051
- "did the CORRECT thing (#2234). Needs the coordinator: do the "
2052
- "work directly (or re-scope the issue so its deliverable isn't "
2053
- f"coordinator-only), then `coord drive-queue remove {state.repo} "
2054
- f"{state.issue}` once handled.\n"
2145
+ f"pre-dispatch refusal on assignment {state.work_aid} "
2146
+ f"(refused_policy, {age} old) — work refused on a standing "
2147
+ "repo-rule prohibition rather than doing the dispatched work; "
2148
+ "the worker did the CORRECT thing (#2234). Needs the "
2149
+ "coordinator: do the work directly, OR retarget the issue "
2150
+ "(rewrite its title so the deliverable matches what should "
2151
+ "actually be dispatched) — the next `coord drive` detects the "
2152
+ "retarget and dispatches fresh work automatically (#2871), so "
2153
+ f"`coord drive-queue remove {state.repo} {state.issue}` + `add` "
2154
+ "then genuinely clears this once the issue is retargeted.\n"
2055
2155
  f" inspect: coord log {state.work_aid} --machine "
2056
2156
  f"{state.work_machine or machine}\n"
2057
2157
  f" {POLICY_REFUSAL_MARKER}"
@@ -4680,6 +4780,15 @@ class Driver:
4680
4780
  for warning in action.warnings:
4681
4781
  self.warn(warning)
4682
4782
 
4783
+ # #2871: `decide()` stays a pure function of its inputs — it
4784
+ # cannot write the audit log itself — so an Action that carries
4785
+ # its own audit note (e.g. bypassing a stale pre-dispatch
4786
+ # refusal) gets recorded here, the one place this loop already
4787
+ # writes durable `drive_*` audit rows.
4788
+ if action.audit_event is not None:
4789
+ event_type, summary, details = action.audit_event
4790
+ self._record_drive_audit(event_type, summary, details=details)
4791
+
4683
4792
  # #2443: self-heal — see `_self_heal_drift_message`. Tracked off
4684
4793
  # the Action's own `label`, NOT `fingerprint` above: a WAIT can
4685
4794
  # (and, in the #2286 shape, does) repeat the identical reason
@@ -3107,18 +3107,32 @@ def _reconcile_running(
3107
3107
  # _decide` marks a `refused_policy` work row with `POLICY_REFUSAL_
3108
3108
  # MARKER` (coord.models) rather than `EXIT_DISPATCH_REFUSED`, so this is
3109
3109
  # checked purely off `own_reason` text, independent of `exit_refused`.
3110
- # Unlike #2063 this NEVER self-clears — a policy refusal names a
3111
- # STANDING rule, not a pending verdict — so it deliberately does not get
3112
- # the "queue resumes it automatically" wording Gate-A's park does; see
3113
- # `plan_tick`'s pre-pass below, which recognises this same marker and
3114
- # leaves the entry parked rather than falling through to the CI-park
3115
- # auto-resume. An operator clears it exactly like a `blocked` entry:
3116
- # handle it, then `coord drive-queue remove`.
3110
+ # Unlike #2063 this does not self-clear on its own timer — a policy
3111
+ # refusal names a STANDING rule, not a pending verdict — so it
3112
+ # deliberately does not get the "queue resumes it automatically" wording
3113
+ # Gate-A's park does; see `plan_tick`'s pre-pass below, which recognises
3114
+ # this same marker and leaves the entry parked rather than falling
3115
+ # through to the CI-park auto-resume.
3116
+ #
3117
+ # #2871: the precondition IS an operator action, but it is a RETARGET
3118
+ # (rewrite the issue so its deliverable isn't the coordinator-only thing
3119
+ # that got refused), not queue surgery. Before #2871, `coord.drive.
3120
+ # decide()` re-read the SAME stale `refused_policy` row on every relaunch
3121
+ # regardless of what the issue said by then, so `remove`+`add` looked
3122
+ # like the fix but did nothing — a fresh queue row, same blocking
3123
+ # assignment. `decide()` now compares that row's branch against the
3124
+ # issue's CURRENT title-derived slug (`_refused_policy_is_stale`) and
3125
+ # bypasses a stale refusal instead of dying on it again, so `remove`+
3126
+ # `add` (or any later relaunch) genuinely works — but only once the
3127
+ # retarget has actually happened.
3117
3128
  if own_reason and is_policy_refusal_reason(own_reason):
3118
3129
  reason = (
3119
3130
  f"{own_reason} — parking without spending an attempt (#2234); "
3120
- "needs the coordinator, not a relaunch — `coord drive-queue "
3121
- "remove` once handled"
3131
+ "needs the coordinator, not a relaunch — retarget the issue "
3132
+ "(rewrite its title so the deliverable isn't coordinator-only), "
3133
+ "then `coord drive-queue remove`+`add` (or just relaunch "
3134
+ "`coord drive`) — it now detects the retarget and dispatches "
3135
+ "fresh work automatically (#2871)"
3122
3136
  )
3123
3137
  return (
3124
3138
  Reconcile(
@@ -111,6 +111,13 @@ class IssueState:
111
111
  work_acceptance_state: str = ""
112
112
  work_acceptance_reason: str = ""
113
113
  work_acceptance_sha: str = ""
114
+ # #2871: when the work row went terminal — ``None`` for a row still
115
+ # running/pending or predating this column. Paired with `issue_title`
116
+ # below so `decide()` can tell a genuinely-still-blocking
117
+ # `refused_policy` row apart from one whose issue was retargeted
118
+ # (title rewritten) after it finished, and can name the row's age in
119
+ # whatever it reports instead of silently re-quoting stale prose.
120
+ work_finished_at: float | None = None
114
121
 
115
122
  review_aid: str = ""
116
123
  review_status: str = ""
@@ -181,6 +188,13 @@ class IssueState:
181
188
  # `oracle:exempt`/`manifest.exempt` opt-out for the trust gate
182
189
  # (`AcceptanceGateChecker.is_issue_exempt`) without a second board scan.
183
190
  issue_labels: tuple[str, ...] = ()
191
+ # #2871: this issue's CURRENT GitHub title — resolved from the same
192
+ # `/board` `issues` row `issue_labels` is, no extra I/O. Compared
193
+ # against a terminal `refused_policy` work row's branch (workers name
194
+ # branches `issue-{N}-{slugify(title)}` at dispatch time) to detect a
195
+ # retarget: an issue whose deliverable was rewritten after the worker
196
+ # refused no longer matches the branch that refusal was about.
197
+ issue_title: str = ""
184
198
 
185
199
  # The JIT slice's own `type="test-author"` assignment (#1171: keyed on
186
200
  # `for_issue_number == issue`, NOT `issue_number` — that field is the
@@ -355,6 +369,13 @@ def project(payload: dict, repo: str, issue: int, config: Any) -> IssueState:
355
369
  return default if value is None else value
356
370
 
357
371
  exit_code = (work or {}).get("exit_code")
372
+ finished_at_raw = (work or {}).get("finished_at")
373
+ try:
374
+ work_finished_at = (
375
+ float(finished_at_raw) if finished_at_raw is not None else None
376
+ )
377
+ except (TypeError, ValueError):
378
+ work_finished_at = None
358
379
 
359
380
  # #1453: oracle-loop JIT slice resolution — both reads are over data
360
381
  # already published on /board, no extra I/O (see IssueState's docstring
@@ -368,10 +389,12 @@ def project(payload: dict, repo: str, issue: int, config: Any) -> IssueState:
368
389
  # instead of discovering a mismatch only when #1711's dispatch-time
369
390
  # guard refuses it. No extra I/O: `issues` is already part of *payload*.
370
391
  issue_labels: list[str] = []
392
+ issue_title = ""
371
393
  for oi in payload.get("issues") or []:
372
394
  if oi.get("repo_name") == repo and oi.get("number") == issue:
373
395
  milestone_number = oi.get("milestone_number")
374
396
  issue_labels = list(oi.get("labels") or [])
397
+ issue_title = oi.get("title") or ""
375
398
  break
376
399
 
377
400
  milestone_tracking_issue = None
@@ -451,6 +474,7 @@ def project(payload: dict, repo: str, issue: int, config: Any) -> IssueState:
451
474
  work_acceptance_state=g(work, "acceptance_state"),
452
475
  work_acceptance_reason=g(work, "acceptance_reason"),
453
476
  work_acceptance_sha=g(work, "acceptance_sha"),
477
+ work_finished_at=work_finished_at,
454
478
  review_aid=g(review, "assignment_id"),
455
479
  review_status=g(review, "status"),
456
480
  review_verdict=g(review, "review_verdict"),
@@ -472,6 +496,7 @@ def project(payload: dict, repo: str, issue: int, config: Any) -> IssueState:
472
496
  milestone_number=milestone_number,
473
497
  milestone_tracking_issue=milestone_tracking_issue,
474
498
  issue_labels=tuple(issue_labels),
499
+ issue_title=issue_title,
475
500
  # #2024: the per-issue Test-stage policy, off the labels already read
476
501
  # above (no extra I/O). `test_mode_from_labels` is the same function
477
502
  # `coord.state._get_issue_test_mode_local` uses, so the driver and the
@@ -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(