code-coordinator 0.5.235__tar.gz → 0.5.237__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 (817) hide show
  1. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/code_coordinator.egg-info/SOURCES.txt +2 -0
  4. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/code_coordinator.egg-info/scm_file_list.json +2 -0
  5. code_coordinator-0.5.237/code_coordinator.egg-info/scm_version.json +8 -0
  6. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/acceptance.py +38 -4
  7. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/agent.py +125 -0
  8. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/commands/portal.py +50 -0
  9. code_coordinator-0.5.237/coord/decomposition_chat.py +260 -0
  10. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_acceptance.py +109 -1
  11. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_portal.py +55 -0
  12. code_coordinator-0.5.237/tests/test_decomposition_chat.py +259 -0
  13. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/src/app/approved.rs +227 -0
  14. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/src/app/dialogs.rs +207 -0
  15. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/src/app/events.rs +21 -0
  16. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/src/app/fixtures.rs +1 -0
  17. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/src/app/mod.rs +33 -0
  18. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/src/app/settings_ui.rs +10 -0
  19. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/src/app/sidebar.rs +6 -0
  20. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/src/app/tests.rs +21 -0
  21. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/src/app/types.rs +8 -0
  22. code_coordinator-0.5.235/code_coordinator.egg-info/scm_version.json +0 -8
  23. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/.claude/commands/board.md +0 -0
  24. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/.claude/commands/complete-session.md +0 -0
  25. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/.claude/commands/coordinator.md +0 -0
  26. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/.githooks/_lib.sh +0 -0
  27. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/.githooks/post-checkout +0 -0
  28. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/.githooks/post-commit +0 -0
  29. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/.githooks/post-merge +0 -0
  30. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  31. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/.github/coord-ci-acceptance.yml +0 -0
  32. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/.github/workflows/auto-release.yml +0 -0
  33. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/.github/workflows/cargo-test.yml +0 -0
  34. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/.github/workflows/publish.yml +0 -0
  35. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/.github/workflows/release-tui.yml +0 -0
  36. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/.github/workflows/test.yml +0 -0
  37. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/.gitignore +0 -0
  38. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/CLAUDE.md +0 -0
  39. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/GOAL.md +0 -0
  40. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/LICENSE +0 -0
  41. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/MANIFEST.in +0 -0
  42. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/README.md +0 -0
  43. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/code_coordinator.egg-info/dependency_links.txt +0 -0
  44. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/code_coordinator.egg-info/entry_points.txt +0 -0
  45. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/code_coordinator.egg-info/requires.txt +0 -0
  46. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/code_coordinator.egg-info/top_level.txt +0 -0
  47. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/__init__.py +0 -0
  48. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/_board_mapping.py +0 -0
  49. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/acceptance_drivers.py +0 -0
  50. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/agent_app.py +0 -0
  51. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/agent_update.py +0 -0
  52. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/agents/opencode/.gitignore +0 -0
  53. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/agents/opencode/agents/work.md +0 -0
  54. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/agents/opencode/routing.jsonc +0 -0
  55. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/approved_work.py +0 -0
  56. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/audit.py +0 -0
  57. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/auto_loop.py +0 -0
  58. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/block_log.py +0 -0
  59. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/board_bool_guard.py +0 -0
  60. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/board_service.py +0 -0
  61. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/board_wire.py +0 -0
  62. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/brain.py +0 -0
  63. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/branch_model.py +0 -0
  64. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/bug_intake.py +0 -0
  65. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/cargo_cache.py +0 -0
  66. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/ci_fix.py +0 -0
  67. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/ci_github.py +0 -0
  68. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/ci_gitlab.py +0 -0
  69. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/ci_store.py +0 -0
  70. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/claim.py +0 -0
  71. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/cli.py +0 -0
  72. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/client.py +0 -0
  73. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/commands/__init__.py +0 -0
  74. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/commands/_common.py +0 -0
  75. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/commands/acceptance.py +0 -0
  76. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/commands/agent_ops.py +0 -0
  77. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/commands/audit.py +0 -0
  78. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/commands/chat.py +0 -0
  79. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/commands/dispatch.py +0 -0
  80. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/commands/dispatch_workers.py +0 -0
  81. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/commands/drive.py +0 -0
  82. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/commands/drive_queue.py +0 -0
  83. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/commands/gate_a.py +0 -0
  84. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/commands/gates.py +0 -0
  85. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/commands/issues.py +0 -0
  86. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/commands/lifecycle.py +0 -0
  87. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/commands/merge.py +0 -0
  88. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/commands/milestone.py +0 -0
  89. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/commands/plan_followup.py +0 -0
  90. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/commands/plans.py +0 -0
  91. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/commands/release.py +0 -0
  92. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/commands/repo.py +0 -0
  93. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/commands/report.py +0 -0
  94. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/commands/review.py +0 -0
  95. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/commands/scorecard.py +0 -0
  96. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/commands/sessions.py +0 -0
  97. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/commands/setup.py +0 -0
  98. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/commands/status.py +0 -0
  99. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/commands/terminal.py +0 -0
  100. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/commands/test_gate.py +0 -0
  101. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/commands/tui.py +0 -0
  102. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/comments.py +0 -0
  103. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/config.py +0 -0
  104. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/config_reload.py +0 -0
  105. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/confirm_test.py +0 -0
  106. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/conflict_fix.py +0 -0
  107. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/dao.py +0 -0
  108. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/dashboard/__init__.py +0 -0
  109. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/dashboard/fixture.py +0 -0
  110. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/dashboard/index.html +0 -0
  111. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/dashboard/server.py +0 -0
  112. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/dashboard/terminal.py +0 -0
  113. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/db.py +0 -0
  114. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/dead_end.py +0 -0
  115. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/deploy/README.md +0 -0
  116. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/deploy/coord-agent.service +0 -0
  117. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/deploy/coord-db-backup.service +0 -0
  118. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/deploy/coord-db-backup.sh +0 -0
  119. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/deploy/coord-db-backup.timer +0 -0
  120. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/deploy/coord-drive-queue.service +0 -0
  121. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/deploy/coord-drive-queue.timer +0 -0
  122. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/deploy/coord-notify.service +0 -0
  123. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/deploy/coord-notify.timer +0 -0
  124. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/deploy/coord-release-propagate.service +0 -0
  125. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/deploy/coord-release-propagate.timer +0 -0
  126. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/deploy/coord-release-window.service +0 -0
  127. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/deploy/coord-release-window.timer +0 -0
  128. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/deploy/coord-serve.service +0 -0
  129. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/deploy/coord-web-dist-build.service +0 -0
  130. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/deploy/coord-web-dist-build.timer +0 -0
  131. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/deploy/coord-web.service +0 -0
  132. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/deploy_manifest.py +0 -0
  133. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/deploy_units.py +0 -0
  134. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/deps.py +0 -0
  135. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/diagnose.py +0 -0
  136. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/dispatch.py +0 -0
  137. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/dist_name.py +0 -0
  138. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/drive.py +0 -0
  139. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/drive_queue.py +0 -0
  140. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/drive_state.py +0 -0
  141. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/events.py +0 -0
  142. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/failure_class.py +0 -0
  143. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/filelock.py +0 -0
  144. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/fleet_config_health.py +0 -0
  145. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/forge_availability.py +0 -0
  146. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/freshness.py +0 -0
  147. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/gate_a.py +0 -0
  148. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/gate_b.py +0 -0
  149. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/gate_snapshot.py +0 -0
  150. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/gates.py +0 -0
  151. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/github_ops.py +0 -0
  152. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/goal.py +0 -0
  153. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/graph_health.py +0 -0
  154. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/health/__init__.py +0 -0
  155. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/health/aggregate.py +0 -0
  156. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/health/checks/__init__.py +0 -0
  157. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/health/checks/agent_install.py +0 -0
  158. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/health/checks/cargo_targets.py +0 -0
  159. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/health/checks/claude_binary.py +0 -0
  160. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/health/checks/coord_web_ci_pin.py +0 -0
  161. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/health/checks/deploy_lane_facts.py +0 -0
  162. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/health/checks/disk.py +0 -0
  163. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/health/checks/fleet_board.py +0 -0
  164. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  165. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/health/checks/fleet_phantom.py +0 -0
  166. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/health/checks/fleet_unit_drift.py +0 -0
  167. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/health/checks/graph.py +0 -0
  168. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/health/checks/graphify_cli.py +0 -0
  169. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/health/checks/index_lock.py +0 -0
  170. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/health/checks/plan_usage.py +0 -0
  171. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/health/checks/repo_state.py +0 -0
  172. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/health/checks/spawned_coord.py +0 -0
  173. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/health/checks/timer_active.py +0 -0
  174. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/health/checks/toolchain.py +0 -0
  175. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/health/checks/unit_drift.py +0 -0
  176. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/health/checks/unit_enablement.py +0 -0
  177. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/health/checks/worktrees.py +0 -0
  178. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/health/cli.py +0 -0
  179. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/health/context.py +0 -0
  180. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/health/fleet_snapshot.py +0 -0
  181. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/health/models.py +0 -0
  182. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/health/pypi.py +0 -0
  183. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/health/registry.py +0 -0
  184. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/health/render.py +0 -0
  185. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/health/units.py +0 -0
  186. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/hooks.py +0 -0
  187. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/housekeeping.py +0 -0
  188. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/interactive.py +0 -0
  189. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/issue_store.py +0 -0
  190. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/liveness_auditor.py +0 -0
  191. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/machine_pause.py +0 -0
  192. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/merge_queue.py +0 -0
  193. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/milestone_chat.py +0 -0
  194. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/milestone_dispatch.py +0 -0
  195. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/milestone_gate.py +0 -0
  196. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/milestone_order.py +0 -0
  197. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/mock_author.py +0 -0
  198. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/models.py +0 -0
  199. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/network.py +0 -0
  200. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/new_issue_chat.py +0 -0
  201. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/notifier/__init__.py +0 -0
  202. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/notifier/baseline.py +0 -0
  203. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/notifier/cli.py +0 -0
  204. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/notifier/collect.py +0 -0
  205. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/notifier/digest.py +0 -0
  206. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/notifier/models.py +0 -0
  207. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/notifier/predicate.py +0 -0
  208. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/notifier/service.py +0 -0
  209. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/notifier/store.py +0 -0
  210. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/notifier/transport.py +0 -0
  211. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/notify.py +0 -0
  212. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/openapi.py +0 -0
  213. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/overlap_fence.py +0 -0
  214. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/overlap_predict.py +0 -0
  215. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/parentage.py +0 -0
  216. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/parentage_github.py +0 -0
  217. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/pipeline.py +0 -0
  218. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/plan_parser.py +0 -0
  219. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/plans.py +0 -0
  220. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/platform_paths.py +0 -0
  221. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/portal_bridge.py +0 -0
  222. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/portal_store.py +0 -0
  223. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/portal_sync.py +0 -0
  224. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/pr_body_lint.py +0 -0
  225. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/prereqs.py +0 -0
  226. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/progress.py +0 -0
  227. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/providers/__init__.py +0 -0
  228. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/providers/base.py +0 -0
  229. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/providers/claude.py +0 -0
  230. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/providers/claude_pty.py +0 -0
  231. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/providers/opencode.py +0 -0
  232. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/queue_diagnose.py +0 -0
  233. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/reconcile.py +0 -0
  234. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/reconcile_tick.py +0 -0
  235. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/refine_chat.py +0 -0
  236. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/release_cordon.py +0 -0
  237. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/release_propagate.py +0 -0
  238. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/release_verify.py +0 -0
  239. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/release_window.py +0 -0
  240. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/repo_edit.py +0 -0
  241. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/repo_onboard.py +0 -0
  242. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/reports.py +0 -0
  243. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/revalidate.py +0 -0
  244. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/review.py +0 -0
  245. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/scorecard.py +0 -0
  246. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/self_health.py +0 -0
  247. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/serve_app.py +0 -0
  248. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  249. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  250. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  251. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  252. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  253. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/skills/portal-followup/SKILL.md +0 -0
  254. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  255. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  256. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/skills/update-issue/SKILL.md +0 -0
  257. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/smoke.py +0 -0
  258. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/spend_ceiling.py +0 -0
  259. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/split_work.py +0 -0
  260. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/stage_projection.py +0 -0
  261. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/state.py +0 -0
  262. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/test_author.py +0 -0
  263. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/test_chat.py +0 -0
  264. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/test_orchestrator.py +0 -0
  265. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/test_report.py +0 -0
  266. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/tui_release.py +0 -0
  267. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/usage.py +0 -0
  268. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/usage_limits.py +0 -0
  269. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/usage_rollup.py +0 -0
  270. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coord/worker_events.py +0 -0
  271. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/coordinator.example.yml +0 -0
  272. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/deploy/coord-agent.service +0 -0
  273. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/deploy/coord-db-backup.service +0 -0
  274. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/deploy/coord-db-backup.sh +0 -0
  275. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/deploy/coord-db-backup.timer +0 -0
  276. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/deploy/coord-drive-queue.service +0 -0
  277. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/deploy/coord-drive-queue.timer +0 -0
  278. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/deploy/coord-notify.service +0 -0
  279. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/deploy/coord-notify.timer +0 -0
  280. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/deploy/coord-release-propagate.service +0 -0
  281. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/deploy/coord-release-propagate.timer +0 -0
  282. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/deploy/coord-release-window.service +0 -0
  283. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/deploy/coord-release-window.timer +0 -0
  284. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/deploy/coord-serve.service +0 -0
  285. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/deploy/coord-web-dist-build.service +0 -0
  286. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/deploy/coord-web-dist-build.sh +0 -0
  287. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/deploy/coord-web-dist-build.timer +0 -0
  288. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/deploy/coord-web-rollback.sh +0 -0
  289. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/deploy/coord-web.service +0 -0
  290. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/deploy/node-shim.sh +0 -0
  291. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  292. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/docs/ADR_COORD_WEB_CI.md +0 -0
  293. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/docs/ADR_COORD_WEB_DIST.md +0 -0
  294. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/docs/AGENT_OPERATIONS.md +0 -0
  295. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/docs/ARCHITECTURE.md +0 -0
  296. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/docs/ARCH_SECURITY_GATES.md +0 -0
  297. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/docs/COCKPIT.md +0 -0
  298. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/docs/CONTROL_CENTER.md +0 -0
  299. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/docs/COST_DISCIPLINE.md +0 -0
  300. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/docs/CROSS_PLATFORM.md +0 -0
  301. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/docs/CUSTOMER_PORTAL.md +0 -0
  302. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/docs/DRIVE_QUEUE.md +0 -0
  303. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/docs/EPHEMERAL_WORKERS.md +0 -0
  304. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/docs/FORGE_MIGRATION.md +0 -0
  305. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/docs/GRAPHIFY_SETUP.md +0 -0
  306. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/docs/ISSUE_GUIDANCE.md +0 -0
  307. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/docs/MAC_MINI.md +0 -0
  308. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  309. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/docs/NOTIFIER.md +0 -0
  310. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/docs/OPENCODE_VERIFICATION.md +0 -0
  311. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/docs/OPERATING_GOTCHAS.md +0 -0
  312. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/docs/ORACLE_LOOP.md +0 -0
  313. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/docs/PHONE_WEBAPP.md +0 -0
  314. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/docs/PIPELINE_V2.md +0 -0
  315. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/docs/PLATFORM_EVOLUTION.md +0 -0
  316. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/docs/SECOND_BACKEND.md +0 -0
  317. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/docs/STORE_SERVICE.md +0 -0
  318. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  319. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/docs/WEB_CONTROL_CENTER.md +0 -0
  320. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/docs/WSL_WINDOWS_WORKER.md +0 -0
  321. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/docs/mocks/web/README.md +0 -0
  322. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/docs/mocks/web/_tokens.css +0 -0
  323. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/docs/mocks/web/issue-detail.html +0 -0
  324. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/docs/mocks/web/pipeline-narrow.html +0 -0
  325. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/docs/mocks/web/pipeline-wide.html +0 -0
  326. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/graphify-out/.gitignore +0 -0
  327. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/install-agent.sh +0 -0
  328. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/pyproject.toml +0 -0
  329. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/scripts/audit_review_verdict_overrides.py +0 -0
  330. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  331. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/scripts/azure-workers/build-worker-image.sh +0 -0
  332. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/scripts/azure-workers/coordinator-machine.py +0 -0
  333. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/scripts/azure-workers/epic-down.sh +0 -0
  334. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/scripts/azure-workers/epic-up.sh +0 -0
  335. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/scripts/azure-workers/preflight.sh +0 -0
  336. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/scripts/azure-workers/provision-worker.sh +0 -0
  337. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  338. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  339. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/scripts/azure-workers/verify-github-token.sh +0 -0
  340. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/scripts/check_gh_argv_containment.py +0 -0
  341. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/scripts/codegen.py +0 -0
  342. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/scripts/coord-test-runner.sh +0 -0
  343. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/scripts/drive-batch.sh +0 -0
  344. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/scripts/gen_board_fixture.py +0 -0
  345. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/scripts/gen_mock_index.py +0 -0
  346. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/scripts/next_release_tag.py +0 -0
  347. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/scripts/run_tests_in_populated_home.sh +0 -0
  348. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/scripts/run_tests_without_gh.sh +0 -0
  349. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/scripts/smoke_437_interactive.py +0 -0
  350. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/scripts/verify_878_review_capture.py +0 -0
  351. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/scripts/verify_release_published.py +0 -0
  352. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/scripts/verify_release_wheel.py +0 -0
  353. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/setup.cfg +0 -0
  354. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/SMOKE_SET.md +0 -0
  355. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/__init__.py +0 -0
  356. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  357. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-33/contract.md +0 -0
  358. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-33/manifest.yml +0 -0
  359. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  360. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  361. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  362. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  363. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-37/conftest.py +0 -0
  364. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-37/contract.md +0 -0
  365. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-37/manifest.yml +0 -0
  366. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  367. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  368. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-38/contract.md +0 -0
  369. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-38/manifest.yml +0 -0
  370. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  371. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  372. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  373. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  374. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  375. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  376. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  377. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  378. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  379. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  380. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-51/contract.md +0 -0
  381. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  382. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  383. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-51/manifest.yml +0 -0
  384. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  385. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-51/tsconfig.json +0 -0
  386. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-65/board_split_2288.rs +0 -0
  387. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
  388. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
  389. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-65/contract.md +0 -0
  390. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
  391. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-65/manifest.yml +0 -0
  392. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
  393. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
  394. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
  395. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
  396. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
  397. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
  398. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
  399. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
  400. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
  401. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
  402. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-65/tabs_persistence_2286.rs +0 -0
  403. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-67/approved_items_2532.rs +0 -0
  404. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-67/contract.md +0 -0
  405. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-67/manifest.d/2533.yml +0 -0
  406. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-67/manifest.yml +0 -0
  407. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-67/mocks/approved-items-chat-opened.screen +0 -0
  408. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-67/mocks/approved-items-context-menu.screen +0 -0
  409. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-67/mocks/approved-items-detail.screen +0 -0
  410. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-67/mocks/approved-items-empty.screen +0 -0
  411. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-67/mocks/approved-items-populated.screen +0 -0
  412. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-67/pull_decomposition_2533.rs +0 -0
  413. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  414. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/conftest.py +0 -0
  415. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/fixtures/board-pipeline-basic.json +0 -0
  416. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  417. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  418. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  419. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  420. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/fixtures/playwright/all_pass.json +0 -0
  421. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  422. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/fixtures/playwright/mixed_fail.json +0 -0
  423. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  424. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  425. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/fixtures/playwright/skip.json +0 -0
  426. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/fixtures/playwright/truncated.json +0 -0
  427. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  428. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  429. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  430. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  431. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  432. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  433. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  434. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  435. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_acceptance_drivers.py +0 -0
  436. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_agent.py +0 -0
  437. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_agent_api_error.py +0 -0
  438. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_agent_app.py +0 -0
  439. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_agent_branch_base.py +0 -0
  440. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_agent_branch_capture.py +0 -0
  441. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_agent_config_free_1712.py +0 -0
  442. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_agent_deploy_units_endpoint.py +0 -0
  443. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_agent_dirty_worktree.py +0 -0
  444. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  445. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_agent_graph_self_heal.py +0 -0
  446. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_agent_health_h3.py +0 -0
  447. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_agent_idle_restart.py +0 -0
  448. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_agent_push_failure.py +0 -0
  449. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_agent_reap.py +0 -0
  450. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_agent_repos_and_pull.py +0 -0
  451. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_agent_restart_services_endpoint.py +0 -0
  452. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_agent_skills_self_heal.py +0 -0
  453. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_agent_startup_diagnostics.py +0 -0
  454. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_agent_update.py +0 -0
  455. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_agent_update_bluegreen.py +0 -0
  456. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_agent_usage_limit.py +0 -0
  457. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_agent_zero_commit.py +0 -0
  458. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_ambient_home_isolation.py +0 -0
  459. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_approve_reject_plan.py +0 -0
  460. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_approve_usage_gate.py +0 -0
  461. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_approved_work_2532.py +0 -0
  462. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_assignment_already_recorded_daemon.py +0 -0
  463. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_audit_log.py +0 -0
  464. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_audit_outcome.py +0 -0
  465. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_audit_query.py +0 -0
  466. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_auto_loop.py +0 -0
  467. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_auto_release_publish_2035.py +0 -0
  468. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_base_checkout_restore.py +0 -0
  469. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_block_log.py +0 -0
  470. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_board_cap_762.py +0 -0
  471. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_board_fixture.py +0 -0
  472. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_board_read_path.py +0 -0
  473. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_board_service.py +0 -0
  474. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_board_state.py +0 -0
  475. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_board_wire.py +0 -0
  476. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_brain.py +0 -0
  477. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_branch_model.py +0 -0
  478. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_bug_intake.py +0 -0
  479. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_build_worker_image_env_update.py +0 -0
  480. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cargo_cache.py +0 -0
  481. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_check_gh_argv_containment.py +0 -0
  482. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_ci_acceptance_gate_1950.py +0 -0
  483. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_ci_fix.py +0 -0
  484. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_ci_gitlab.py +0 -0
  485. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_ci_parity_2091.py +0 -0
  486. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_ci_store.py +0 -0
  487. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_claim.py +0 -0
  488. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_acceptance.py +0 -0
  489. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_assign.py +0 -0
  490. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  491. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_assign_interactive_remote.py +0 -0
  492. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_assign_provider.py +0 -0
  493. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  494. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_audit.py +0 -0
  495. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_chat_continue.py +0 -0
  496. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_decide.py +0 -0
  497. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_diagnose_config_provenance.py +0 -0
  498. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_diagnose_forge_availability.py +0 -0
  499. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_diagnose_graph.py +0 -0
  500. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_diagnose_self.py +0 -0
  501. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_doctor.py +0 -0
  502. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_doctor_config_free_1801.py +0 -0
  503. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  504. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_drive.py +0 -0
  505. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_drive_queue.py +0 -0
  506. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_escalate.py +0 -0
  507. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_fix_headless_review.py +0 -0
  508. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_gate_a.py +0 -0
  509. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_install_drift.py +0 -0
  510. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_install_skills.py +0 -0
  511. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_issue_create_label.py +0 -0
  512. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_issue_reopen.py +0 -0
  513. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_merge.py +0 -0
  514. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_milestone_assign.py +0 -0
  515. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_milestone_capture.py +0 -0
  516. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_milestone_chat_add_child.py +0 -0
  517. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_milestone_dispatch.py +0 -0
  518. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_milestone_gate_b.py +0 -0
  519. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_milestone_gate_c.py +0 -0
  520. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_milestone_order.py +0 -0
  521. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  522. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_milestone_ship.py +0 -0
  523. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_network.py +0 -0
  524. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_new_issue_chat.py +0 -0
  525. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_plans.py +0 -0
  526. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_pull_artifact.py +0 -0
  527. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_queue.py +0 -0
  528. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_reattach_sessions.py +0 -0
  529. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_refine_board.py +0 -0
  530. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_release_preflight.py +0 -0
  531. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_release_propagate.py +0 -0
  532. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_release_window.py +0 -0
  533. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_repo_2220.py +0 -0
  534. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_scorecard.py +0 -0
  535. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_set_review_findings.py +0 -0
  536. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_status_advisory_terminal.py +0 -0
  537. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_status_merge_queue.py +0 -0
  538. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_status_provider.py +0 -0
  539. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_status_review_finalizing.py +0 -0
  540. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_status_test_failed_tag.py +0 -0
  541. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_status_usage_limit.py +0 -0
  542. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_sync_comments_873.py +0 -0
  543. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_test_plan.py +0 -0
  544. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_track.py +0 -0
  545. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_tui_update.py +0 -0
  546. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cli_wait.py +0 -0
  547. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_client_base_install.py +0 -0
  548. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_comments.py +0 -0
  549. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_completion_summary.py +0 -0
  550. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_config.py +0 -0
  551. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_config_acceptance.py +0 -0
  552. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_config_audit.py +0 -0
  553. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_config_pricing.py +0 -0
  554. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  555. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_config_usage_gate.py +0 -0
  556. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_confirm_test.py +0 -0
  557. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_conflict_fix.py +0 -0
  558. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_conflict_fix_semantic.py +0 -0
  559. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_coord_test.py +0 -0
  560. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_coord_test_runner_baseline.py +0 -0
  561. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_coord_test_runner_populated_home.py +0 -0
  562. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_coord_test_runner_routing.py +0 -0
  563. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_coord_test_runner_toolchain.py +0 -0
  564. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_coord_web_sse_restart_live.py +0 -0
  565. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_coordinator_machine.py +0 -0
  566. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_cross_platform_imports.py +0 -0
  567. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_dashboard.py +0 -0
  568. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_dashboard_fixture.py +0 -0
  569. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_dashboard_terminal.py +0 -0
  570. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_dashboard_terminal_live.py +0 -0
  571. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_db.py +0 -0
  572. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_dead_end.py +0 -0
  573. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_deploy_coord_db_backup.py +0 -0
  574. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_deploy_coord_web_dist.py +0 -0
  575. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_deploy_coord_web_rollback.py +0 -0
  576. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_deploy_drive_queue_unit.py +0 -0
  577. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_deploy_manifest.py +0 -0
  578. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_deploy_notify_unit.py +0 -0
  579. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_deploy_units_lane.py +0 -0
  580. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_deploy_web_unit.py +0 -0
  581. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_deps.py +0 -0
  582. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_diagnose.py +0 -0
  583. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_dispatch.py +0 -0
  584. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_dispatch_target_validation.py +0 -0
  585. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_dist_name.py +0 -0
  586. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_done_housekeeping.py +0 -0
  587. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_drive.py +0 -0
  588. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_drive_queue.py +0 -0
  589. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_drive_state.py +0 -0
  590. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_drive_tmux.py +0 -0
  591. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_epic_up_capability_detection.py +0 -0
  592. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  593. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_epic_up_image_provenance.py +0 -0
  594. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_errors.py +0 -0
  595. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_events.py +0 -0
  596. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_failure_class.py +0 -0
  597. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_filelock.py +0 -0
  598. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  599. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_fix_of_force_override.py +0 -0
  600. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_fleet_config_health.py +0 -0
  601. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_fleet_health_probes.py +0 -0
  602. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_fleet_health_snapshot.py +0 -0
  603. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_forge_availability.py +0 -0
  604. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_freshness.py +0 -0
  605. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_gate_a.py +0 -0
  606. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_gate_b.py +0 -0
  607. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_gate_snapshot_staleness.py +0 -0
  608. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_gates.py +0 -0
  609. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  610. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_gen_mock_index.py +0 -0
  611. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_generated_types_fixture.py +0 -0
  612. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_github_ops.py +0 -0
  613. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_goal.py +0 -0
  614. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_graph_health.py +0 -0
  615. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_graph_selfheal_absent_2237.py +0 -0
  616. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_handoff.py +0 -0
  617. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_health_checks.py +0 -0
  618. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_health_cli.py +0 -0
  619. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_health_cli_graph.py +0 -0
  620. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_health_config.py +0 -0
  621. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_health_context.py +0 -0
  622. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_health_coord_web_ci_pin.py +0 -0
  623. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_health_deploy_lane_facts.py +0 -0
  624. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_health_incident_regression.py +0 -0
  625. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_health_pypi.py +0 -0
  626. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_health_registry.py +0 -0
  627. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_health_timer_active.py +0 -0
  628. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_health_toolchain.py +0 -0
  629. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_health_unit_drift.py +0 -0
  630. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_health_unit_enablement.py +0 -0
  631. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_hooks.py +0 -0
  632. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_human_attended_437.py +0 -0
  633. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_init.py +0 -0
  634. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_integration.py +0 -0
  635. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_interactive_briefing_echo.py +0 -0
  636. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_interactive_pane_log_2541.py +0 -0
  637. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_interactive_prefill_state.py +0 -0
  638. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_interactive_session_relaunch.py +0 -0
  639. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_interactive_test_verdict_backstop.py +0 -0
  640. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_interactive_token_attribution.py +0 -0
  641. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_interactive_worktree.py +0 -0
  642. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_issue_store_seam.py +0 -0
  643. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_liveness_auditor.py +0 -0
  644. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_liveness_notify.py +0 -0
  645. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_machine_pause.py +0 -0
  646. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_merge_queue.py +0 -0
  647. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_merge_verify.py +0 -0
  648. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_milestone_chat.py +0 -0
  649. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_milestone_dispatch.py +0 -0
  650. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_milestone_gate.py +0 -0
  651. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_milestone_order.py +0 -0
  652. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_milestone_seam.py +0 -0
  653. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_mock_author.py +0 -0
  654. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_model_tiering.py +0 -0
  655. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_models.py +0 -0
  656. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_models_config_labels.py +0 -0
  657. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_needs_attention.py +0 -0
  658. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_network.py +0 -0
  659. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_new_issue_chat.py +0 -0
  660. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_next_release_tag.py +0 -0
  661. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_node_shim.py +0 -0
  662. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_notifier_baseline.py +0 -0
  663. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_notifier_cli.py +0 -0
  664. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_notifier_collect.py +0 -0
  665. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_notifier_config.py +0 -0
  666. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_notifier_drive_seam.py +0 -0
  667. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_notifier_isolation.py +0 -0
  668. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_notifier_predicate.py +0 -0
  669. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_notifier_quiet_hours.py +0 -0
  670. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_notifier_service.py +0 -0
  671. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_notify.py +0 -0
  672. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_notify_drain.py +0 -0
  673. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_openapi.py +0 -0
  674. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_operational_defaults.py +0 -0
  675. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_overlap_fence.py +0 -0
  676. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_overlap_predict.py +0 -0
  677. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_packaged_deploy_units.py +0 -0
  678. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_parentage.py +0 -0
  679. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_paste_landed.py +0 -0
  680. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_pipeline.py +0 -0
  681. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_plan_followup_approve_plan_command.py +0 -0
  682. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_plan_followup_pr_command.py +0 -0
  683. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_plan_followup_review_command.py +0 -0
  684. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_plan_only.py +0 -0
  685. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_plan_parser.py +0 -0
  686. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_platform_paths.py +0 -0
  687. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_portal_bridge.py +0 -0
  688. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_portal_config.py +0 -0
  689. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_portal_store.py +0 -0
  690. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_portal_sync.py +0 -0
  691. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_pr_body_lint.py +0 -0
  692. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_prereqs.py +0 -0
  693. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_production_db_guard.py +0 -0
  694. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_progress.py +0 -0
  695. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_provider_seam.py +0 -0
  696. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_providers.py +0 -0
  697. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_providers_config_labels.py +0 -0
  698. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_providers_pty.py +0 -0
  699. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_quiet_hours.py +0 -0
  700. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_quiet_hours_store_2146.py +0 -0
  701. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_reap_merged_sessions.py +0 -0
  702. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_reap_stale_interactive_tick.py +0 -0
  703. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_reconcile.py +0 -0
  704. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_reconcile_branch.py +0 -0
  705. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_reconcile_completions.py +0 -0
  706. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_reconcile_merges.py +0 -0
  707. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_reconcile_no_agent_record.py +0 -0
  708. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_reconcile_tick.py +0 -0
  709. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_reconcile_usage_limit_done.py +0 -0
  710. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_refine_chat.py +0 -0
  711. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_release_cordon_2101.py +0 -0
  712. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  713. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_release_cordon_deadlock_2240.py +0 -0
  714. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_release_cordon_stuck_2490.py +0 -0
  715. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_release_propagate.py +0 -0
  716. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_release_roll_window_handoff.py +0 -0
  717. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_release_unified_1242.py +0 -0
  718. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_release_verify.py +0 -0
  719. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_release_window.py +0 -0
  720. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_remote_auto_prune.py +0 -0
  721. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_remote_interactive_reaper.py +0 -0
  722. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_repo_edit_2220.py +0 -0
  723. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_repo_graph_fleet_2237.py +0 -0
  724. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_repo_onboard_2220.py +0 -0
  725. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_report_result_push.py +0 -0
  726. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_reports.py +0 -0
  727. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_retry.py +0 -0
  728. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_retry_advisory_1606.py +0 -0
  729. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_retry_type_1636.py +0 -0
  730. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_revalidate.py +0 -0
  731. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_review.py +0 -0
  732. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_review_end_review_without_verdict.py +0 -0
  733. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_review_parse_failure_diagnostic.py +0 -0
  734. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_review_reaffirm.py +0 -0
  735. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_review_state.py +0 -0
  736. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_review_verdict_backstop.py +0 -0
  737. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_review_verdict_override_audit.py +0 -0
  738. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_review_verdict_relay.py +0 -0
  739. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_review_zero_commits.py +0 -0
  740. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_scoped_review_wiring.py +0 -0
  741. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_scorecard.py +0 -0
  742. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_self_health.py +0 -0
  743. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_serve.py +0 -0
  744. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_serve_app_board_trim.py +0 -0
  745. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_session.py +0 -0
  746. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_slice_issue_attribution.py +0 -0
  747. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_smoke.py +0 -0
  748. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_smoke_live_checkout_restore.py +0 -0
  749. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_smoke_workflow.py +0 -0
  750. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_spend_ceiling.py +0 -0
  751. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_spend_ceiling_coordinator.py +0 -0
  752. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_split.py +0 -0
  753. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_split_work.py +0 -0
  754. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_stage_projection.py +0 -0
  755. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_stalled_pipeline.py +0 -0
  756. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_state.py +0 -0
  757. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_state_review_findings_daemon.py +0 -0
  758. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_status_fleet_footer.py +0 -0
  759. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_stop_1567.py +0 -0
  760. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_stuck.py +0 -0
  761. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_terminal_command.py +0 -0
  762. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_test_author.py +0 -0
  763. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_test_chat.py +0 -0
  764. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_test_orchestrator.py +0 -0
  765. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_test_report.py +0 -0
  766. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_test_verdict_parsing.py +0 -0
  767. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_test_verdict_transcript_floor.py +0 -0
  768. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_thin_client_board_audit.py +0 -0
  769. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_thin_client_config_load_1080.py +0 -0
  770. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_thin_client_daemon_routing_906.py +0 -0
  771. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_tmux_host.py +0 -0
  772. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_tmux_session.py +0 -0
  773. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_transcript_floor.py +0 -0
  774. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_usage.py +0 -0
  775. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_usage_limits.py +0 -0
  776. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_usage_rollup.py +0 -0
  777. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_venv_live_install_2121.py +0 -0
  778. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_version_single_source.py +0 -0
  779. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_watch.py +0 -0
  780. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  781. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_worker_events.py +0 -0
  782. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_worker_image_pin_sync.py +0 -0
  783. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_worker_safety.py +0 -0
  784. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_worker_test_scoping.py +0 -0
  785. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_worktree.py +0 -0
  786. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  787. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/Cargo.lock +0 -0
  788. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/Cargo.toml +0 -0
  789. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/cargo-config-local-quadraui.toml.example +0 -0
  790. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/src/app/audit.rs +0 -0
  791. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/src/app/chat.rs +0 -0
  792. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/src/app/data.rs +0 -0
  793. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/src/app/doc_tabs.rs +0 -0
  794. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/src/app/drive.rs +0 -0
  795. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/src/app/drive_queue.rs +0 -0
  796. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/src/app/escalation.rs +0 -0
  797. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/src/app/fleet_health.rs +0 -0
  798. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/src/app/fleet_sessions.rs +0 -0
  799. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/src/app/fleet_terminals.rs +0 -0
  800. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/src/app/format.rs +0 -0
  801. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/src/app/milestone_dag.rs +0 -0
  802. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/src/app/msv.rs +0 -0
  803. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/src/app/pipeline.rs +0 -0
  804. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/src/app/plans.rs +0 -0
  805. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/src/app/render.rs +0 -0
  806. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/src/app/reports.rs +0 -0
  807. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/src/app/sessions.rs +0 -0
  808. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/src/app/terminal.rs +0 -0
  809. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/src/app/workspace.rs +0 -0
  810. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/src/bin/gtk.rs +0 -0
  811. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/src/commands.rs +0 -0
  812. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/src/lib.rs +0 -0
  813. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/src/main.rs +0 -0
  814. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/src/settings.rs +0 -0
  815. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/tests/acceptance.rs +0 -0
  816. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/tui/tests/cli.rs +0 -0
  817. {code_coordinator-0.5.235 → code_coordinator-0.5.237}/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.235
