code-coordinator 0.5.210__tar.gz → 0.5.213__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 (805) hide show
  1. code_coordinator-0.5.213/.gitignore +44 -0
  2. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/PKG-INFO +1 -1
  3. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/code_coordinator.egg-info/PKG-INFO +1 -1
  4. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/code_coordinator.egg-info/SOURCES.txt +6 -0
  5. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/code_coordinator.egg-info/scm_file_list.json +6 -0
  6. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/code_coordinator.egg-info/scm_version.json +2 -2
  7. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/commands/drive_queue.py +165 -0
  8. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/commands/portal.py +183 -0
  9. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/merge_queue.py +10 -12
  10. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/portal_sync.py +61 -0
  11. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/docs/ORACLE_LOOP.md +10 -2
  12. code_coordinator-0.5.213/tests/acceptance/ms-67/contract.md +518 -0
  13. code_coordinator-0.5.213/tests/acceptance/ms-67/mocks/approved-items-chat-opened.screen +40 -0
  14. code_coordinator-0.5.213/tests/acceptance/ms-67/mocks/approved-items-context-menu.screen +40 -0
  15. code_coordinator-0.5.213/tests/acceptance/ms-67/mocks/approved-items-detail.screen +40 -0
  16. code_coordinator-0.5.213/tests/acceptance/ms-67/mocks/approved-items-empty.screen +40 -0
  17. code_coordinator-0.5.213/tests/acceptance/ms-67/mocks/approved-items-populated.screen +40 -0
  18. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_cli_drive_queue.py +143 -0
  19. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_cli_portal.py +244 -0
  20. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_portal_sync.py +76 -0
  21. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_thin_client_board_audit.py +16 -0
  22. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tui/src/app/dialogs.rs +72 -7
  23. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tui/src/app/pipeline.rs +732 -0
  24. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tui/src/app/tests.rs +696 -0
  25. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tui/src/commands.rs +312 -4
  26. code_coordinator-0.5.210/.gitignore +0 -25
  27. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/.claude/commands/board.md +0 -0
  28. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/.claude/commands/complete-session.md +0 -0
  29. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/.claude/commands/coordinator.md +0 -0
  30. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/.githooks/_lib.sh +0 -0
  31. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/.githooks/post-checkout +0 -0
  32. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/.githooks/post-commit +0 -0
  33. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/.githooks/post-merge +0 -0
  34. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  35. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/.github/coord-ci-acceptance.yml +0 -0
  36. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/.github/workflows/auto-release.yml +0 -0
  37. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/.github/workflows/cargo-test.yml +0 -0
  38. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/.github/workflows/publish.yml +0 -0
  39. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/.github/workflows/release-tui.yml +0 -0
  40. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/.github/workflows/test.yml +0 -0
  41. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/CLAUDE.md +0 -0
  42. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/GOAL.md +0 -0
  43. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/LICENSE +0 -0
  44. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/MANIFEST.in +0 -0
  45. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/README.md +0 -0
  46. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/code_coordinator.egg-info/dependency_links.txt +0 -0
  47. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/code_coordinator.egg-info/entry_points.txt +0 -0
  48. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/code_coordinator.egg-info/requires.txt +0 -0
  49. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/code_coordinator.egg-info/top_level.txt +0 -0
  50. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/__init__.py +0 -0
  51. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/_board_mapping.py +0 -0
  52. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/acceptance.py +0 -0
  53. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/acceptance_drivers.py +0 -0
  54. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/agent.py +0 -0
  55. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/agent_app.py +0 -0
  56. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/agent_update.py +0 -0
  57. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/agents/opencode/.gitignore +0 -0
  58. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/agents/opencode/agents/work.md +0 -0
  59. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/agents/opencode/routing.jsonc +0 -0
  60. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/audit.py +0 -0
  61. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/auto_loop.py +0 -0
  62. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/block_log.py +0 -0
  63. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/board_bool_guard.py +0 -0
  64. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/board_service.py +0 -0
  65. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/board_wire.py +0 -0
  66. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/brain.py +0 -0
  67. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/branch_model.py +0 -0
  68. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/bug_intake.py +0 -0
  69. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/cargo_cache.py +0 -0
  70. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/ci_fix.py +0 -0
  71. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/ci_github.py +0 -0
  72. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/ci_gitlab.py +0 -0
  73. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/ci_store.py +0 -0
  74. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/claim.py +0 -0
  75. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/cli.py +0 -0
  76. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/client.py +0 -0
  77. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/commands/__init__.py +0 -0
  78. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/commands/_common.py +0 -0
  79. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/commands/acceptance.py +0 -0
  80. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/commands/agent_ops.py +0 -0
  81. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/commands/audit.py +0 -0
  82. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/commands/chat.py +0 -0
  83. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/commands/dispatch.py +0 -0
  84. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/commands/dispatch_workers.py +0 -0
  85. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/commands/drive.py +0 -0
  86. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/commands/gate_a.py +0 -0
  87. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/commands/gates.py +0 -0
  88. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/commands/issues.py +0 -0
  89. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/commands/lifecycle.py +0 -0
  90. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/commands/merge.py +0 -0
  91. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/commands/milestone.py +0 -0
  92. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/commands/plan_followup.py +0 -0
  93. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/commands/plans.py +0 -0
  94. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/commands/release.py +0 -0
  95. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/commands/repo.py +0 -0
  96. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/commands/report.py +0 -0
  97. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/commands/review.py +0 -0
  98. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/commands/scorecard.py +0 -0
  99. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/commands/sessions.py +0 -0
  100. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/commands/setup.py +0 -0
  101. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/commands/status.py +0 -0
  102. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/commands/terminal.py +0 -0
  103. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/commands/test_gate.py +0 -0
  104. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/commands/tui.py +0 -0
  105. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/comments.py +0 -0
  106. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/config.py +0 -0
  107. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/config_reload.py +0 -0
  108. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/confirm_test.py +0 -0
  109. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/conflict_fix.py +0 -0
  110. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/dao.py +0 -0
  111. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/dashboard/__init__.py +0 -0
  112. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/dashboard/fixture.py +0 -0
  113. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/dashboard/index.html +0 -0
  114. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/dashboard/server.py +0 -0
  115. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/dashboard/terminal.py +0 -0
  116. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/db.py +0 -0
  117. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/dead_end.py +0 -0
  118. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/deploy/README.md +0 -0
  119. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/deploy/coord-agent.service +0 -0
  120. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/deploy/coord-db-backup.service +0 -0
  121. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/deploy/coord-db-backup.sh +0 -0
  122. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/deploy/coord-db-backup.timer +0 -0
  123. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/deploy/coord-drive-queue.service +0 -0
  124. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/deploy/coord-drive-queue.timer +0 -0
  125. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/deploy/coord-notify.service +0 -0
  126. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/deploy/coord-notify.timer +0 -0
  127. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/deploy/coord-release-propagate.service +0 -0
  128. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/deploy/coord-release-propagate.timer +0 -0
  129. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/deploy/coord-release-window.service +0 -0
  130. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/deploy/coord-release-window.timer +0 -0
  131. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/deploy/coord-serve.service +0 -0
  132. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/deploy/coord-web-dist-build.service +0 -0
  133. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/deploy/coord-web-dist-build.timer +0 -0
  134. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/deploy/coord-web.service +0 -0
  135. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/deploy_manifest.py +0 -0
  136. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/deploy_units.py +0 -0
  137. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/deps.py +0 -0
  138. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/diagnose.py +0 -0
  139. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/dispatch.py +0 -0
  140. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/dist_name.py +0 -0
  141. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/drive.py +0 -0
  142. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/drive_queue.py +0 -0
  143. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/drive_state.py +0 -0
  144. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/events.py +0 -0
  145. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/failure_class.py +0 -0
  146. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/filelock.py +0 -0
  147. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/fleet_config_health.py +0 -0
  148. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/forge_availability.py +0 -0
  149. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/freshness.py +0 -0
  150. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/gate_a.py +0 -0
  151. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/gate_b.py +0 -0
  152. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/gate_snapshot.py +0 -0
  153. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/gates.py +0 -0
  154. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/github_ops.py +0 -0
  155. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/goal.py +0 -0
  156. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/graph_health.py +0 -0
  157. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/health/__init__.py +0 -0
  158. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/health/aggregate.py +0 -0
  159. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/health/checks/__init__.py +0 -0
  160. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/health/checks/agent_install.py +0 -0
  161. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/health/checks/cargo_targets.py +0 -0
  162. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/health/checks/claude_binary.py +0 -0
  163. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/health/checks/coord_web_ci_pin.py +0 -0
  164. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/health/checks/deploy_lane_facts.py +0 -0
  165. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/health/checks/disk.py +0 -0
  166. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/health/checks/fleet_board.py +0 -0
  167. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  168. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/health/checks/fleet_phantom.py +0 -0
  169. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/health/checks/fleet_unit_drift.py +0 -0
  170. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/health/checks/graph.py +0 -0
  171. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/health/checks/graphify_cli.py +0 -0
  172. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/health/checks/index_lock.py +0 -0
  173. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/health/checks/plan_usage.py +0 -0
  174. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/health/checks/repo_state.py +0 -0
  175. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/health/checks/spawned_coord.py +0 -0
  176. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/health/checks/timer_active.py +0 -0
  177. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/health/checks/toolchain.py +0 -0
  178. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/health/checks/unit_drift.py +0 -0
  179. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/health/checks/unit_enablement.py +0 -0
  180. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/health/checks/worktrees.py +0 -0
  181. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/health/cli.py +0 -0
  182. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/health/context.py +0 -0
  183. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/health/fleet_snapshot.py +0 -0
  184. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/health/models.py +0 -0
  185. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/health/pypi.py +0 -0
  186. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/health/registry.py +0 -0
  187. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/health/render.py +0 -0
  188. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/health/units.py +0 -0
  189. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/hooks.py +0 -0
  190. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/housekeeping.py +0 -0
  191. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/interactive.py +0 -0
  192. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/issue_store.py +0 -0
  193. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/liveness_auditor.py +0 -0
  194. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/machine_pause.py +0 -0
  195. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/milestone_chat.py +0 -0
  196. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/milestone_dispatch.py +0 -0
  197. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/milestone_gate.py +0 -0
  198. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/milestone_order.py +0 -0
  199. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/mock_author.py +0 -0
  200. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/models.py +0 -0
  201. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/network.py +0 -0
  202. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/new_issue_chat.py +0 -0
  203. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/notifier/__init__.py +0 -0
  204. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/notifier/baseline.py +0 -0
  205. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/notifier/cli.py +0 -0
  206. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/notifier/collect.py +0 -0
  207. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/notifier/digest.py +0 -0
  208. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/notifier/models.py +0 -0
  209. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/notifier/predicate.py +0 -0
  210. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/notifier/service.py +0 -0
  211. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/notifier/store.py +0 -0
  212. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/notifier/transport.py +0 -0
  213. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/notify.py +0 -0
  214. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/openapi.py +0 -0
  215. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/overlap_fence.py +0 -0
  216. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/overlap_predict.py +0 -0
  217. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/parentage.py +0 -0
  218. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/parentage_github.py +0 -0
  219. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/pipeline.py +0 -0
  220. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/plan_parser.py +0 -0
  221. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/plans.py +0 -0
  222. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/platform_paths.py +0 -0
  223. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/portal_bridge.py +0 -0
  224. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/portal_store.py +0 -0
  225. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/pr_body_lint.py +0 -0
  226. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/prereqs.py +0 -0
  227. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/progress.py +0 -0
  228. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/providers/__init__.py +0 -0
  229. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/providers/base.py +0 -0
  230. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/providers/claude.py +0 -0
  231. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/providers/claude_pty.py +0 -0
  232. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/providers/opencode.py +0 -0
  233. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/queue_diagnose.py +0 -0
  234. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/reconcile.py +0 -0
  235. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/reconcile_tick.py +0 -0
  236. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/refine_chat.py +0 -0
  237. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/release_cordon.py +0 -0
  238. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/release_propagate.py +0 -0
  239. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/release_verify.py +0 -0
  240. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/release_window.py +0 -0
  241. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/repo_edit.py +0 -0
  242. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/repo_onboard.py +0 -0
  243. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/reports.py +0 -0
  244. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/revalidate.py +0 -0
  245. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/review.py +0 -0
  246. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/scorecard.py +0 -0
  247. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/self_health.py +0 -0
  248. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/serve_app.py +0 -0
  249. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  250. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  251. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  252. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  253. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  254. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/skills/portal-followup/SKILL.md +0 -0
  255. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  256. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  257. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/skills/update-issue/SKILL.md +0 -0
  258. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/smoke.py +0 -0
  259. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/spend_ceiling.py +0 -0
  260. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/split_work.py +0 -0
  261. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/stage_projection.py +0 -0
  262. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/state.py +0 -0
  263. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/test_author.py +0 -0
  264. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/test_chat.py +0 -0
  265. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/test_orchestrator.py +0 -0
  266. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/test_report.py +0 -0
  267. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/tui_release.py +0 -0
  268. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/usage.py +0 -0
  269. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/usage_limits.py +0 -0
  270. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/usage_rollup.py +0 -0
  271. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coord/worker_events.py +0 -0
  272. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/coordinator.example.yml +0 -0
  273. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/deploy/coord-agent.service +0 -0
  274. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/deploy/coord-db-backup.service +0 -0
  275. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/deploy/coord-db-backup.sh +0 -0
  276. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/deploy/coord-db-backup.timer +0 -0
  277. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/deploy/coord-drive-queue.service +0 -0
  278. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/deploy/coord-drive-queue.timer +0 -0
  279. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/deploy/coord-notify.service +0 -0
  280. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/deploy/coord-notify.timer +0 -0
  281. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/deploy/coord-release-propagate.service +0 -0
  282. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/deploy/coord-release-propagate.timer +0 -0
  283. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/deploy/coord-release-window.service +0 -0
  284. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/deploy/coord-release-window.timer +0 -0
  285. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/deploy/coord-serve.service +0 -0
  286. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/deploy/coord-web-dist-build.service +0 -0
  287. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/deploy/coord-web-dist-build.sh +0 -0
  288. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/deploy/coord-web-dist-build.timer +0 -0
  289. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/deploy/coord-web-rollback.sh +0 -0
  290. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/deploy/coord-web.service +0 -0
  291. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/deploy/node-shim.sh +0 -0
  292. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  293. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/docs/ADR_COORD_WEB_CI.md +0 -0
  294. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/docs/ADR_COORD_WEB_DIST.md +0 -0
  295. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/docs/AGENT_OPERATIONS.md +0 -0
  296. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/docs/ARCHITECTURE.md +0 -0
  297. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/docs/ARCH_SECURITY_GATES.md +0 -0
  298. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/docs/COCKPIT.md +0 -0
  299. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/docs/CONTROL_CENTER.md +0 -0
  300. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/docs/COST_DISCIPLINE.md +0 -0
  301. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/docs/CROSS_PLATFORM.md +0 -0
  302. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/docs/CUSTOMER_PORTAL.md +0 -0
  303. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/docs/DRIVE_QUEUE.md +0 -0
  304. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/docs/EPHEMERAL_WORKERS.md +0 -0
  305. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/docs/FORGE_MIGRATION.md +0 -0
  306. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/docs/GRAPHIFY_SETUP.md +0 -0
  307. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/docs/ISSUE_GUIDANCE.md +0 -0
  308. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/docs/MAC_MINI.md +0 -0
  309. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  310. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/docs/NOTIFIER.md +0 -0
  311. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/docs/OPENCODE_VERIFICATION.md +0 -0
  312. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/docs/OPERATING_GOTCHAS.md +0 -0
  313. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/docs/PHONE_WEBAPP.md +0 -0
  314. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/docs/PIPELINE_V2.md +0 -0
  315. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/docs/PLATFORM_EVOLUTION.md +0 -0
  316. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/docs/SECOND_BACKEND.md +0 -0
  317. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/docs/STORE_SERVICE.md +0 -0
  318. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  319. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/docs/WEB_CONTROL_CENTER.md +0 -0
  320. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/docs/WSL_WINDOWS_WORKER.md +0 -0
  321. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/docs/mocks/web/README.md +0 -0
  322. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/docs/mocks/web/_tokens.css +0 -0
  323. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/docs/mocks/web/issue-detail.html +0 -0
  324. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/docs/mocks/web/pipeline-narrow.html +0 -0
  325. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/docs/mocks/web/pipeline-wide.html +0 -0
  326. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/graphify-out/.gitignore +0 -0
  327. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/install-agent.sh +0 -0
  328. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/pyproject.toml +0 -0
  329. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/scripts/audit_review_verdict_overrides.py +0 -0
  330. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  331. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/scripts/azure-workers/build-worker-image.sh +0 -0
  332. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/scripts/azure-workers/coordinator-machine.py +0 -0
  333. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/scripts/azure-workers/epic-down.sh +0 -0
  334. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/scripts/azure-workers/epic-up.sh +0 -0
  335. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/scripts/azure-workers/preflight.sh +0 -0
  336. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/scripts/azure-workers/provision-worker.sh +0 -0
  337. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  338. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  339. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/scripts/azure-workers/verify-github-token.sh +0 -0
  340. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/scripts/check_gh_argv_containment.py +0 -0
  341. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/scripts/codegen.py +0 -0
  342. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/scripts/coord-test-runner.sh +0 -0
  343. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/scripts/drive-batch.sh +0 -0
  344. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/scripts/gen_board_fixture.py +0 -0
  345. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/scripts/gen_mock_index.py +0 -0
  346. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/scripts/next_release_tag.py +0 -0
  347. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/scripts/run_tests_in_populated_home.sh +0 -0
  348. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/scripts/run_tests_without_gh.sh +0 -0
  349. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/scripts/smoke_437_interactive.py +0 -0
  350. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/scripts/verify_878_review_capture.py +0 -0
  351. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/scripts/verify_release_published.py +0 -0
  352. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/scripts/verify_release_wheel.py +0 -0
  353. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/setup.cfg +0 -0
  354. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/SMOKE_SET.md +0 -0
  355. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/__init__.py +0 -0
  356. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  357. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/acceptance/ms-33/contract.md +0 -0
  358. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/acceptance/ms-33/manifest.yml +0 -0
  359. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  360. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  361. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  362. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  363. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/acceptance/ms-37/conftest.py +0 -0
  364. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/acceptance/ms-37/contract.md +0 -0
  365. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/acceptance/ms-37/manifest.yml +0 -0
  366. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  367. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  368. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/acceptance/ms-38/contract.md +0 -0
  369. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/acceptance/ms-38/manifest.yml +0 -0
  370. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  371. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  372. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  373. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  374. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  375. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  376. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  377. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  378. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  379. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  380. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/acceptance/ms-51/contract.md +0 -0
  381. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  382. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  383. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/acceptance/ms-51/manifest.yml +0 -0
  384. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  385. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/acceptance/ms-51/tsconfig.json +0 -0
  386. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/acceptance/ms-65/board_split_2288.rs +0 -0
  387. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
  388. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
  389. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/acceptance/ms-65/contract.md +0 -0
  390. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
  391. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/acceptance/ms-65/manifest.yml +0 -0
  392. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
  393. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
  394. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
  395. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
  396. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
  397. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
  398. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
  399. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
  400. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
  401. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
  402. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/acceptance/ms-65/tabs_persistence_2286.rs +0 -0
  403. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  404. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/conftest.py +0 -0
  405. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/fixtures/board-pipeline-basic.json +0 -0
  406. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  407. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  408. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  409. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  410. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/fixtures/playwright/all_pass.json +0 -0
  411. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  412. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/fixtures/playwright/mixed_fail.json +0 -0
  413. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  414. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  415. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/fixtures/playwright/skip.json +0 -0
  416. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/fixtures/playwright/truncated.json +0 -0
  417. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  418. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  419. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  420. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  421. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  422. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  423. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  424. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  425. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_acceptance.py +0 -0
  426. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_acceptance_drivers.py +0 -0
  427. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_agent.py +0 -0
  428. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_agent_api_error.py +0 -0
  429. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_agent_app.py +0 -0
  430. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_agent_branch_base.py +0 -0
  431. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_agent_branch_capture.py +0 -0
  432. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_agent_config_free_1712.py +0 -0
  433. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_agent_deploy_units_endpoint.py +0 -0
  434. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_agent_dirty_worktree.py +0 -0
  435. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  436. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_agent_graph_self_heal.py +0 -0
  437. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_agent_health_h3.py +0 -0
  438. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_agent_idle_restart.py +0 -0
  439. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_agent_push_failure.py +0 -0
  440. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_agent_reap.py +0 -0
  441. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_agent_repos_and_pull.py +0 -0
  442. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_agent_restart_services_endpoint.py +0 -0
  443. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_agent_skills_self_heal.py +0 -0
  444. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_agent_startup_diagnostics.py +0 -0
  445. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_agent_update.py +0 -0
  446. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_agent_update_bluegreen.py +0 -0
  447. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_agent_usage_limit.py +0 -0
  448. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_agent_zero_commit.py +0 -0
  449. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_ambient_home_isolation.py +0 -0
  450. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_approve_reject_plan.py +0 -0
  451. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_approve_usage_gate.py +0 -0
  452. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_assignment_already_recorded_daemon.py +0 -0
  453. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_audit_log.py +0 -0
  454. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_audit_outcome.py +0 -0
  455. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_audit_query.py +0 -0
  456. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_auto_loop.py +0 -0
  457. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_auto_release_publish_2035.py +0 -0
  458. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_base_checkout_restore.py +0 -0
  459. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_block_log.py +0 -0
  460. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_board_cap_762.py +0 -0
  461. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_board_fixture.py +0 -0
  462. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_board_read_path.py +0 -0
  463. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_board_service.py +0 -0
  464. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_board_state.py +0 -0
  465. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_board_wire.py +0 -0
  466. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_brain.py +0 -0
  467. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_branch_model.py +0 -0
  468. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_bug_intake.py +0 -0
  469. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_build_worker_image_env_update.py +0 -0
  470. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_cargo_cache.py +0 -0
  471. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_check_gh_argv_containment.py +0 -0
  472. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_ci_acceptance_gate_1950.py +0 -0
  473. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_ci_fix.py +0 -0
  474. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_ci_gitlab.py +0 -0
  475. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_ci_parity_2091.py +0 -0
  476. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_ci_store.py +0 -0
  477. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_claim.py +0 -0
  478. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_cli_acceptance.py +0 -0
  479. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_cli_assign.py +0 -0
  480. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  481. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_cli_assign_interactive_remote.py +0 -0
  482. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_cli_assign_provider.py +0 -0
  483. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  484. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_cli_audit.py +0 -0
  485. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_cli_chat_continue.py +0 -0
  486. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_cli_decide.py +0 -0
  487. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_cli_diagnose_config_provenance.py +0 -0
  488. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_cli_diagnose_forge_availability.py +0 -0
  489. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_cli_diagnose_graph.py +0 -0
  490. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_cli_diagnose_self.py +0 -0
  491. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_cli_doctor.py +0 -0
  492. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_cli_doctor_config_free_1801.py +0 -0
  493. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  494. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_cli_drive.py +0 -0
  495. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_cli_escalate.py +0 -0
  496. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_cli_fix_headless_review.py +0 -0
  497. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_cli_gate_a.py +0 -0
  498. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_cli_install_drift.py +0 -0
  499. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_cli_install_skills.py +0 -0
  500. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_cli_issue_create_label.py +0 -0
  501. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_cli_issue_reopen.py +0 -0
  502. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_cli_merge.py +0 -0
  503. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_cli_milestone_assign.py +0 -0
  504. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_cli_milestone_capture.py +0 -0
  505. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_cli_milestone_chat_add_child.py +0 -0
  506. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_cli_milestone_dispatch.py +0 -0
  507. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_cli_milestone_gate_b.py +0 -0
  508. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_cli_milestone_gate_c.py +0 -0
  509. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_cli_milestone_order.py +0 -0
  510. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  511. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_cli_milestone_ship.py +0 -0
  512. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_cli_network.py +0 -0
  513. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_cli_new_issue_chat.py +0 -0
  514. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_cli_plans.py +0 -0
  515. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_cli_pull_artifact.py +0 -0
  516. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_cli_queue.py +0 -0
  517. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_cli_reattach_sessions.py +0 -0
  518. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_cli_refine_board.py +0 -0
  519. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_cli_release_preflight.py +0 -0
  520. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_cli_release_propagate.py +0 -0
  521. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_cli_release_window.py +0 -0
  522. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_cli_repo_2220.py +0 -0
  523. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_cli_scorecard.py +0 -0
  524. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_cli_set_review_findings.py +0 -0
  525. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_cli_status_advisory_terminal.py +0 -0
  526. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_cli_status_merge_queue.py +0 -0
  527. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_cli_status_provider.py +0 -0
  528. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_cli_status_review_finalizing.py +0 -0
  529. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_cli_status_test_failed_tag.py +0 -0
  530. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_cli_status_usage_limit.py +0 -0
  531. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_cli_sync_comments_873.py +0 -0
  532. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_cli_test_plan.py +0 -0
  533. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_cli_track.py +0 -0
  534. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_cli_tui_update.py +0 -0
  535. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_cli_wait.py +0 -0
  536. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_client_base_install.py +0 -0
  537. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_comments.py +0 -0
  538. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_completion_summary.py +0 -0
  539. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_config.py +0 -0
  540. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_config_acceptance.py +0 -0
  541. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_config_audit.py +0 -0
  542. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_config_pricing.py +0 -0
  543. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  544. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_config_usage_gate.py +0 -0
  545. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_confirm_test.py +0 -0
  546. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_conflict_fix.py +0 -0
  547. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_conflict_fix_semantic.py +0 -0
  548. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_coord_test.py +0 -0
  549. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_coord_test_runner_baseline.py +0 -0
  550. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_coord_test_runner_populated_home.py +0 -0
  551. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_coord_test_runner_routing.py +0 -0
  552. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_coord_test_runner_toolchain.py +0 -0
  553. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_coord_web_sse_restart_live.py +0 -0
  554. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_coordinator_machine.py +0 -0
  555. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_cross_platform_imports.py +0 -0
  556. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_dashboard.py +0 -0
  557. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_dashboard_fixture.py +0 -0
  558. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_dashboard_terminal.py +0 -0
  559. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_dashboard_terminal_live.py +0 -0
  560. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_db.py +0 -0
  561. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_dead_end.py +0 -0
  562. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_deploy_coord_db_backup.py +0 -0
  563. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_deploy_coord_web_dist.py +0 -0
  564. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_deploy_coord_web_rollback.py +0 -0
  565. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_deploy_drive_queue_unit.py +0 -0
  566. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_deploy_manifest.py +0 -0
  567. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_deploy_units_lane.py +0 -0
  568. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_deploy_web_unit.py +0 -0
  569. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_deps.py +0 -0
  570. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_diagnose.py +0 -0
  571. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_dispatch.py +0 -0
  572. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_dispatch_target_validation.py +0 -0
  573. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_dist_name.py +0 -0
  574. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_done_housekeeping.py +0 -0
  575. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_drive.py +0 -0
  576. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_drive_queue.py +0 -0
  577. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_drive_state.py +0 -0
  578. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_drive_tmux.py +0 -0
  579. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_epic_up_capability_detection.py +0 -0
  580. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  581. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_epic_up_image_provenance.py +0 -0
  582. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_errors.py +0 -0
  583. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_events.py +0 -0
  584. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_failure_class.py +0 -0
  585. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_filelock.py +0 -0
  586. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  587. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_fix_of_force_override.py +0 -0
  588. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_fleet_config_health.py +0 -0
  589. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_fleet_health_probes.py +0 -0
  590. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_fleet_health_snapshot.py +0 -0
  591. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_forge_availability.py +0 -0
  592. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_freshness.py +0 -0
  593. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_gate_a.py +0 -0
  594. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_gate_b.py +0 -0
  595. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_gate_snapshot_staleness.py +0 -0
  596. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_gates.py +0 -0
  597. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  598. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_gen_mock_index.py +0 -0
  599. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_generated_types_fixture.py +0 -0
  600. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_github_ops.py +0 -0
  601. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_goal.py +0 -0
  602. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_graph_health.py +0 -0
  603. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_graph_selfheal_absent_2237.py +0 -0
  604. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_handoff.py +0 -0
  605. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_health_checks.py +0 -0
  606. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_health_cli.py +0 -0
  607. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_health_cli_graph.py +0 -0
  608. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_health_config.py +0 -0
  609. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_health_context.py +0 -0
  610. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_health_coord_web_ci_pin.py +0 -0
  611. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_health_deploy_lane_facts.py +0 -0
  612. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_health_incident_regression.py +0 -0
  613. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_health_pypi.py +0 -0
  614. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_health_registry.py +0 -0
  615. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_health_timer_active.py +0 -0
  616. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_health_toolchain.py +0 -0
  617. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_health_unit_drift.py +0 -0
  618. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_health_unit_enablement.py +0 -0
  619. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_hooks.py +0 -0
  620. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_human_attended_437.py +0 -0
  621. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_init.py +0 -0
  622. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_integration.py +0 -0
  623. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_interactive_briefing_echo.py +0 -0
  624. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_interactive_prefill_state.py +0 -0
  625. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_interactive_session_relaunch.py +0 -0
  626. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_interactive_test_verdict_backstop.py +0 -0
  627. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_interactive_token_attribution.py +0 -0
  628. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_interactive_worktree.py +0 -0
  629. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_issue_store_seam.py +0 -0
  630. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_liveness_auditor.py +0 -0
  631. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_liveness_notify.py +0 -0
  632. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_machine_pause.py +0 -0
  633. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_merge_queue.py +0 -0
  634. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_merge_verify.py +0 -0
  635. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_milestone_chat.py +0 -0
  636. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_milestone_dispatch.py +0 -0
  637. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_milestone_gate.py +0 -0
  638. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_milestone_order.py +0 -0
  639. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_milestone_seam.py +0 -0
  640. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_mock_author.py +0 -0
  641. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_model_tiering.py +0 -0
  642. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_models.py +0 -0
  643. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_models_config_labels.py +0 -0
  644. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_needs_attention.py +0 -0
  645. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_network.py +0 -0
  646. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_new_issue_chat.py +0 -0
  647. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_next_release_tag.py +0 -0
  648. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_node_shim.py +0 -0
  649. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_notifier_baseline.py +0 -0
  650. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_notifier_cli.py +0 -0
  651. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_notifier_collect.py +0 -0
  652. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_notifier_config.py +0 -0
  653. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_notifier_drive_seam.py +0 -0
  654. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_notifier_isolation.py +0 -0
  655. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_notifier_predicate.py +0 -0
  656. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_notifier_quiet_hours.py +0 -0
  657. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_notifier_service.py +0 -0
  658. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_notify.py +0 -0
  659. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_notify_drain.py +0 -0
  660. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_openapi.py +0 -0
  661. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_operational_defaults.py +0 -0
  662. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_overlap_fence.py +0 -0
  663. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_overlap_predict.py +0 -0
  664. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_packaged_deploy_units.py +0 -0
  665. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_parentage.py +0 -0
  666. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_paste_landed.py +0 -0
  667. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_pipeline.py +0 -0
  668. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_plan_followup_approve_plan_command.py +0 -0
  669. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_plan_followup_pr_command.py +0 -0
  670. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_plan_followup_review_command.py +0 -0
  671. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_plan_only.py +0 -0
  672. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_plan_parser.py +0 -0
  673. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_platform_paths.py +0 -0
  674. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_portal_bridge.py +0 -0
  675. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_portal_config.py +0 -0
  676. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_portal_store.py +0 -0
  677. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_pr_body_lint.py +0 -0
  678. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_prereqs.py +0 -0
  679. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_production_db_guard.py +0 -0
  680. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_progress.py +0 -0
  681. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_provider_seam.py +0 -0
  682. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_providers.py +0 -0
  683. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_providers_config_labels.py +0 -0
  684. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_providers_pty.py +0 -0
  685. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_quiet_hours.py +0 -0
  686. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_quiet_hours_store_2146.py +0 -0
  687. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_reap_merged_sessions.py +0 -0
  688. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_reap_stale_interactive_tick.py +0 -0
  689. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_reconcile.py +0 -0
  690. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_reconcile_branch.py +0 -0
  691. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_reconcile_completions.py +0 -0
  692. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_reconcile_merges.py +0 -0
  693. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_reconcile_no_agent_record.py +0 -0
  694. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_reconcile_tick.py +0 -0
  695. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_reconcile_usage_limit_done.py +0 -0
  696. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_refine_chat.py +0 -0
  697. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_release_cordon_2101.py +0 -0
  698. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  699. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_release_cordon_deadlock_2240.py +0 -0
  700. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_release_cordon_stuck_2490.py +0 -0
  701. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_release_propagate.py +0 -0
  702. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_release_unified_1242.py +0 -0
  703. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_release_verify.py +0 -0
  704. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_release_window.py +0 -0
  705. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_remote_auto_prune.py +0 -0
  706. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_remote_interactive_reaper.py +0 -0
  707. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_repo_edit_2220.py +0 -0
  708. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_repo_graph_fleet_2237.py +0 -0
  709. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_repo_onboard_2220.py +0 -0
  710. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_report_result_push.py +0 -0
  711. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_reports.py +0 -0
  712. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_retry.py +0 -0
  713. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_retry_advisory_1606.py +0 -0
  714. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_retry_type_1636.py +0 -0
  715. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_revalidate.py +0 -0
  716. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_review.py +0 -0
  717. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_review_end_review_without_verdict.py +0 -0
  718. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_review_parse_failure_diagnostic.py +0 -0
  719. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_review_reaffirm.py +0 -0
  720. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_review_state.py +0 -0
  721. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_review_verdict_backstop.py +0 -0
  722. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_review_verdict_override_audit.py +0 -0
  723. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_review_verdict_relay.py +0 -0
  724. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_review_zero_commits.py +0 -0
  725. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_scoped_review_wiring.py +0 -0
  726. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_scorecard.py +0 -0
  727. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_self_health.py +0 -0
  728. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_serve.py +0 -0
  729. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_serve_app_board_trim.py +0 -0
  730. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_session.py +0 -0
  731. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_slice_issue_attribution.py +0 -0
  732. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_smoke.py +0 -0
  733. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_smoke_live_checkout_restore.py +0 -0
  734. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_smoke_workflow.py +0 -0
  735. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_spend_ceiling.py +0 -0
  736. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_spend_ceiling_coordinator.py +0 -0
  737. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_split.py +0 -0
  738. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_split_work.py +0 -0
  739. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_stage_projection.py +0 -0
  740. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_stalled_pipeline.py +0 -0
  741. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_state.py +0 -0
  742. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_state_review_findings_daemon.py +0 -0
  743. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_status_fleet_footer.py +0 -0
  744. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_stop_1567.py +0 -0
  745. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_stuck.py +0 -0
  746. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_terminal_command.py +0 -0
  747. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_test_author.py +0 -0
  748. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_test_chat.py +0 -0
  749. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_test_orchestrator.py +0 -0
  750. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_test_report.py +0 -0
  751. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_test_verdict_parsing.py +0 -0
  752. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_test_verdict_transcript_floor.py +0 -0
  753. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_thin_client_config_load_1080.py +0 -0
  754. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_thin_client_daemon_routing_906.py +0 -0
  755. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_tmux_host.py +0 -0
  756. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_tmux_session.py +0 -0
  757. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_transcript_floor.py +0 -0
  758. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_usage.py +0 -0
  759. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_usage_limits.py +0 -0
  760. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_usage_rollup.py +0 -0
  761. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_venv_live_install_2121.py +0 -0
  762. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_version_single_source.py +0 -0
  763. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_watch.py +0 -0
  764. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  765. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_worker_events.py +0 -0
  766. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_worker_image_pin_sync.py +0 -0
  767. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_worker_safety.py +0 -0
  768. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_worker_test_scoping.py +0 -0
  769. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_worktree.py +0 -0
  770. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  771. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tui/Cargo.lock +0 -0
  772. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tui/Cargo.toml +0 -0
  773. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tui/cargo-config-local-quadraui.toml.example +0 -0
  774. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tui/src/app/audit.rs +0 -0
  775. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tui/src/app/chat.rs +0 -0
  776. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tui/src/app/data.rs +0 -0
  777. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tui/src/app/doc_tabs.rs +0 -0
  778. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tui/src/app/drive.rs +0 -0
  779. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tui/src/app/drive_queue.rs +0 -0
  780. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tui/src/app/escalation.rs +0 -0
  781. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tui/src/app/events.rs +0 -0
  782. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tui/src/app/fixtures.rs +0 -0
  783. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tui/src/app/fleet_health.rs +0 -0
  784. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tui/src/app/fleet_sessions.rs +0 -0
  785. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tui/src/app/fleet_terminals.rs +0 -0
  786. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tui/src/app/format.rs +0 -0
  787. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tui/src/app/milestone_dag.rs +0 -0
  788. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tui/src/app/mod.rs +0 -0
  789. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tui/src/app/msv.rs +0 -0
  790. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tui/src/app/plans.rs +0 -0
  791. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tui/src/app/render.rs +0 -0
  792. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tui/src/app/reports.rs +0 -0
  793. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tui/src/app/sessions.rs +0 -0
  794. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tui/src/app/settings_ui.rs +0 -0
  795. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tui/src/app/sidebar.rs +0 -0
  796. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tui/src/app/terminal.rs +0 -0
  797. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tui/src/app/types.rs +0 -0
  798. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tui/src/app/workspace.rs +0 -0
  799. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tui/src/bin/gtk.rs +0 -0
  800. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tui/src/lib.rs +0 -0
  801. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tui/src/main.rs +0 -0
  802. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tui/src/settings.rs +0 -0
  803. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tui/tests/acceptance.rs +0 -0
  804. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tui/tests/cli.rs +0 -0
  805. {code_coordinator-0.5.210 → code_coordinator-0.5.213}/tui/tests/fixtures/board_sample.json +0 -0
