code-coordinator 0.5.266__tar.gz → 0.5.267__tar.gz

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