3
+ Version: 0.5.237
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.235
3
+ Version: 0.5.237
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
@@ -62,6 +62,7 @@ coord/conflict_fix.py
62
62
  coord/dao.py
63
63
  coord/db.py
64
64
  coord/dead_end.py
65
+ coord/decomposition_chat.py
65
66
  coord/deploy_manifest.py
66
67
  coord/deploy_units.py
67
68
  coord/deps.py
@@ -478,6 +479,7 @@ tests/test_dashboard_terminal.py
478
479
  tests/test_dashboard_terminal_live.py
479
480
  tests/test_db.py
480
481
  tests/test_dead_end.py
482
+ tests/test_decomposition_chat.py
481
483
  tests/test_deploy_coord_db_backup.py
482
484
  tests/test_deploy_coord_web_dist.py
483
485
  tests/test_deploy_coord_web_rollback.py
@@ -91,6 +91,7 @@
91
91
  "coord/dashboard/terminal.py",
92
92
  "coord/db.py",
93
93
  "coord/dead_end.py",
94
+ "coord/decomposition_chat.py",
94
95
  "coord/deploy/README.md",
95
96
  "coord/deploy/coord-agent.service",
96
97
  "coord/deploy/coord-db-backup.service",
@@ -550,6 +551,7 @@
550
551
  "tests/test_dashboard_terminal_live.py",