@@ -0,0 +1,44 @@
1
+ __pycache__/
2
+ *.pyc
3
+ .env
4
+ .venv/
5
+ *.egg-info/
6
+ build/
7
+ dist/
8
+ board_state.json
9
+ agent_setup.json
10
+ coordinator.yml
11
+
12
+ # Rust build artifacts (coord-tui)
13
+ tui/target/
14
+ tui/*.err
15
+ tui/*.out
16
+
17
+ # scripts/coord-test-runner.sh scratch output, written into the worktree it
18
+ # is pointed at. Harmless in the throwaway worktree the Test stage uses, but
19
+ # a worker who runs the runner against its own checkout and then `git add -A`
20
+ # commits ~3k lines of log noise — and, worse, leaves the tree permanently
21
+ # `git status`-dirty, which makes setuptools-scm stamp a `.dYYYYMMDD` local
22
+ # version and flips tests/test_release_verify.py::
23
+ # test_spawned_identity_ignores_the_caller_cwd red for reasons that have
24
+ # nothing to do with the branch under test.
25
+ .pytest.out
26
+ .pytest.rerun.out
27
+ .pytest.baseline.out
28
+ .pytest-acceptance.out
29
+ .pytest-populated-home.out
30
+ .cargo.out
31
+ .cargo.rerun.out
32
+ .cargo-acceptance.out
33
+ .fallback.out
34
+ .coord-ci-home/
35
+
36
+ # #1973: opt-in local quadraui path override (see
37
+ # tui/cargo-config-local-quadraui.toml.example) — never commit a
38
+ # machine-local co-development override.
39
+ tui/.cargo/config.toml
40
+
41
+ # scratch $HOME created inside disposable worktrees by the CI-mode
42
+ # acceptance runner (scripts/coord-test-runner.sh) — never meant to
43
+ # leave the throwaway worktree, let alone land in git history (#2527).
44
+ .coord-ci-home/
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-coordinator
3
- Version: 0.5.210
3
+ Version: 0.5.213
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.210
3
+ Version: 0.5.213
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
@@ -734,6 +734,12 @@ tests/acceptance/ms-65/mocks/board-tab-context-menu.screen
734
734
  tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen
735
735
  tests/acceptance/ms-65/mocks/board-tabs-overflow.screen
736
736
  tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen
737
+ tests/acceptance/ms-67/contract.md
738
+ tests/acceptance/ms-67/mocks/approved-items-chat-opened.screen
739
+ tests/acceptance/ms-67/mocks/approved-items-context-menu.screen
740
+ tests/acceptance/ms-67/mocks/approved-items-detail.screen
741
+ tests/acceptance/ms-67/mocks/approved-items-empty.screen
742
+ tests/acceptance/ms-67/mocks/approved-items-populated.screen
737
743
  tests/acceptance/ms-example/mocks/home-active.html
738
744
  tests/fixtures/board-pipeline-basic.json
739
745
  tests/fixtures/board-pipeline-terminal-gates.json
@@ -377,6 +377,12 @@
377
377
  "tests/acceptance/ms-65/pipeline_tabs_2284.rs",
378
378
  "tests/acceptance/ms-65/tabs_discoverability_2287.rs",
379
379
  "tests/acceptance/ms-65/tabs_persistence_2286.rs",
380
+ "tests/acceptance/ms-67/contract.md",
381
+ "tests/acceptance/ms-67/mocks/approved-items-chat-opened.screen",
382
+ "tests/acceptance/ms-67/mocks/approved-items-context-menu.screen",
383
+ "tests/acceptance/ms-67/mocks/approved-items-detail.screen",
384
+ "tests/acceptance/ms-67/mocks/approved-items-empty.screen",
385
+ "tests/acceptance/ms-67/mocks/approved-items-populated.screen",
380
386
  "tests/acceptance/ms-example/mocks/home-active.html",
381
387
  "tests/conftest.py",
382
388
  "tests/fixtures/board-pipeline-basic.json",
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "0.5.210",
2
+ "tag": "0.5.213",
3
3
  "distance": 0,
4
- "node": "gd5dc3b7d2bb67fd517cd7ac495abb3076f2017e4",
4
+ "node": "ga9e3937295f13339509408e4a07ca7e7028b9987",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-21"
@@ -2350,6 +2350,162 @@ def _run_merge_only_candidates(plan: TickPlan, config_path: Path | None) -> None
2350
2350
  click.echo(f"merge-only: {reason}")
2351
2351
 
2352
2352
 
2353
+ def _run_auto_revalidate_checks_stale(config_path: Path | None) -> None:
2354
+ """#2535: best-effort auto-fire of the CI-staleness rerun for merge-queue
2355
+ entries blocked SOLELY on stale CI checks against an already-approved
2356
+ review — closing the gap where nothing periodic ever calls a live
2357
+ ``coord merge`` or ``coord merge --revalidate`` on such an entry's
2358
+ behalf, so it just sits until an operator notices ``--dry-run``'s
2359
+ ``checks_stale`` line and reruns by hand (the trigger: #2530's Gate-A
2360
+ PR #2534 sat blocked 2026-08-21 on nothing but 210 unrelated merges
2361
+ having landed since its CI last ran).
2362
+
2363
+ Deliberately narrow — this is NOT ``merge.auto_drain`` reopened (that
2364
+ flag stays ``False`` by design; see ``docs/DRIVE_QUEUE.md`` and the
2365
+ 2026-06-07 incident it guards against). This step never merges anything
2366
+ and never touches an entry blocked on review, a real CI failure, or a
2367
+ conflict — it only triggers a ``gh run rerun`` for the exact shape
2368
+ :func:`coord.merge_queue.ci_revalidation_candidates` already scopes
2369
+ ``--revalidate``'s CI arm to (#1851/#1925): ``PENDING``, review
2370
+ approved, smoke fresh, CI checks green but predating the current base.
2371
+
2372
+ BOUNDED, shared with the live path. Draws from the SAME
2373
+ ``ci_stale_reruns``/``MAX_CI_STALE_RERUNS`` budget
2374
+ :func:`coord.merge_queue.process`'s own #2197 auto-rerun already spends
2375
+ from — a live ``coord merge`` attempt and this tick share one ceiling,
2376
+ never two independent ones that could double the effective retry count.
2377
+ An entry that has already exhausted the budget (on a prior live attempt
2378
+ or a prior tick) is left for a human exactly as #2197 already leaves it;
2379
+ this function never fires a further rerun past the cap, though it does
2380
+ keep recording the escalation (below) for as long as the entry stays
2381
+ stuck, so a human watching the audit trail sees it, not just the first
2382
+ tick that hit the ceiling.
2383
+
2384
+ Cost-visible (#1632's posture): every triggered rerun is a real CI run
2385
+ on GitHub's own runners, recorded via :func:`coord.audit.record_audit`
2386
+ (operational tier) so an operator can see the auto-fired count — same
2387
+ spirit as the notifier being advisory rather than silent, never a
2388
+ silent background spend.
2389
+
2390
+ Deliberately NOT behind a new config flag — this reuses exactly the
2391
+ bound and the counter #2197 already established for "an automatic CI
2392
+ rerun triggered by staleness"; the only thing new here is a periodic
2393
+ caller for the case nothing was already about to call ``process()``
2394
+ live. If that judgment turns out to be wrong in practice, the fix is a
2395
+ ``merge.auto_revalidate_stale_ci`` off-switch, not removing the
2396
+ dedicated budget this already shares.
2397
+
2398
+ Best-effort like every other optional step in this tick (conflict
2399
+ reconciliation in ``_auto_drain_tick``, the merge-only fast path above):
2400
+ a failure here must never abort the rest of the tick. Skipped entirely
2401
+ on a thin client — this daemon-host tick is the only place it ever
2402
+ runs, same guard :func:`_fetch_live_ci_gate`/
2403
+ :func:`_run_merge_only_candidates` use.
2404
+ """
2405
+ from coord.board_service import resolve as resolve_board_service # noqa: PLC0415
2406
+
2407
+ if resolve_board_service() is not None:
2408
+ return
2409
+
2410
+ try:
2411
+ from coord import github_ops as _gh_ops # noqa: PLC0415
2412
+ from coord import merge_queue as _mq # noqa: PLC0415
2413
+ from coord.audit import record_audit # noqa: PLC0415
2414
+ from coord.ci_store import build_ci_store # noqa: PLC0415
2415
+ from coord.commands._common import _load_config # noqa: PLC0415
2416
+ from coord.state import load_board as _load_board # noqa: PLC0415
2417
+
2418
+ cfg = _load_config(config_path)
2419
+ board = _load_board()
2420
+ ci_store = build_ci_store(
2421
+ cfg.ci_store.type, host=cfg.ci_store.host, token_env=cfg.ci_store.token_env,
2422
+ )
2423
+ if ci_store is None or not ci_store.is_available:
2424
+ return
2425
+ items = _mq.load_queue()
2426
+ candidates = _mq.ci_revalidation_candidates(items, board, cfg, ci_store, _gh_ops)
2427
+ except Exception: # noqa: BLE001 — best-effort, see docstring
2428
+ return
2429
+
2430
+ if not candidates:
2431
+ return
2432
+
2433
+ touched: list = []
2434
+ for entry in candidates:
2435
+ label = f"{entry.repo_name} #{entry.issue_number} ({entry.branch})"
2436
+ if entry.ci_stale_reruns >= _mq.MAX_CI_STALE_RERUNS:
2437
+ # Budget already spent (on a previous tick, or a previous live
2438
+ # `coord merge` attempt) — #2197's own terminal wording is
2439
+ # already on the entry from whichever call last evaluated it.
2440
+ # Nothing new to trigger; still worth one audit row per tick so
2441
+ # an operator watching the trail sees this has been sitting
2442
+ # exhausted, not silently forgotten.
2443
+ record_audit(
2444
+ tier="operational", category="merge",
2445
+ event_type="merge_checks_stale_auto_revalidate_exhausted",
2446
+ actor="drive-queue-tick",
2447
+ summary=(
2448
+ f"auto-revalidate: {label} still checks_stale after "
2449
+ f"{entry.ci_stale_reruns}/{_mq.MAX_CI_STALE_RERUNS} "
2450
+ "auto-reruns — needs a human (`coord merge --revalidate` "
2451
+ "or `coord merge --only`)"
2452
+ ),
2453
+ repo=entry.repo_name, issue=entry.issue_number,
2454
+ assignment_id=entry.assignment_id,
2455
+ details={
2456
+ "pr_number": entry.pr_number,
2457
+ "ci_stale_reruns": entry.ci_stale_reruns,
2458
+ },
2459
+ )
2460
+ continue
2461
+ try:
2462
+ reran = ci_store.rerun_for_pr(entry.repo_github, entry.pr_number)
2463
+ except Exception as exc: # noqa: BLE001 — one entry's failure must not sink the rest
2464
+ click.echo(
2465
+ f"auto-revalidate: could not re-run CI for {label}: {exc}", err=True
2466
+ )
2467
+ continue
2468
+ entry.ci_stale_reruns += 1
2469
+ entry.error = (
2470
+ f"{_mq.CI_PENDING_PREFIX} re-run triggered for CI checks that "
2471
+ "predate the current base (#2535 auto-revalidate "
2472
+ f"{entry.ci_stale_reruns}/{_mq.MAX_CI_STALE_RERUNS} "
2473
+ f"{'triggered' if reran else 'failed to trigger'})"
2474
+ )
2475
+ touched.append(entry)
2476
+ click.echo(
2477
+ f"auto-revalidate: {'triggered' if reran else 'FAILED to trigger'} "
2478
+ f"a CI re-run for {label} (checks_stale, review already approved) "
2479
+ f"— {entry.ci_stale_reruns}/{_mq.MAX_CI_STALE_RERUNS}"
2480
+ )
2481
+ record_audit(
2482
+ tier="operational", category="merge",
2483
+ event_type="merge_checks_stale_auto_revalidate",
2484
+ actor="drive-queue-tick",
2485
+ summary=(
2486
+ f"auto-revalidate: {'triggered' if reran else 'FAILED to trigger'} "
2487
+ f"a CI re-run for {label} — {entry.ci_stale_reruns}/"
2488
+ f"{_mq.MAX_CI_STALE_RERUNS}"
2489
+ ),
2490
+ repo=entry.repo_name, issue=entry.issue_number,
2491
+ assignment_id=entry.assignment_id,
2492
+ details={"pr_number": entry.pr_number, "reran": reran},
2493
+ )
2494
+
2495
+ if not touched:
2496
+ return
2497
+
2498
+ try:
2499
+ from coord import merge_queue as _mq # noqa: PLC0415
2500
+
2501
+ fresh = _mq.load_queue()
2502
+ by_id = {e.assignment_id: e for e in touched}
2503
+ merged = [by_id.get(item.assignment_id, item) for item in fresh]
2504
+ _mq.save_queue(merged)
2505
+ except Exception: # noqa: BLE001 — best-effort persistence; next tick recomputes
2506
+ pass
2507
+
2508
+
2353
2509
  def _run_resume_probe(entry: QueueEntry) -> ProbeResult:
2354
2510
  """Run one entry's ``--resume-when`` probe with a hard timeout.
2355
2511
 
@@ -2730,6 +2886,15 @@ def drive_queue_tick(
2730
2886
  if not reconcile_only:
2731
2887
  _run_merge_only_candidates(plan, config_path)
2732
2888
 
2889
+ # #2535: independent of the drive-queue plan above (this scans the
2890
+ # MERGE queue directly, not drive-queue rows) — a bounded, best-effort
2891
+ # CI re-run for any entry blocked solely on stale-but-green checks
2892
+ # with an already-approved review. Same `not reconcile_only` posture
2893
+ # as the merge-only fast path just above: a `gh run rerun` is a real
2894
+ # external action that mode promises not to take.
2895
+ if not reconcile_only:
2896
+ _run_auto_revalidate_checks_stale(config_path)
2897
+
2733
2898
  # #2235 Phase 0: record every entry this tick moved INTO or OUT OF
2734
2899
  # `blocked`/`parked`, with the reason the queue stated and — for a
2735
2900
  # release — what the release itself reveals about the true cause.
@@ -284,6 +284,189 @@ def portal_link(
284
284
  )
285
285
 
286
286
 
287
+ # ── #2513 (PDR-5): manual "publish mocks to portal" ─────────────────────────
288
+
289
+
290
+ @portal_group.command("publish-mocks")
291
+ @_CONFIG_OPTION
292
+ @click.argument("repo")
293
+ @click.argument("tracking_issue", type=int)
294
+ def portal_publish_mocks(config_path, repo: str, tracking_issue: int) -> None:
295
+ """Publish REPO's local Gate-A mock bundle for TRACKING_ISSUE's milestone now.
296
+
297
+ The on-demand counterpart to PDR-3's merge-triggered auto-push
298
+ (``coord.merge_queue._maybe_push_design_round``): that path only fires
299
+ once a `type="mock-author"` PR actually merges, which leaves a real gap
300
+ for iterating on a local ``coord acceptance mock ... --amend`` before
301
+ it's merged, or re-publishing after a manual edit. This uploads whatever
302
+ is currently on THIS machine's local checkout under
303
+ ``tests/acceptance/ms-NN/`` — ``contract.md`` plus every ``mocks/*.html``
304
+ fixture, uncommitted changes included — no merge required. That's the
305
+ whole point of "on demand".
306
+
307
+ Reuses PDR-3's shared upload+enqueue helper
308
+ (:func:`coord.portal_sync.push_design_round_bundle`) as-is — only where
309
+ the files come from differs.
310
+
311
+ Unlike the merge-triggered path (which fails OPEN: no portal link on
312
+ file for the milestone is silently "nothing to do yet, run `coord portal
313
+ link`"), this is an operator-invoked command and fails LOUD — a missing
314
+ link, missing portal config, or an empty local mock bundle is a clear
315
+ error naming the fix, never a silent no-op.
316
+ """
317
+ _refuse_if_thin_client("publish-mocks")
318
+
319
+ cfg = _load_config(config_path)
320
+ repo_cfg = cfg.repo(repo)
321
+ if repo_cfg is None:
322
+ click.secho(f"error: unknown repo {repo!r}", fg="red")
323
+ raise SystemExit(2)
324
+ client = client_from_config(cfg.portal)
325
+ if client is None:
326
+ click.secho(
327
+ "portal is not enabled — nothing to do (see `coord portal status`)",
328
+ fg="yellow",
329
+ )
330
+ raise SystemExit(1)
331
+
332
+ from coord import github_ops, portal_store # noqa: PLC0415
333
+ from coord.portal_sync import PortalSyncError, push_design_round_bundle # noqa: PLC0415
334
+ from coord.test_orchestrator import find_local_repo_path # noqa: PLC0415
335
+
336
+ try:
337
+ issue_data = github_ops.get_issue(repo_cfg.github, tracking_issue)
338
+ except Exception as exc: # noqa: BLE001 — surface as a clear CLI error, not a traceback
339
+ click.secho(f"could not fetch tracking issue #{tracking_issue}: {exc}", fg="red")
340
+ raise SystemExit(1) from exc
341
+
342
+ milestone = (issue_data or {}).get("milestone") or {}
343
+ milestone_number = milestone.get("number")
344
+ if milestone_number is None:
345
+ click.secho(
346
+ f"#{tracking_issue} is not scoped to a milestone — nothing to publish",
347
+ fg="red",
348
+ )
349
+ raise SystemExit(1)
350
+
351
+ link = portal_store.get_milestone_link(
352
+ repo_name=repo_cfg.name, milestone_number=milestone_number
353
+ )
354
+ if link is None:
355
+ click.secho(
356
+ f"{repo_cfg.name} ms-{milestone_number} has no portal submission linked — "
357
+ f"run `coord portal link {repo_cfg.name} {milestone_number} <submission_id>` "
358
+ "first",
359
+ fg="red",
360
+ )
361
+ raise SystemExit(1)
362
+
363
+ repo_dir = find_local_repo_path(repo_cfg.name, cfg)
364
+ if repo_dir is None or not repo_dir.exists():
365
+ click.secho(
366
+ f"no local repo checkout found for {repo_cfg.name!r} on this machine "
367
+ "(repo_paths in coordinator.yml)",
368
+ fg="red",
369
+ )
370
+ raise SystemExit(1)
371
+
372
+ try:
373
+ files = _collect_local_mock_bundle_files(repo_dir, milestone_number)
374
+ except _MockBundleReadError as exc:
375
+ click.secho(f"could not read local mock bundle: {exc}", fg="red")
376
+ raise SystemExit(1) from exc
377
+ if not files:
378
+ click.secho(
379
+ f"no mock bundle found under {repo_dir}/tests/acceptance/"
380
+ f"ms-{milestone_number}/ — nothing to publish",
381
+ fg="red",
382
+ )
383
+ raise SystemExit(1)
384
+
385
+ try:
386
+ bundle_key, row = push_design_round_bundle(
387
+ client,
388
+ link.submission_id,
389
+ files,
390
+ milestone_title=milestone.get("title") or f"ms-{milestone_number}",
391
+ tracking_issue_title=issue_data.get("title") or "",
392
+ tracking_issue_body=issue_data.get("body") or "",
393
+ )
394
+ except PortalBridgeError as exc:
395
+ click.secho(f"bundle upload failed: {exc}", fg="red")
396
+ raise SystemExit(1) from exc
397
+ except PortalSyncError as exc:
398
+ click.secho(f"enqueue failed: {exc}", fg="red")
399
+ raise SystemExit(1) from exc
400
+
401
+ click.secho(
402
+ f"published: {repo_cfg.name} ms-{milestone_number} -> "
403
+ f"submission {link.submission_id} (seq={row.seq}, bundle_key={bundle_key}, "
404
+ f"{len(files)} file(s): {', '.join(sorted(files))})",
405
+ fg="green",
406
+ )
407
+
408
+
409
+ class _MockBundleReadError(Exception):
410
+ """A file under the local `ms-NN` acceptance dir could not be read as text.
411
+
412
+ Raised by `_collect_local_mock_bundle_files` in place of a raw
413
+ `UnicodeDecodeError` — mocks are machine-rendered HTML so this is
414
+ low-probability, but a stray non-UTF-8 file dropped in `mocks/` should
415
+ surface as a named CLI error like every other checked failure in this
416
+ command, not an unhandled traceback.
417
+ """
418
+
419
+
420
+ def _collect_local_mock_bundle_files(repo_dir, milestone_number: int) -> dict:
421
+ """Read a rendered Gate-A bundle off the LOCAL checkout at *repo_dir*.
422
+
423
+ PDR-5's on-demand counterpart to
424
+ :func:`coord.mock_author.collect_mock_bundle_files`, which reads a
425
+ *merged* branch off GitHub's Contents API — this reads whatever is
426
+ currently on disk, uncommitted changes included.
427
+
428
+ Same ``{relative_path: content}`` shape: ``"contract.md"`` plus every
429
+ ``mocks/*.html`` fixture — which, if #2512 (master index page) has
430
+ landed, automatically picks up ``mocks/index.html`` too, since this
431
+ globs everything under ``mocks/`` rather than naming files. The suffix
432
+ match is case-INSENSITIVE (``SCREEN.HTML`` counts) so that this stays
433
+ aligned with the TUI's `gate_a_mocks_dir_exists_for` enablement gate
434
+ (#2513 review follow-up) — a file that lights the menu item up must be
435
+ a file this command actually publishes, or the operator gets an
436
+ enabled button whose dispatch dies with "nothing to publish". Empty when
437
+ the ``ms-NN`` acceptance directory doesn't exist locally at all —
438
+ callers treat that as an error (unlike the merge-triggered path's
439
+ "nothing to push", this command is operator-invoked and should say why
440
+ it did nothing rather than no-op quietly).
441
+ """
442
+ from pathlib import Path # noqa: PLC0415
443
+
444
+ from coord.acceptance import ms_dirname # noqa: PLC0415
445
+
446
+ ms_dir = Path(repo_dir) / "tests" / "acceptance" / ms_dirname(milestone_number)
447
+ files: dict = {}
448
+ contract_path = ms_dir / "contract.md"
449
+ if contract_path.is_file():
450
+ files["contract.md"] = _read_text_or_raise(contract_path)
451
+ mocks_dir = ms_dir / "mocks"
452
+ if mocks_dir.is_dir():
453
+ for p in sorted(mocks_dir.iterdir()):
454
+ if p.is_file() and p.suffix.lower() == ".html":
455
+ files[f"mocks/{p.name}"] = _read_text_or_raise(p)
456
+ return files
457
+
458
+
459
+ def _read_text_or_raise(path) -> str:
460
+ """`Path.read_text(encoding="utf-8")`, wrapping a decode failure in the
461
+ named `_MockBundleReadError` instead of letting a raw
462
+ `UnicodeDecodeError` traceback reach the operator.
463
+ """
464
+ try:
465
+ return path.read_text(encoding="utf-8")
466
+ except UnicodeDecodeError as exc:
467
+ raise _MockBundleReadError(f"{path} is not valid UTF-8 text ({exc})") from exc
468
+
469
+
287
470
  # ── #1982: the sync loop's operator surface ─────────────────────────────────
288
471
 
289
472
 
@@ -5074,9 +5074,9 @@ def _maybe_push_design_round(
5074
5074
  # the whole point of the fail-open posture (see docstring above).
5075
5075
  return None
5076
5076
 
5077
- from coord.mock_author import build_design_round, collect_mock_bundle_files # noqa: PLC0415
5077
+ from coord.mock_author import collect_mock_bundle_files # noqa: PLC0415
5078
5078
  from coord.portal_bridge import PortalBridgeError, client_from_config # noqa: PLC0415
5079
- from coord.portal_sync import PortalSyncError, enqueue_design_round # noqa: PLC0415
5079
+ from coord.portal_sync import PortalSyncError, push_design_round_bundle # noqa: PLC0415
5080
5080
 
5081
5081
  client = client_from_config(portal_cfg)
5082
5082
  if client is None:
@@ -5099,18 +5099,16 @@ def _maybe_push_design_round(
5099
5099
  )
5100
5100
 
5101
5101
  try:
5102
- bundle_key = client.upload_bundle(link.submission_id, files)
5102
+ bundle_key, row = push_design_round_bundle(
5103
+ client,
5104
+ link.submission_id,
5105
+ files,
5106
+ milestone_title=milestone.get("title") or f"ms-{milestone_number}",
5107
+ tracking_issue_title=issue_data.get("title") or "",
5108
+ tracking_issue_body=issue_data.get("body") or "",
5109
+ )
5103
5110
  except PortalBridgeError as e:
5104
5111
  return MergeEvent(entry, "design_round_push_failed", f"bundle upload failed: {e}")
5105
-
5106
- design_round = build_design_round(
5107
- milestone_title=milestone.get("title") or f"ms-{milestone_number}",
5108
- tracking_issue_title=issue_data.get("title") or "",
5109
- tracking_issue_body=issue_data.get("body") or "",
5110
- bundle_key=bundle_key,
5111
- )
5112
- try:
5113
- row = enqueue_design_round(link.submission_id, design_round)
5114
5112
  except PortalSyncError as e:
5115
5113
  return MergeEvent(entry, "design_round_push_failed", f"enqueue failed: {e}")
5116
5114
 
@@ -242,6 +242,67 @@ def enqueue_design_round(
242
242
  )
243
243
 
244
244
 
245
+ def push_design_round_bundle(
246
+ client: Any,
247
+ submission_id: str,
248
+ files: dict[str, str],
249
+ *,
250
+ milestone_title: str,
251
+ tracking_issue_title: str,
252
+ tracking_issue_body: str,
253
+ round_number: int = 1,
254
+ now: float | None = None,
255
+ ) -> tuple[str, portal_store.OutboxRow]:
256
+ """Upload *files* as a design round bundle, then queue its D1 metadata.
257
+
258
+ The shared tail of the "publish a Gate-A mock bundle to the portal"
259
+ story — extracted (#2513/PDR-5) so the two callers that need it never
260
+ duplicate the upload → reshape → enqueue sequence:
261
+
262
+ * :mod:`coord.merge_queue`'s post-merge hook (PDR-3/#2508), which reads
263
+ *files* off a just-merged ``mock-author`` branch via GitHub's Contents
264
+ API (:func:`coord.mock_author.collect_mock_bundle_files`) and calls
265
+ this automatically, fail-open, the moment that branch lands.
266
+ * ``coord portal publish-mocks`` (PDR-5, :mod:`coord.commands.portal`),
267
+ which reads *files* straight off the operator's local checkout — no
268
+ merge required — and calls this on demand, fail-loud.
269
+
270
+ Only the *source* of ``files`` differs between the two; everything from
271
+ "here are the files" downstream — upload, build the design-round
272
+ payload, queue it — is identical, which is the whole point of not
273
+ duplicating it (the previous shape had this sequence inlined in
274
+ ``coord.merge_queue._maybe_push_design_round``).
275
+
276
+ Three steps, each able to fail independently — callers keep whatever
277
+ try/except shape they already had around the calls this replaces:
278
+
279
+ 1. :meth:`coord.portal_bridge.PortalBridgeClient.upload_bundle` — raises
280
+ :class:`coord.portal_bridge.PortalBridgeError` on a transport/4xx/5xx
281
+ failure.
282
+ 2. :func:`coord.mock_author.build_design_round` — reshapes the bundle
283
+ key + tracking-issue text into the D1 metadata payload; does not
284
+ raise (a malformed ``## Work order`` degrades to an empty
285
+ decomposition, per that function's own docstring).
286
+ 3. :func:`enqueue_design_round` — raises :class:`PortalSyncError` for a
287
+ payload it refuses to queue.
288
+
289
+ Returns ``(bundle_key, row)`` — the R2 object key the portal assigned
290
+ the bundle, and the outbox row now queued for it.
291
+ """
292
+ from coord.mock_author import build_design_round # noqa: PLC0415
293
+
294
+ bundle_key = client.upload_bundle(submission_id, files)
295
+ design_round = build_design_round(
296
+ milestone_title=milestone_title,
297
+ tracking_issue_title=tracking_issue_title,
298
+ tracking_issue_body=tracking_issue_body,
299
+ bundle_key=bundle_key,
300
+ round_number=round_number,
301
+ )
302
+ row = enqueue_design_round(submission_id, design_round, now=now)
303
+ return bundle_key, row
304
+
305
+
245
306
  def enqueue_preview(
246
307
  submission_id: str, preview_url: str, *, now: float | None = None
247
308
  ) -> portal_store.OutboxRow:
@@ -393,8 +393,16 @@ Phase 0 steps 1–2 and Phase 1 step 6 above are also reachable by right-clickin
393
393
  not a live session). The CLI's own claim-detection refuses a duplicate dispatch while one is
394
394
  already in flight. This *is* Phase 0 step 1.
395
395
  - **"View Gate A mock (PR)"** 👁 → opens that worker's PR in the browser so a human can read
396
- `contract.md` + the rendered mock(s). Disabled until a PR exists. **Merging that PR does not
397
- satisfy Gate A** (#2063) — it is only how you *see* what you are signing off on.
396
+ `contract.md` and review/merge the branch. Disabled until a PR exists. **This does not show the
397
+ rendered mock(s)** (#2501) — GitHub's "Files changed" view renders `.html` as a source diff,
398
+ never a live page; use "View Gate A mock (local)" below for that. **Merging that PR does not
399
+ satisfy Gate A** (#2063) — it is only how you review/merge what you are signing off on.
400
+ - **"View Gate A mock (local)"** 👁 → the actual mock viewer (#2501). Fast-forward-pulls the local
401
+ checkout's default branch (never forcing, never touching a dirty or diverged tree — aborts with
402
+ a toast instead, same as everywhere else this repo touches git destructively) and then opens
403
+ `tests/acceptance/ms-NN/mocks/` from disk in the OS's default browser, where `.html` actually
404
+ renders. Disabled until that mocks directory exists locally. Opens `mocks/index.html` once #2512
405
+ ships it; falls back to opening the mocks directory itself until then.
398
406
  - **"Approve Gate A"** ✓ → `coord gate-a --approved <repo> <tracking_issue>` — records the verdict
399
407
  that actually satisfies Gate A. Sits directly beside the 👁 on purpose: reviewing and recording
400
408
  are one gesture.