551
552
  "tests/test_db.py",
552
553
  "tests/test_dead_end.py",
554
+ "tests/test_decomposition_chat.py",
553
555
  "tests/test_deploy_coord_db_backup.py",
554
556
  "tests/test_deploy_coord_web_dist.py",
555
557
  "tests/test_deploy_coord_web_rollback.py",
@@ -0,0 +1,8 @@
1
+ {
2
+ "tag": "0.5.237",
3
+ "distance": 0,
4
+ "node": "g855b16cb40a1e4b711059e218b94cd1b8c19f38b",
5
+ "dirty": false,
6
+ "branch": "HEAD",
7
+ "node_date": "2026-08-23"
8
+ }
@@ -838,6 +838,36 @@ def _issue_header_re(issue_number: int) -> re.Pattern[str]:
838
838
  return re.compile(rf"^(\s*)['\"]?{issue_number}['\"]?\s*:\s*(#.*)?$")
839
839
 
840
840
 
841
+ def _parse_list_item_scalar(line: str) -> str | None:
842
+ """Resolve one YAML block-sequence item line (``- ...``) to its parsed
843
+ scalar value — the same value :func:`parse_manifest_text` would produce
844
+ for it — rather than the raw text as written. #2296: a Playwright test id
845
+ always starts with ``[chromium]``, so its manifest entry is *always*
846
+ quoted (an unquoted leading ``[`` is a YAML flow sequence, not a string);
847
+ comparing the raw scalar against the parsed id then never matches. Going
848
+ through :mod:`yaml` here instead handles double- and single-quoted
849
+ scalars (incl. the ``''`` embedded-quote escape) and, since YAML's own
850
+ comment rule applies, a ``#`` inside a quoted scalar is correctly treated
851
+ as data rather than truncated as a comment.
852
+
853
+ Returns ``None`` for anything that isn't a well-formed single-item
854
+ sequence line (blank/comment-only, flow-style, malformed YAML, or a
855
+ non-string value) so the caller leaves such lines untouched rather than
856
+ risk misclassifying them.
857
+ """
858
+ stripped = line.strip()
859
+ if not stripped.startswith("-"):
860
+ return None
861
+ try:
862
+ parsed = yaml.safe_load(stripped)
863
+ except yaml.YAMLError:
864
+ return None
865
+ if not isinstance(parsed, list) or len(parsed) != 1:
866
+ return None
867
+ value = parsed[0]
868
+ return value if isinstance(value, str) else None
869
+
870
+
841
871
  def _strip_cleared_ids_from_issue_block(
842
872
  body: "list[str]", issue_number: int, cleared_ids: "set[str]",
843
873
  ) -> "tuple[list[str], bool]":
@@ -871,9 +901,8 @@ def _strip_cleared_ids_from_issue_block(
871
901
  i += 1
872
902
  new_sub = []
873
903
  for sub_line in sub:
874
- code = sub_line.split("#", 1)[0].strip()
875
- item_m = re.match(r"^-\s*(.+?)\s*$", code)
876
- if item_m and item_m.group(1) in cleared_ids:
904
+ item = _parse_list_item_scalar(sub_line)
905
+ if item is not None and item in cleared_ids:
877
906
  changed = True
878
907
  continue
879
908
  new_sub.append(sub_line)
@@ -1286,7 +1315,12 @@ def clear_expected_red_via_pr(
1286
1315
 
1287
1316
  new_text = clear_expected_red_entries(text, issue_number, ids)
1288
1317
  if new_text is None:
1289
- return "expected_red text unchanged (nothing matched)"
1318
+ # #2296: ids were passed in and none matched — that's a defect in
1319
+ # the text surgery (or a manifest that no longer has this issue's
1320
+ # block), not a benign no-op. Prefix `warning:` so it's greppable
1321
+ # and so `coord acceptance expected-red --clear` doesn't report a
1322
+ # clean sweep over an operation that actually did nothing.
1323
+ return "warning: expected_red text unchanged (nothing matched)"
1290
1324
 
1291
1325
  get_head = getattr(ops, "get_default_branch_head", None)
1292
1326
  create_branch = getattr(ops, "create_remote_branch", None)
@@ -3643,6 +3643,112 @@ MILESTONE_CHAT_DENY_COMMANDS: list[str] = [
3643
3643
  "Bash(coord assign *)",
3644
3644
  ]
3645
3645
 
3646
+ DECOMPOSITION_CHAT_SYSTEM_PROMPT = """\
3647
+ You are a decomposition steward for a customer's APPROVED portal submission \
3648
+ that an operator just pulled into this session from the TUI's "Approved \
3649
+ work items" panel (#2533, ms-67 contract §4). Unlike `milestone-chat` above \
3650
+ (which proposes and waits for confirmation before writing anything), this \
3651
+ session's WHOLE JOB is to actually decompose the submission into real \
3652
+ coordinator work — there is no separate confirm-then-write step here \
3653
+ because pulling the row into this session already IS the operator's \
3654
+ confirmation.
3655
+
3656
+ The first user message carries: the submission's OUTCOME, AUDIENCE, DONE \
3657
+ DEFINITION, and CONSTRAINTS (the four fields the customer described); its \
3658
+ mapped repo(s); and `coordinator.yml` topology context for those repo(s) \
3659
+ (depends_on, which machines claim each repo).
3660
+
3661
+ Your job, in order:
3662
+ 1. Decide whether this is ORACLE-LOOP-SHAPED work (docs/ORACLE_LOOP.md) — \
3663
+ big or cross-cutting enough to warrant a Gate-A contract + independent \
3664
+ test-author, or small enough to skip straight to normal dispatch. Discuss \
3665
+ this with the operator if it's not obvious; you don't need to wait for \
3666
+ explicit confirmation before filing, but flag your reasoning.
3667
+ 2. Produce one or more GitHub issues describing the work, using:
3668
+
3669
+ coord issue create <repo> --title '<title>' --body '<body>'
3670
+
3671
+ (or `--body-file` for long markdown — never raw `gh issue create`, this \
3672
+ repo's own house rule). If the decomposition is milestone-shaped, file an \
3673
+ epic/tracking issue first (`coord milestone create <repo> --title '<title>'`) \
3674
+ and file the sub-issues, then `coord milestone add-child <repo> <epic> \
3675
+ <issue>` each of them onto it.
3676
+ 3. Queue every filed issue via:
3677
+
3678
+ coord drive-queue add <repo> <issue>
3679
+
3680
+ — NEVER `coord assign` or `coord drive --tmux` (this repo's own standing \
3681
+ preference: always go through the drive queue, never ad-hoc dispatch).
3682
+ 4. Record the portal link so downstream tooling can find this submission's \
3683
+ work again (2026-08-22 briefing amendment — this is NOT optional):
3684
+
3685
+ coord portal link <repo> <milestone_number> <submission_id>
3686
+
3687
+ Use the SUBMISSION_ID from your first user message and the milestone \
3688
+ number `coord milestone create` printed. If `coord portal link` fails (bad \
3689
+ repo, bad milestone number, daemon-host guard), that is a FAILURE of this \
3690
+ step — say so explicitly to the operator, do not silently move on.
3691
+
3692
+ **If your decomposition produced a single one-off issue with no \
3693
+ milestone/epic** (not a milestone-shaped decomposition): `coord portal \
3694
+ link` has NO non-milestone form today — it requires a `milestone_number`, \
3695
+ which a one-off issue doesn't have. Do NOT invent one or skip the link \
3696
+ silently. Say so explicitly in your final summary to the operator (e.g. \
3697
+ "this submission has no recorded portal link — coord portal link only \
3698
+ covers milestones, and #2533's own dispatcher found no equivalent for a \
3699
+ one-off issue"), so the gap is visible rather than silently lost.
3700
+
3701
+ Rules:
3702
+ - Do NOT run raw `gh issue create`/`gh issue edit`/`gh pr *`/`gh api -X \
3703
+ POST|PATCH|DELETE` or any other mutating `gh` command — the write paths \
3704
+ above (`coord issue create`, `coord milestone create/add-child`, `coord \
3705
+ drive-queue add`, `coord portal link`) are the only ones you may use.
3706
+ - Do NOT run `coord assign <machine> <repo> <issue>` or `coord drive \
3707
+ --tmux` — always `coord drive-queue add`.
3708
+ - Do NOT run `coord approve` or `coord merge` — outside this session's job.
3709
+ - Do NOT run `git push`, `git commit`, or any command that writes to a repo \
3710
+ checkout — this session files issues and queues work, it does not touch code.
3711
+ - Keep the operator informed: summarize your decomposition plan before \
3712
+ filing, and report back what you filed/queued/linked (and any link gap) \
3713
+ when done.\
3714
+ """
3715
+
3716
+ # Deny list applied to decomposition-chat workers (#2533). Unlike
3717
+ # milestone-chat, this type's WHOLE job is to write (issue create /
3718
+ # milestone create+add-child / drive-queue add / portal link), so this list
3719
+ # is deliberately narrow — it blocks raw `gh` mutations, repo-write git
3720
+ # commands, destructive git ops, and the three unrelated `coord` write
3721
+ # commands (approve/merge/assign) explicitly out of scope, while every write
3722
+ # path this session actually needs (`coord issue create`, `coord milestone
3723
+ # create`/`add-child`, `coord drive-queue add`, `coord portal link`) is
3724
+ # allowed by omission.
3725
+ DECOMPOSITION_CHAT_DENY_COMMANDS: list[str] = [
3726
+ "Bash(gh issue edit *)",
3727
+ "Bash(gh issue create *)",
3728
+ "Bash(gh issue delete *)",
3729
+ "Bash(gh issue close *)",
3730
+ "Bash(gh api -X PATCH *)",
3731
+ "Bash(gh api -X POST *)",
3732
+ "Bash(gh api -X DELETE *)",
3733
+ "Bash(gh pr *)",
3734
+ "Bash(gh repo *)",
3735
+ "Bash(gh milestone *)",
3736
+ "Bash(git push *)",
3737
+ "Bash(git commit *)",
3738
+ "Bash(git reset --hard *)",
3739
+ "Bash(git reset * --hard *)",
3740
+ "Bash(git branch -D *)",
3741
+ "Bash(git branch * -D *)",
3742
+ "Bash(git checkout -- .)",
3743
+ "Bash(git clean -f *)",
3744
+ "Bash(git clean * -f *)",
3745
+ "Bash(rm -rf *)",
3746
+ "Bash(rm -fr *)",
3747
+ "Bash(coord approve *)",
3748
+ "Bash(coord merge *)",
3749
+ "Bash(coord assign *)",
3750
+ ]
3751
+
3646
3752
  MOCK_AUTHOR_SYSTEM_PROMPT = """\
3647
3753
  You are an independent mock-author agent for Gate A of a milestone \
3648
3754
  (#930, docs/ORACLE_LOOP.md) — the pre-work architecture gate. You have \
@@ -4238,6 +4344,20 @@ def default_worker_command(spec: AssignmentSpec, *, binary: str = DEFAULT_WORKER
4238
4344
  system_prompt = spec.system_prompt if spec.system_prompt else MILESTONE_CHAT_SYSTEM_PROMPT
4239
4345
  system_prompt += build_deny_prompt(MILESTONE_CHAT_DENY_COMMANDS)
4240
4346
  allowed_tools = "Read,Bash"
4347
+ elif spec.type == "decomposition-chat":
4348
+ # #2533 (ms-67 contract §4c): pull an approved portal submission
4349
+ # into a briefed session that decides oracle-loop-shaped-or-not,
4350
+ # files issue(s) via `coord issue create`, queues them via `coord
4351
+ # drive-queue add`, and records `coord portal link` — a mutating
4352
+ # chat type like milestone-chat above, with its own narrow deny
4353
+ # list (see DECOMPOSITION_CHAT_DENY_COMMANDS) rather than
4354
+ # new-issue-chat's blanket one, since this session's whole job is
4355
+ # to write via those specific `coord` commands.
4356
+ system_prompt = (
4357
+ spec.system_prompt if spec.system_prompt else DECOMPOSITION_CHAT_SYSTEM_PROMPT
4358
+ )
4359
+ system_prompt += build_deny_prompt(DECOMPOSITION_CHAT_DENY_COMMANDS)
4360
+ allowed_tools = "Read,Bash"
4241
4361
  elif spec.type == "mock-author":
4242
4362
  # #930 (docs/ORACLE_LOOP.md, Gate A): an independent mock-author
4243
4363
  # agent renders a viewable mock + writes `contract.md` under
@@ -4435,12 +4555,17 @@ def _user_message_line(text: str) -> bytes:
4435
4555
  # a non-closes-issue original (test-author/mock-author/...) — it gets a
4436
4556
  # worktree and runs `gh pr create`, the same GitHub-mutating shape as
4437
4557
  # `type="work"` had before #1142 gave it its own type, so it must stay here.
4558
+ # ``decomposition-chat`` (#2533) is a chat too — no git worktree — but its
4559
+ # whole job is to mutate GitHub (`coord issue create` / `coord milestone
4560
+ # create`/`add-child`) and the drive queue (`coord drive-queue add`), the
4561
+ # same "no worktree, but real mutation" shape ``milestone-chat`` has above.
4438
4562
  WRITE_CAPABLE_SPEC_TYPES: frozenset[str] = frozenset({
4439
4563
  "work",
4440
4564
  "review",
4441
4565
  "smoke",
4442
4566
  "conflict-fix",
4443
4567
  "milestone-chat",
4568
+ "decomposition-chat",
4444
4569
  "mock-author",
4445
4570
  "test-author",
4446
4571
  "pr-helper",
@@ -284,6 +284,56 @@ def portal_link(
284
284
  )
285
285
 
286
286
 
287
+ # ── #2533 (ms-67 PB-3): pull an approved submission into a decomposition chat ──
288
+
289
+
290
+ @portal_group.command("decompose-chat")
291
+ @_CONFIG_OPTION
292
+ @click.argument("submission_id")
293
+ @click.option(
294
+ "--machine",
295
+ "machine_override",
296
+ default=None,
297
+ help="Force a specific machine (must claim every repo the submission maps to).",
298
+ )
299
+ def portal_decompose_chat(config_path, submission_id: str, machine_override: str | None) -> None:
300
+ """Dispatch a ``type="decomposition-chat"`` session for SUBMISSION_ID (#2533).
301
+
302
+ The TUI's "Pull into decomposition session" action (ms-67 contract §4a/
303
+ §4c) shells this out, exactly the way `coord new-issue-chat` / `coord
304
+ milestone chat` already work — prints the new assignment id to stdout,
305
+ which the TUI binds a `ChatController` overlay to once it appears in the
306
+ board poll.
307
+
308
+ Briefs the session with SUBMISSION_ID's outcome / audience / done-
309
+ definition / constraints, its mapped repo(s), and `coordinator.yml`
310
+ topology context for those repo(s) (:mod:`coord.decomposition_chat`).
311
+ The session's own job — deciding whether the work is oracle-loop-shaped,
312
+ filing issue(s) via `coord issue create`, queueing them via `coord
313
+ drive-queue add`, and recording `coord portal link` — is described in its
314
+ system prompt (`coord.agent.DECOMPOSITION_CHAT_SYSTEM_PROMPT`), not here.
315
+
316
+ Reads through :func:`coord.approved_work.approved_submissions`, which
317
+ (like every other portal-bridge reader) resolves state out of this
318
+ machine's own ``~/.coord/coord.db`` — a daemon-host command, same as
319
+ ``link``/``publish-mocks`` above.
320
+ """
321
+ _refuse_if_thin_client("decompose-chat")
322
+
323
+ from coord.decomposition_chat import dispatch_decomposition_chat
324
+
325
+ cfg = _load_config(config_path)
326
+ try:
327
+ assignment_id, machine = dispatch_decomposition_chat(
328
+ submission_id, cfg, machine_override=machine_override
329
+ )
330
+ except RuntimeError as exc:
331
+ click.secho(f"error: {exc}", fg="red")
332
+ raise SystemExit(1) from exc
333
+ click.echo(assignment_id)
334
+ click.echo(f"# dispatched to {machine}", err=True)
335
+
336
+
287
337
  # ── #2513 (PDR-5): manual "publish mocks to portal" ─────────────────────────
288
338
 
289
339
 
@@ -0,0 +1,260 @@
1
+ """#2533 (ms-67 contract §4c): dispatch a `type="decomposition-chat"` session
2
+ for "Pull into decomposition session" — the TUI action that turns an
3
+ Approved-work-items row (a signed-off portal submission) into a briefed
4
+ `claude -p` chat whose job is to decide whether the work is oracle-loop-shaped,
5
+ file the resulting GitHub issue(s) via `coord issue create`, and queue them via
6
+ `coord drive-queue add`.
7
+
8
+ Used by `coord portal decompose-chat <submission_id>` (the CLI command the
9
+ TUI shells out to, mirroring `coord new-issue-chat` / `coord milestone chat`
10
+ — see `coord/new_issue_chat.py` / `coord/milestone_dispatch.py` for the two
11
+ precedents this module follows).
12
+
13
+ **Reads through the existing bridge, never a new direct portal read**
14
+ (#2533's own briefing): the submission's four briefing fields (outcome /
15
+ audience / done-definition / constraints) plus its server-resolved mapped
16
+ repo(s) come from :func:`coord.approved_work.approved_submissions` — the same
17
+ function that already serves the TUI's `/board` `approved_submissions` block
18
+ (#2532) — rather than re-deriving them from `coord.portal_store` directly.
19
+
20
+ **Machine selection is generalized to every mapped repo** (contract §4c):
21
+ unlike :func:`coord.new_issue_chat.pick_new_issue_chat_machine` (one repo),
22
+ a submission can map to more than one repo, and the picked machine must be
23
+ able to work on ALL of them — a session that can only reach some of the
24
+ repos it's meant to decompose into is worse than refusing outright. §6.7
25
+ flags this as a genuinely open question the contract does not resolve beyond
26
+ "refuse clearly" — this module's refusal is a plain `RuntimeError`, same
27
+ posture every other dispatcher in this file already uses.
28
+ """
29
+ from __future__ import annotations
30
+
31
+ import time
32
+ import uuid
33
+ from typing import TYPE_CHECKING, Any
34
+
35
+ if TYPE_CHECKING: # pragma: no cover - typing only
36
+ from coord.config import Config
37
+ from coord.models import Machine
38
+
39
+ #: Sentinel `issue_title` this module writes onto the dispatched assignment
40
+ #: — mirrors `dispatch_new_issue_chat`'s own `"(new issue draft)"` sentinel
41
+ #: for a chat type with no real GitHub issue yet. The TUI's own bind path
42
+ #: (`tui/src/app/dialogs.rs::maybe_bind_pending_decomposition_chat`) matches
43
+ #: on this exact string (with the submission id substituted in) since
44
+ #: `Assignment` carries no `submission_id` column of its own — see that
45
+ #: function's doc comment for why this is the module's own choice, not
46
+ #: something #2533's contract pins.
47
+ def _issue_title(submission_id: str) -> str:
48
+ return f"decomposition: {submission_id}"
49
+
50
+
51
+ def pick_decomposition_chat_machine(cfg: "Config", repos: list[str]) -> "Machine | None":
52
+ """Pick a machine that can work on EVERY repo in *repos*.
53
+
54
+ Contract §4c: "the picked machine must list **all** of the submission's
55
+ mapped repos ... not just one." Returns the first unpaused machine
56
+ satisfying `m.can_work_on(r)` for every `r` in *repos*. `None` when
57
+ *repos* is empty (nothing to route) or no single machine covers them
58
+ all — callers must treat `None` as a hard refusal, never fall back to a
59
+ partial match.
60
+ """
61
+ from coord.machine_pause import paused_set
62
+
63
+ if not repos:
64
+ return None
65
+ paused = paused_set(cfg.machines)
66
+ for m in cfg.machines:
67
+ if m.name in paused:
68
+ continue
69
+ if all(m.can_work_on(r) for r in repos):
70
+ return m
71
+ return None
72
+
73
+
74
+ def _repo_topology_context(cfg: "Config", repos: list[str]) -> str:
75
+ """One paragraph of `coordinator.yml` topology per mapped repo — the
76
+ "coordinator.yml topology context ... the same way docs/CUSTOMER_PORTAL.md's
77
+ design-round step already uses it" #2533's own body asks for.
78
+
79
+ No design-round dispatcher exists yet to copy a wire shape from (flagged
80
+ in ms-67 contract.md §5's own notes as a proposal, not a read-off-the-
81
+ schema fact) — this is this module's own reasonable rendering: the
82
+ repo's GitHub slug, its `depends_on`, and which configured machines
83
+ claim it.
84
+ """
85
+ lines: list[str] = []
86
+ for repo_name in repos:
87
+ repo_cfg = cfg.repo(repo_name)
88
+ if repo_cfg is None:
89
+ lines.append(f"- {repo_name}: (not found in coordinator.yml — check the mapping)")
90
+ continue
91
+ machines = [m.name for m in cfg.machines if m.can_work_on(repo_name)]
92
+ depends = ", ".join(repo_cfg.depends_on) if repo_cfg.depends_on else "(none)"
93
+ lines.append(
94
+ f"- {repo_cfg.name} ({repo_cfg.github}): depends_on={depends}; "
95
+ f"machines={', '.join(machines) if machines else '(none configured)'}"
96
+ )
97
+ return "\n".join(lines) if lines else "(no mapped repos)"
98
+
99
+
100
+ def build_decomposition_chat_briefing(
101
+ *,
102
+ submission: dict[str, Any],
103
+ topology_context: str,
104
+ ) -> str:
105
+ """Compose the seed briefing the worker sees as its first user message.
106
+
107
+ Carries exactly the four submission fields #2533's own body names
108
+ (outcome / audience / done-definition / constraints) plus the mapped
109
+ repo(s) and `coordinator.yml` topology context — identical substance to
110
+ what the Approved-work-items detail pane already shows the operator
111
+ (ms-67 contract §4b: "nothing hidden between 'looks right in the panel'
112
+ and 'is what the session got'").
113
+ """
114
+ submission_id = submission.get("submission_id", "")
115
+ repos = submission.get("repos") or []
116
+ parts: list[str] = []
117
+ parts.append(f"=== Decomposition chat context for submission {submission_id} ===\n")
118
+ parts.append(f"Client: {submission.get('client', '')}")
119
+ parts.append(
120
+ f"Project: {submission.get('project_id', '')} ({submission.get('project_label', '')})"
121
+ )
122
+ parts.append("")
123
+ parts.append("OUTCOME:")
124
+ parts.append(submission.get("outcome", "") or "(none provided)")
125
+ parts.append("")
126
+ parts.append("AUDIENCE:")
127
+ parts.append(submission.get("audience", "") or "(none provided)")
128
+ parts.append("")
129
+ parts.append("DONE DEFINITION:")
130
+ parts.append(submission.get("done_definition", "") or "(none provided)")
131
+ parts.append("")
132
+ parts.append("CONSTRAINTS:")
133
+ parts.append(submission.get("constraints", "") or "(none provided)")
134
+ parts.append("")
135
+ parts.append(f"MAPPED REPO(S): {', '.join(repos) if repos else '(none)'}")
136
+ parts.append("")
137
+ parts.append("COORDINATOR.YML TOPOLOGY CONTEXT:")
138
+ parts.append(topology_context)
139
+ parts.append("")
140
+ parts.append("---")
141
+ parts.append(
142
+ "Decide whether this is oracle-loop-shaped work (docs/ORACLE_LOOP.md) "
143
+ "or small enough to skip straight to normal dispatch, then produce one "
144
+ "or more GitHub issues via `coord issue create` and queue them via "
145
+ "`coord drive-queue add`. Once queued, record the portal link via "
146
+ "`coord portal link` — see your system prompt for the exact command "
147
+ "and the one-off-issue caveat."
148
+ )
149
+ return "\n".join(parts)
150
+
151
+
152
+ def dispatch_decomposition_chat(
153
+ submission_id: str,
154
+ config: "Config",
155
+ *,
156
+ machine_override: str | None = None,
157
+ ) -> tuple[str, str]:
158
+ """End-to-end: look up *submission_id*, pick a machine, seed the
159
+ briefing, dispatch a ``type="decomposition-chat"`` assignment. Returns
160
+ ``(assignment_id, machine_name)``.
161
+
162
+ Raises ``RuntimeError`` when the submission isn't a currently-approved
163
+ one, has no mapped repo, no machine claims every mapped repo (or the
164
+ forced ``machine_override`` doesn't), or the agent rejects the dispatch.
165
+ """
166
+ from coord.approved_work import approved_submissions
167
+
168
+ rows = approved_submissions(config)
169
+ submission = next((r for r in rows if r.get("submission_id") == submission_id), None)
170
+ if submission is None:
171
+ raise RuntimeError(
172
+ f"submission {submission_id!r} is not a currently-approved portal "
173
+ "submission (coord.approved_work.approved_submissions) — nothing to decompose"
174
+ )
175
+
176
+ repos: list[str] = submission.get("repos") or []
177
+ if not repos:
178
+ raise RuntimeError(
179
+ f"submission {submission_id!r} has no mapped repo (portal.project_repos "
180
+ "in coordinator.yml) — map its project before pulling it into a "
181
+ "decomposition session"
182
+ )
183
+
184
+ if machine_override:
185
+ machine = next((m for m in config.machines if m.name == machine_override), None)
186
+ if machine is None:
187
+ raise RuntimeError(f"machine {machine_override!r} not in coordinator.yml")
188
+ missing = [r for r in repos if not machine.can_work_on(r)]
189
+ if missing:
190
+ raise RuntimeError(
191
+ f"machine {machine_override!r} does not list repo(s) "
192
+ f"{', '.join(missing)} — submission {submission_id!r} maps to "
193
+ f"{', '.join(repos)}, all of which the target machine must claim"
194
+ )
195
+ else:
196
+ picked = pick_decomposition_chat_machine(config, repos)
197
+ if picked is None:
198
+ raise RuntimeError(
199
+ f"no single machine claims every repo submission {submission_id!r} "
200
+ f"maps to ({', '.join(repos)}) — decomposition-chat refuses rather "
201
+ "than dispatching a session that can't reach all of them "
202
+ "(ms-67 contract §4c/§6.7)"
203
+ )
204
+ machine = picked
205
+
206
+ topology_context = _repo_topology_context(config, repos)
207
+ briefing = build_decomposition_chat_briefing(
208
+ submission=submission, topology_context=topology_context
209
+ )
210
+
211
+ resolved_model = config.models.default
212
+ from coord.models import Assignment, Proposal
213
+
214
+ proposal = Proposal(
215
+ id=0,
216
+ machine_name=machine.name,
217
+ repo_name=repos[0],
218
+ # No existing issue yet — same 0 sentinel `new-issue-chat` uses.
219
+ issue_number=0,
220
+ issue_title=_issue_title(submission_id),
221
+ rationale="decomposition-chat",
222
+ briefing=briefing,
223
+ model=resolved_model,
224
+ type="decomposition-chat",
225
+ required_gates=[],
226
+ )
227
+
228
+ from coord.dispatch import dispatch_with_retry
229
+ from coord.state import record_dispatched_assignment
230
+
231
+ response = dispatch_with_retry(
232
+ proposal,
233
+ config,
234
+ max_retries=config.concurrency.max_retries,
235
+ backoff_base=config.concurrency.backoff_base,
236
+ )
237
+
238
+ assignment_id = response.get("id") or uuid.uuid4().hex[:12]
239
+
240
+ repo_cfg = config.repo(repos[0])
241
+ asg = Assignment(
242
+ machine_name=machine.name,
243
+ repo_name=repos[0],
244
+ issue_number=0,
245
+ issue_title=_issue_title(submission_id),
246
+ files_allowed=[],
247
+ files_forbidden=[],
248
+ briefing=briefing,
249
+ assignment_id=assignment_id,
250
+ status="running",
251
+ dispatched_at=time.time(),
252
+ type="decomposition-chat",
253
+ model=resolved_model,
254
+ )
255
+ record_dispatched_assignment(
256
+ assignment=asg,
257
+ repo_github=repo_cfg.github if repo_cfg is not None else repos[0],
258
+ )
259
+
260
+ return assignment_id, machine.name