code-coordinator 0.5.203__tar.gz → 0.5.204__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 (794) hide show
  1. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/code_coordinator.egg-info/scm_version.json +2 -2
  4. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/merge_queue.py +127 -0
  5. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/mock_author.py +102 -0
  6. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/portal_bridge.py +45 -3
  7. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/portal_sync.py +10 -5
  8. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_merge_queue.py +200 -0
  9. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_mock_author.py +88 -1
  10. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_portal_bridge.py +38 -0
  11. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/.claude/commands/board.md +0 -0
  12. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/.claude/commands/complete-session.md +0 -0
  13. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/.claude/commands/coordinator.md +0 -0
  14. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/.githooks/_lib.sh +0 -0
  15. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/.githooks/post-checkout +0 -0
  16. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/.githooks/post-commit +0 -0
  17. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/.githooks/post-merge +0 -0
  18. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  19. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/.github/coord-ci-acceptance.yml +0 -0
  20. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/.github/workflows/auto-release.yml +0 -0
  21. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/.github/workflows/cargo-test.yml +0 -0
  22. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/.github/workflows/publish.yml +0 -0
  23. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/.github/workflows/release-tui.yml +0 -0
  24. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/.github/workflows/test.yml +0 -0
  25. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/.gitignore +0 -0
  26. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/CLAUDE.md +0 -0
  27. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/GOAL.md +0 -0
  28. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/LICENSE +0 -0
  29. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/MANIFEST.in +0 -0
  30. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/README.md +0 -0
  31. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/code_coordinator.egg-info/SOURCES.txt +0 -0
  32. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/code_coordinator.egg-info/dependency_links.txt +0 -0
  33. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/code_coordinator.egg-info/entry_points.txt +0 -0
  34. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/code_coordinator.egg-info/requires.txt +0 -0
  35. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/code_coordinator.egg-info/scm_file_list.json +0 -0
  36. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/code_coordinator.egg-info/top_level.txt +0 -0
  37. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/__init__.py +0 -0
  38. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/_board_mapping.py +0 -0
  39. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/acceptance.py +0 -0
  40. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/acceptance_drivers.py +0 -0
  41. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/agent.py +0 -0
  42. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/agent_app.py +0 -0
  43. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/agent_update.py +0 -0
  44. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/agents/opencode/.gitignore +0 -0
  45. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/agents/opencode/agents/work.md +0 -0
  46. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/agents/opencode/routing.jsonc +0 -0
  47. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/audit.py +0 -0
  48. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/auto_loop.py +0 -0
  49. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/block_log.py +0 -0
  50. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/board_bool_guard.py +0 -0
  51. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/board_service.py +0 -0
  52. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/board_wire.py +0 -0
  53. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/brain.py +0 -0
  54. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/branch_model.py +0 -0
  55. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/bug_intake.py +0 -0
  56. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/cargo_cache.py +0 -0
  57. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/ci_github.py +0 -0
  58. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/ci_gitlab.py +0 -0
  59. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/ci_store.py +0 -0
  60. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/claim.py +0 -0
  61. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/cli.py +0 -0
  62. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/client.py +0 -0
  63. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/commands/__init__.py +0 -0
  64. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/commands/_common.py +0 -0
  65. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/commands/acceptance.py +0 -0
  66. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/commands/agent_ops.py +0 -0
  67. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/commands/audit.py +0 -0
  68. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/commands/chat.py +0 -0
  69. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/commands/dispatch.py +0 -0
  70. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/commands/dispatch_workers.py +0 -0
  71. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/commands/drive.py +0 -0
  72. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/commands/drive_queue.py +0 -0
  73. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/commands/gate_a.py +0 -0
  74. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/commands/gates.py +0 -0
  75. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/commands/issues.py +0 -0
  76. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/commands/lifecycle.py +0 -0
  77. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/commands/merge.py +0 -0
  78. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/commands/milestone.py +0 -0
  79. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/commands/plan_followup.py +0 -0
  80. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/commands/plans.py +0 -0
  81. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/commands/portal.py +0 -0
  82. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/commands/release.py +0 -0
  83. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/commands/repo.py +0 -0
  84. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/commands/report.py +0 -0
  85. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/commands/review.py +0 -0
  86. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/commands/scorecard.py +0 -0
  87. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/commands/sessions.py +0 -0
  88. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/commands/setup.py +0 -0
  89. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/commands/status.py +0 -0
  90. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/commands/terminal.py +0 -0
  91. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/commands/test_gate.py +0 -0
  92. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/commands/tui.py +0 -0
  93. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/comments.py +0 -0
  94. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/config.py +0 -0
  95. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/config_reload.py +0 -0
  96. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/confirm_test.py +0 -0
  97. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/conflict_fix.py +0 -0
  98. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/dao.py +0 -0
  99. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/dashboard/__init__.py +0 -0
  100. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/dashboard/fixture.py +0 -0
  101. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/dashboard/index.html +0 -0
  102. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/dashboard/server.py +0 -0
  103. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/dashboard/terminal.py +0 -0
  104. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/db.py +0 -0
  105. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/dead_end.py +0 -0
  106. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/deploy/README.md +0 -0
  107. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/deploy/coord-agent.service +0 -0
  108. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/deploy/coord-db-backup.service +0 -0
  109. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/deploy/coord-db-backup.sh +0 -0
  110. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/deploy/coord-db-backup.timer +0 -0
  111. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/deploy/coord-drive-queue.service +0 -0
  112. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/deploy/coord-drive-queue.timer +0 -0
  113. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/deploy/coord-notify.service +0 -0
  114. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/deploy/coord-notify.timer +0 -0
  115. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/deploy/coord-release-propagate.service +0 -0
  116. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/deploy/coord-release-propagate.timer +0 -0
  117. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/deploy/coord-release-window.service +0 -0
  118. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/deploy/coord-release-window.timer +0 -0
  119. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/deploy/coord-serve.service +0 -0
  120. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/deploy/coord-web-dist-build.service +0 -0
  121. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/deploy/coord-web-dist-build.timer +0 -0
  122. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/deploy/coord-web.service +0 -0
  123. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/deploy_manifest.py +0 -0
  124. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/deploy_units.py +0 -0
  125. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/deps.py +0 -0
  126. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/diagnose.py +0 -0
  127. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/dispatch.py +0 -0
  128. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/dist_name.py +0 -0
  129. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/drive.py +0 -0
  130. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/drive_queue.py +0 -0
  131. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/drive_state.py +0 -0
  132. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/events.py +0 -0
  133. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/failure_class.py +0 -0
  134. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/filelock.py +0 -0
  135. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/fleet_config_health.py +0 -0
  136. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/forge_availability.py +0 -0
  137. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/freshness.py +0 -0
  138. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/gate_a.py +0 -0
  139. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/gate_b.py +0 -0
  140. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/gate_snapshot.py +0 -0
  141. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/gates.py +0 -0
  142. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/github_ops.py +0 -0
  143. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/goal.py +0 -0
  144. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/graph_health.py +0 -0
  145. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/health/__init__.py +0 -0
  146. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/health/aggregate.py +0 -0
  147. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/health/checks/__init__.py +0 -0
  148. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/health/checks/agent_install.py +0 -0
  149. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/health/checks/cargo_targets.py +0 -0
  150. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/health/checks/claude_binary.py +0 -0
  151. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/health/checks/coord_web_ci_pin.py +0 -0
  152. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/health/checks/deploy_lane_facts.py +0 -0
  153. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/health/checks/disk.py +0 -0
  154. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/health/checks/fleet_board.py +0 -0
  155. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  156. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/health/checks/fleet_phantom.py +0 -0
  157. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/health/checks/fleet_unit_drift.py +0 -0
  158. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/health/checks/graph.py +0 -0
  159. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/health/checks/graphify_cli.py +0 -0
  160. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/health/checks/index_lock.py +0 -0
  161. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/health/checks/plan_usage.py +0 -0
  162. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/health/checks/repo_state.py +0 -0
  163. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/health/checks/spawned_coord.py +0 -0
  164. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/health/checks/timer_active.py +0 -0
  165. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/health/checks/toolchain.py +0 -0
  166. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/health/checks/unit_drift.py +0 -0
  167. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/health/checks/unit_enablement.py +0 -0
  168. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/health/checks/worktrees.py +0 -0
  169. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/health/cli.py +0 -0
  170. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/health/context.py +0 -0
  171. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/health/fleet_snapshot.py +0 -0
  172. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/health/models.py +0 -0
  173. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/health/pypi.py +0 -0
  174. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/health/registry.py +0 -0
  175. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/health/render.py +0 -0
  176. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/health/units.py +0 -0
  177. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/hooks.py +0 -0
  178. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/housekeeping.py +0 -0
  179. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/interactive.py +0 -0
  180. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/issue_store.py +0 -0
  181. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/liveness_auditor.py +0 -0
  182. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/machine_pause.py +0 -0
  183. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/milestone_chat.py +0 -0
  184. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/milestone_dispatch.py +0 -0
  185. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/milestone_gate.py +0 -0
  186. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/milestone_order.py +0 -0
  187. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/models.py +0 -0
  188. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/network.py +0 -0
  189. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/new_issue_chat.py +0 -0
  190. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/notifier/__init__.py +0 -0
  191. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/notifier/baseline.py +0 -0
  192. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/notifier/cli.py +0 -0
  193. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/notifier/collect.py +0 -0
  194. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/notifier/digest.py +0 -0
  195. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/notifier/models.py +0 -0
  196. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/notifier/predicate.py +0 -0
  197. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/notifier/service.py +0 -0
  198. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/notifier/store.py +0 -0
  199. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/notifier/transport.py +0 -0
  200. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/notify.py +0 -0
  201. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/openapi.py +0 -0
  202. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/overlap_fence.py +0 -0
  203. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/overlap_predict.py +0 -0
  204. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/parentage.py +0 -0
  205. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/parentage_github.py +0 -0
  206. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/pipeline.py +0 -0
  207. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/plan_parser.py +0 -0
  208. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/plans.py +0 -0
  209. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/platform_paths.py +0 -0
  210. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/portal_store.py +0 -0
  211. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/pr_body_lint.py +0 -0
  212. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/prereqs.py +0 -0
  213. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/progress.py +0 -0
  214. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/providers/__init__.py +0 -0
  215. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/providers/base.py +0 -0
  216. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/providers/claude.py +0 -0
  217. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/providers/claude_pty.py +0 -0
  218. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/providers/opencode.py +0 -0
  219. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/queue_diagnose.py +0 -0
  220. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/reconcile.py +0 -0
  221. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/reconcile_tick.py +0 -0
  222. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/refine_chat.py +0 -0
  223. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/release_cordon.py +0 -0
  224. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/release_propagate.py +0 -0
  225. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/release_verify.py +0 -0
  226. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/release_window.py +0 -0
  227. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/repo_edit.py +0 -0
  228. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/repo_onboard.py +0 -0
  229. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/reports.py +0 -0
  230. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/revalidate.py +0 -0
  231. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/review.py +0 -0
  232. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/scorecard.py +0 -0
  233. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/self_health.py +0 -0
  234. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/serve_app.py +0 -0
  235. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  236. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  237. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  238. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  239. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  240. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/skills/portal-followup/SKILL.md +0 -0
  241. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  242. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  243. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/skills/update-issue/SKILL.md +0 -0
  244. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/smoke.py +0 -0
  245. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/spend_ceiling.py +0 -0
  246. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/split_work.py +0 -0
  247. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/stage_projection.py +0 -0
  248. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/state.py +0 -0
  249. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/test_author.py +0 -0
  250. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/test_chat.py +0 -0
  251. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/test_orchestrator.py +0 -0
  252. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/test_report.py +0 -0
  253. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/tui_release.py +0 -0
  254. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/usage.py +0 -0
  255. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/usage_limits.py +0 -0
  256. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/usage_rollup.py +0 -0
  257. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coord/worker_events.py +0 -0
  258. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/coordinator.example.yml +0 -0
  259. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/deploy/coord-agent.service +0 -0
  260. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/deploy/coord-db-backup.service +0 -0
  261. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/deploy/coord-db-backup.sh +0 -0
  262. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/deploy/coord-db-backup.timer +0 -0
  263. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/deploy/coord-drive-queue.service +0 -0
  264. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/deploy/coord-drive-queue.timer +0 -0
  265. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/deploy/coord-notify.service +0 -0
  266. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/deploy/coord-notify.timer +0 -0
  267. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/deploy/coord-release-propagate.service +0 -0
  268. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/deploy/coord-release-propagate.timer +0 -0
  269. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/deploy/coord-release-window.service +0 -0
  270. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/deploy/coord-release-window.timer +0 -0
  271. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/deploy/coord-serve.service +0 -0
  272. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/deploy/coord-web-dist-build.service +0 -0
  273. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/deploy/coord-web-dist-build.sh +0 -0
  274. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/deploy/coord-web-dist-build.timer +0 -0
  275. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/deploy/coord-web-rollback.sh +0 -0
  276. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/deploy/coord-web.service +0 -0
  277. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/deploy/node-shim.sh +0 -0
  278. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  279. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/docs/ADR_COORD_WEB_CI.md +0 -0
  280. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/docs/ADR_COORD_WEB_DIST.md +0 -0
  281. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/docs/AGENT_OPERATIONS.md +0 -0
  282. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/docs/ARCHITECTURE.md +0 -0
  283. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/docs/ARCH_SECURITY_GATES.md +0 -0
  284. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/docs/COCKPIT.md +0 -0
  285. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/docs/CONTROL_CENTER.md +0 -0
  286. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/docs/COST_DISCIPLINE.md +0 -0
  287. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/docs/CROSS_PLATFORM.md +0 -0
  288. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/docs/CUSTOMER_PORTAL.md +0 -0
  289. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/docs/DRIVE_QUEUE.md +0 -0
  290. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/docs/EPHEMERAL_WORKERS.md +0 -0
  291. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/docs/FORGE_MIGRATION.md +0 -0
  292. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/docs/GRAPHIFY_SETUP.md +0 -0
  293. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/docs/ISSUE_GUIDANCE.md +0 -0
  294. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/docs/MAC_MINI.md +0 -0
  295. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  296. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/docs/NOTIFIER.md +0 -0
  297. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/docs/OPENCODE_VERIFICATION.md +0 -0
  298. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/docs/OPERATING_GOTCHAS.md +0 -0
  299. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/docs/ORACLE_LOOP.md +0 -0
  300. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/docs/PHONE_WEBAPP.md +0 -0
  301. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/docs/PIPELINE_V2.md +0 -0
  302. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/docs/PLATFORM_EVOLUTION.md +0 -0
  303. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/docs/SECOND_BACKEND.md +0 -0
  304. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/docs/STORE_SERVICE.md +0 -0
  305. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  306. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/docs/WEB_CONTROL_CENTER.md +0 -0
  307. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/docs/WSL_WINDOWS_WORKER.md +0 -0
  308. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/docs/mocks/web/README.md +0 -0
  309. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/docs/mocks/web/_tokens.css +0 -0
  310. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/docs/mocks/web/issue-detail.html +0 -0
  311. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/docs/mocks/web/pipeline-narrow.html +0 -0
  312. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/docs/mocks/web/pipeline-wide.html +0 -0
  313. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/graphify-out/.gitignore +0 -0
  314. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/install-agent.sh +0 -0
  315. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/pyproject.toml +0 -0
  316. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/scripts/audit_review_verdict_overrides.py +0 -0
  317. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  318. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/scripts/azure-workers/build-worker-image.sh +0 -0
  319. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/scripts/azure-workers/coordinator-machine.py +0 -0
  320. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/scripts/azure-workers/epic-down.sh +0 -0
  321. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/scripts/azure-workers/epic-up.sh +0 -0
  322. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/scripts/azure-workers/preflight.sh +0 -0
  323. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/scripts/azure-workers/provision-worker.sh +0 -0
  324. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  325. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  326. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/scripts/azure-workers/verify-github-token.sh +0 -0
  327. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/scripts/check_gh_argv_containment.py +0 -0
  328. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/scripts/codegen.py +0 -0
  329. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/scripts/coord-test-runner.sh +0 -0
  330. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/scripts/drive-batch.sh +0 -0
  331. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/scripts/gen_board_fixture.py +0 -0
  332. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/scripts/next_release_tag.py +0 -0
  333. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/scripts/run_tests_in_populated_home.sh +0 -0
  334. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/scripts/run_tests_without_gh.sh +0 -0
  335. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/scripts/smoke_437_interactive.py +0 -0
  336. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/scripts/verify_878_review_capture.py +0 -0
  337. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/scripts/verify_release_published.py +0 -0
  338. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/scripts/verify_release_wheel.py +0 -0
  339. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/setup.cfg +0 -0
  340. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/SMOKE_SET.md +0 -0
  341. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/__init__.py +0 -0
  342. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  343. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/acceptance/ms-33/contract.md +0 -0
  344. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/acceptance/ms-33/manifest.yml +0 -0
  345. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  346. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  347. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  348. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  349. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/acceptance/ms-37/conftest.py +0 -0
  350. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/acceptance/ms-37/contract.md +0 -0
  351. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/acceptance/ms-37/manifest.yml +0 -0
  352. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  353. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  354. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/acceptance/ms-38/contract.md +0 -0
  355. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/acceptance/ms-38/manifest.yml +0 -0
  356. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  357. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  358. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  359. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  360. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  361. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  362. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  363. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  364. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  365. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  366. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/acceptance/ms-51/contract.md +0 -0
  367. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  368. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  369. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/acceptance/ms-51/manifest.yml +0 -0
  370. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  371. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/acceptance/ms-51/tsconfig.json +0 -0
  372. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/acceptance/ms-65/board_split_2288.rs +0 -0
  373. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
  374. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
  375. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/acceptance/ms-65/contract.md +0 -0
  376. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
  377. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/acceptance/ms-65/manifest.yml +0 -0
  378. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
  379. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
  380. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
  381. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
  382. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
  383. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
  384. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
  385. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
  386. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
  387. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
  388. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/acceptance/ms-65/tabs_persistence_2286.rs +0 -0
  389. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  390. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/conftest.py +0 -0
  391. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/fixtures/board-pipeline-basic.json +0 -0
  392. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  393. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  394. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  395. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  396. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/fixtures/playwright/all_pass.json +0 -0
  397. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  398. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/fixtures/playwright/mixed_fail.json +0 -0
  399. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  400. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  401. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/fixtures/playwright/skip.json +0 -0
  402. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/fixtures/playwright/truncated.json +0 -0
  403. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  404. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  405. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  406. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  407. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  408. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  409. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  410. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  411. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_acceptance.py +0 -0
  412. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_acceptance_drivers.py +0 -0
  413. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_agent.py +0 -0
  414. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_agent_api_error.py +0 -0
  415. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_agent_app.py +0 -0
  416. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_agent_branch_base.py +0 -0
  417. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_agent_branch_capture.py +0 -0
  418. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_agent_config_free_1712.py +0 -0
  419. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_agent_deploy_units_endpoint.py +0 -0
  420. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_agent_dirty_worktree.py +0 -0
  421. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  422. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_agent_graph_self_heal.py +0 -0
  423. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_agent_health_h3.py +0 -0
  424. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_agent_idle_restart.py +0 -0
  425. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_agent_push_failure.py +0 -0
  426. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_agent_reap.py +0 -0
  427. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_agent_repos_and_pull.py +0 -0
  428. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_agent_restart_services_endpoint.py +0 -0
  429. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_agent_skills_self_heal.py +0 -0
  430. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_agent_startup_diagnostics.py +0 -0
  431. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_agent_update.py +0 -0
  432. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_agent_update_bluegreen.py +0 -0
  433. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_agent_usage_limit.py +0 -0
  434. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_agent_zero_commit.py +0 -0
  435. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_ambient_home_isolation.py +0 -0
  436. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_approve_reject_plan.py +0 -0
  437. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_approve_usage_gate.py +0 -0
  438. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_assignment_already_recorded_daemon.py +0 -0
  439. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_audit_log.py +0 -0
  440. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_audit_outcome.py +0 -0
  441. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_audit_query.py +0 -0
  442. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_auto_loop.py +0 -0
  443. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_auto_release_publish_2035.py +0 -0
  444. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_base_checkout_restore.py +0 -0
  445. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_block_log.py +0 -0
  446. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_board_cap_762.py +0 -0
  447. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_board_fixture.py +0 -0
  448. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_board_read_path.py +0 -0
  449. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_board_service.py +0 -0
  450. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_board_state.py +0 -0
  451. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_board_wire.py +0 -0
  452. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_brain.py +0 -0
  453. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_branch_model.py +0 -0
  454. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_bug_intake.py +0 -0
  455. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_build_worker_image_env_update.py +0 -0
  456. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_cargo_cache.py +0 -0
  457. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_check_gh_argv_containment.py +0 -0
  458. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_ci_acceptance_gate_1950.py +0 -0
  459. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_ci_gitlab.py +0 -0
  460. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_ci_parity_2091.py +0 -0
  461. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_ci_store.py +0 -0
  462. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_claim.py +0 -0
  463. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_cli_acceptance.py +0 -0
  464. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_cli_assign.py +0 -0
  465. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  466. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_cli_assign_interactive_remote.py +0 -0
  467. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_cli_assign_provider.py +0 -0
  468. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  469. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_cli_audit.py +0 -0
  470. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_cli_chat_continue.py +0 -0
  471. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_cli_decide.py +0 -0
  472. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_cli_diagnose_config_provenance.py +0 -0
  473. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_cli_diagnose_forge_availability.py +0 -0
  474. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_cli_diagnose_graph.py +0 -0
  475. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_cli_diagnose_self.py +0 -0
  476. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_cli_doctor.py +0 -0
  477. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_cli_doctor_config_free_1801.py +0 -0
  478. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  479. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_cli_drive.py +0 -0
  480. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_cli_drive_queue.py +0 -0
  481. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_cli_escalate.py +0 -0
  482. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_cli_fix_headless_review.py +0 -0
  483. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_cli_gate_a.py +0 -0
  484. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_cli_install_drift.py +0 -0
  485. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_cli_install_skills.py +0 -0
  486. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_cli_issue_create_label.py +0 -0
  487. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_cli_issue_reopen.py +0 -0
  488. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_cli_merge.py +0 -0
  489. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_cli_milestone_assign.py +0 -0
  490. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_cli_milestone_capture.py +0 -0
  491. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_cli_milestone_chat_add_child.py +0 -0
  492. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_cli_milestone_dispatch.py +0 -0
  493. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_cli_milestone_gate_b.py +0 -0
  494. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_cli_milestone_gate_c.py +0 -0
  495. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_cli_milestone_order.py +0 -0
  496. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  497. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_cli_milestone_ship.py +0 -0
  498. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_cli_network.py +0 -0
  499. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_cli_new_issue_chat.py +0 -0
  500. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_cli_plans.py +0 -0
  501. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_cli_portal.py +0 -0
  502. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_cli_pull_artifact.py +0 -0
  503. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_cli_queue.py +0 -0
  504. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_cli_reattach_sessions.py +0 -0
  505. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_cli_refine_board.py +0 -0
  506. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_cli_release_preflight.py +0 -0
  507. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_cli_release_propagate.py +0 -0
  508. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_cli_release_window.py +0 -0
  509. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_cli_repo_2220.py +0 -0
  510. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_cli_scorecard.py +0 -0
  511. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_cli_set_review_findings.py +0 -0
  512. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_cli_status_advisory_terminal.py +0 -0
  513. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_cli_status_merge_queue.py +0 -0
  514. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_cli_status_provider.py +0 -0
  515. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_cli_status_review_finalizing.py +0 -0
  516. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_cli_status_test_failed_tag.py +0 -0
  517. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_cli_status_usage_limit.py +0 -0
  518. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_cli_sync_comments_873.py +0 -0
  519. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_cli_test_plan.py +0 -0
  520. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_cli_track.py +0 -0
  521. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_cli_tui_update.py +0 -0
  522. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_cli_wait.py +0 -0
  523. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_client_base_install.py +0 -0
  524. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_comments.py +0 -0
  525. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_completion_summary.py +0 -0
  526. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_config.py +0 -0
  527. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_config_acceptance.py +0 -0
  528. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_config_audit.py +0 -0
  529. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_config_pricing.py +0 -0
  530. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  531. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_config_usage_gate.py +0 -0
  532. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_confirm_test.py +0 -0
  533. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_conflict_fix.py +0 -0
  534. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_conflict_fix_semantic.py +0 -0
  535. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_coord_test.py +0 -0
  536. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_coord_test_runner_baseline.py +0 -0
  537. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_coord_test_runner_populated_home.py +0 -0
  538. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_coord_test_runner_routing.py +0 -0
  539. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_coord_test_runner_toolchain.py +0 -0
  540. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_coord_web_sse_restart_live.py +0 -0
  541. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_coordinator_machine.py +0 -0
  542. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_cross_platform_imports.py +0 -0
  543. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_dashboard.py +0 -0
  544. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_dashboard_fixture.py +0 -0
  545. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_dashboard_terminal.py +0 -0
  546. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_dashboard_terminal_live.py +0 -0
  547. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_db.py +0 -0
  548. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_dead_end.py +0 -0
  549. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_deploy_coord_db_backup.py +0 -0
  550. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_deploy_coord_web_dist.py +0 -0
  551. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_deploy_coord_web_rollback.py +0 -0
  552. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_deploy_drive_queue_unit.py +0 -0
  553. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_deploy_manifest.py +0 -0
  554. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_deploy_units_lane.py +0 -0
  555. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_deploy_web_unit.py +0 -0
  556. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_deps.py +0 -0
  557. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_diagnose.py +0 -0
  558. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_dispatch.py +0 -0
  559. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_dispatch_target_validation.py +0 -0
  560. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_dist_name.py +0 -0
  561. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_done_housekeeping.py +0 -0
  562. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_drive.py +0 -0
  563. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_drive_queue.py +0 -0
  564. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_drive_state.py +0 -0
  565. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_drive_tmux.py +0 -0
  566. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_epic_up_capability_detection.py +0 -0
  567. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  568. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_epic_up_image_provenance.py +0 -0
  569. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_errors.py +0 -0
  570. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_events.py +0 -0
  571. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_failure_class.py +0 -0
  572. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_filelock.py +0 -0
  573. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  574. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_fix_of_force_override.py +0 -0
  575. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_fleet_config_health.py +0 -0
  576. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_fleet_health_probes.py +0 -0
  577. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_fleet_health_snapshot.py +0 -0
  578. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_forge_availability.py +0 -0
  579. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_freshness.py +0 -0
  580. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_gate_a.py +0 -0
  581. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_gate_b.py +0 -0
  582. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_gate_snapshot_staleness.py +0 -0
  583. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_gates.py +0 -0
  584. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  585. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_generated_types_fixture.py +0 -0
  586. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_github_ops.py +0 -0
  587. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_goal.py +0 -0
  588. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_graph_health.py +0 -0
  589. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_graph_selfheal_absent_2237.py +0 -0
  590. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_handoff.py +0 -0
  591. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_health_checks.py +0 -0
  592. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_health_cli.py +0 -0
  593. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_health_cli_graph.py +0 -0
  594. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_health_config.py +0 -0
  595. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_health_context.py +0 -0
  596. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_health_coord_web_ci_pin.py +0 -0
  597. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_health_deploy_lane_facts.py +0 -0
  598. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_health_incident_regression.py +0 -0
  599. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_health_pypi.py +0 -0
  600. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_health_registry.py +0 -0
  601. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_health_timer_active.py +0 -0
  602. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_health_toolchain.py +0 -0
  603. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_health_unit_drift.py +0 -0
  604. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_health_unit_enablement.py +0 -0
  605. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_hooks.py +0 -0
  606. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_human_attended_437.py +0 -0
  607. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_init.py +0 -0
  608. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_integration.py +0 -0
  609. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_interactive_briefing_echo.py +0 -0
  610. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_interactive_prefill_state.py +0 -0
  611. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_interactive_session_relaunch.py +0 -0
  612. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_interactive_test_verdict_backstop.py +0 -0
  613. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_interactive_token_attribution.py +0 -0
  614. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_interactive_worktree.py +0 -0
  615. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_issue_store_seam.py +0 -0
  616. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_liveness_auditor.py +0 -0
  617. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_liveness_notify.py +0 -0
  618. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_machine_pause.py +0 -0
  619. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_merge_verify.py +0 -0
  620. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_milestone_chat.py +0 -0
  621. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_milestone_dispatch.py +0 -0
  622. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_milestone_gate.py +0 -0
  623. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_milestone_order.py +0 -0
  624. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_milestone_seam.py +0 -0
  625. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_model_tiering.py +0 -0
  626. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_models.py +0 -0
  627. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_models_config_labels.py +0 -0
  628. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_needs_attention.py +0 -0
  629. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_network.py +0 -0
  630. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_new_issue_chat.py +0 -0
  631. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_next_release_tag.py +0 -0
  632. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_node_shim.py +0 -0
  633. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_notifier_baseline.py +0 -0
  634. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_notifier_cli.py +0 -0
  635. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_notifier_collect.py +0 -0
  636. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_notifier_config.py +0 -0
  637. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_notifier_drive_seam.py +0 -0
  638. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_notifier_isolation.py +0 -0
  639. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_notifier_predicate.py +0 -0
  640. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_notifier_quiet_hours.py +0 -0
  641. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_notifier_service.py +0 -0
  642. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_notify.py +0 -0
  643. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_notify_drain.py +0 -0
  644. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_openapi.py +0 -0
  645. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_operational_defaults.py +0 -0
  646. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_overlap_fence.py +0 -0
  647. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_overlap_predict.py +0 -0
  648. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_packaged_deploy_units.py +0 -0
  649. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_parentage.py +0 -0
  650. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_paste_landed.py +0 -0
  651. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_pipeline.py +0 -0
  652. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_plan_followup_approve_plan_command.py +0 -0
  653. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_plan_followup_pr_command.py +0 -0
  654. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_plan_followup_review_command.py +0 -0
  655. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_plan_only.py +0 -0
  656. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_plan_parser.py +0 -0
  657. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_platform_paths.py +0 -0
  658. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_portal_config.py +0 -0
  659. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_portal_store.py +0 -0
  660. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_portal_sync.py +0 -0
  661. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_pr_body_lint.py +0 -0
  662. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_prereqs.py +0 -0
  663. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_production_db_guard.py +0 -0
  664. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_progress.py +0 -0
  665. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_provider_seam.py +0 -0
  666. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_providers.py +0 -0
  667. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_providers_config_labels.py +0 -0
  668. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_providers_pty.py +0 -0
  669. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_quiet_hours.py +0 -0
  670. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_quiet_hours_store_2146.py +0 -0
  671. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_reap_merged_sessions.py +0 -0
  672. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_reap_stale_interactive_tick.py +0 -0
  673. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_reconcile.py +0 -0
  674. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_reconcile_branch.py +0 -0
  675. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_reconcile_completions.py +0 -0
  676. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_reconcile_merges.py +0 -0
  677. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_reconcile_no_agent_record.py +0 -0
  678. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_reconcile_tick.py +0 -0
  679. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_reconcile_usage_limit_done.py +0 -0
  680. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_refine_chat.py +0 -0
  681. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_release_cordon_2101.py +0 -0
  682. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  683. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_release_cordon_deadlock_2240.py +0 -0
  684. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_release_cordon_stuck_2490.py +0 -0
  685. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_release_propagate.py +0 -0
  686. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_release_unified_1242.py +0 -0
  687. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_release_verify.py +0 -0
  688. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_release_window.py +0 -0
  689. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_remote_auto_prune.py +0 -0
  690. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_remote_interactive_reaper.py +0 -0
  691. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_repo_edit_2220.py +0 -0
  692. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_repo_graph_fleet_2237.py +0 -0
  693. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_repo_onboard_2220.py +0 -0
  694. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_report_result_push.py +0 -0
  695. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_reports.py +0 -0
  696. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_retry.py +0 -0
  697. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_retry_advisory_1606.py +0 -0
  698. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_retry_type_1636.py +0 -0
  699. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_revalidate.py +0 -0
  700. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_review.py +0 -0
  701. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_review_end_review_without_verdict.py +0 -0
  702. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_review_parse_failure_diagnostic.py +0 -0
  703. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_review_reaffirm.py +0 -0
  704. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_review_state.py +0 -0
  705. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_review_verdict_backstop.py +0 -0
  706. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_review_verdict_override_audit.py +0 -0
  707. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_review_verdict_relay.py +0 -0
  708. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_review_zero_commits.py +0 -0
  709. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_scoped_review_wiring.py +0 -0
  710. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_scorecard.py +0 -0
  711. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_self_health.py +0 -0
  712. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_serve.py +0 -0
  713. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_serve_app_board_trim.py +0 -0
  714. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_session.py +0 -0
  715. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_slice_issue_attribution.py +0 -0
  716. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_smoke.py +0 -0
  717. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_smoke_live_checkout_restore.py +0 -0
  718. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_smoke_workflow.py +0 -0
  719. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_spend_ceiling.py +0 -0
  720. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_spend_ceiling_coordinator.py +0 -0
  721. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_split.py +0 -0
  722. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_split_work.py +0 -0
  723. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_stage_projection.py +0 -0
  724. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_stalled_pipeline.py +0 -0
  725. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_state.py +0 -0
  726. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_state_review_findings_daemon.py +0 -0
  727. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_status_fleet_footer.py +0 -0
  728. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_stop_1567.py +0 -0
  729. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_stuck.py +0 -0
  730. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_terminal_command.py +0 -0
  731. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_test_author.py +0 -0
  732. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_test_chat.py +0 -0
  733. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_test_orchestrator.py +0 -0
  734. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_test_report.py +0 -0
  735. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_test_verdict_parsing.py +0 -0
  736. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_test_verdict_transcript_floor.py +0 -0
  737. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_thin_client_board_audit.py +0 -0
  738. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_thin_client_config_load_1080.py +0 -0
  739. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_thin_client_daemon_routing_906.py +0 -0
  740. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_tmux_host.py +0 -0
  741. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_tmux_session.py +0 -0
  742. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_transcript_floor.py +0 -0
  743. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_usage.py +0 -0
  744. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_usage_limits.py +0 -0
  745. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_usage_rollup.py +0 -0
  746. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_venv_live_install_2121.py +0 -0
  747. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_version_single_source.py +0 -0
  748. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_watch.py +0 -0
  749. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  750. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_worker_events.py +0 -0
  751. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_worker_image_pin_sync.py +0 -0
  752. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_worker_safety.py +0 -0
  753. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_worker_test_scoping.py +0 -0
  754. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_worktree.py +0 -0
  755. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  756. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tui/Cargo.lock +0 -0
  757. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tui/Cargo.toml +0 -0
  758. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tui/cargo-config-local-quadraui.toml.example +0 -0
  759. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tui/src/app/audit.rs +0 -0
  760. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tui/src/app/chat.rs +0 -0
  761. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tui/src/app/data.rs +0 -0
  762. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tui/src/app/dialogs.rs +0 -0
  763. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tui/src/app/doc_tabs.rs +0 -0
  764. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tui/src/app/drive.rs +0 -0
  765. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tui/src/app/drive_queue.rs +0 -0
  766. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tui/src/app/escalation.rs +0 -0
  767. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tui/src/app/events.rs +0 -0
  768. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tui/src/app/fixtures.rs +0 -0
  769. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tui/src/app/fleet_health.rs +0 -0
  770. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tui/src/app/fleet_sessions.rs +0 -0
  771. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tui/src/app/fleet_terminals.rs +0 -0
  772. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tui/src/app/format.rs +0 -0
  773. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tui/src/app/milestone_dag.rs +0 -0
  774. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tui/src/app/mod.rs +0 -0
  775. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tui/src/app/msv.rs +0 -0
  776. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tui/src/app/pipeline.rs +0 -0
  777. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tui/src/app/plans.rs +0 -0
  778. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tui/src/app/render.rs +0 -0
  779. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tui/src/app/reports.rs +0 -0
  780. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tui/src/app/sessions.rs +0 -0
  781. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tui/src/app/settings_ui.rs +0 -0
  782. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tui/src/app/sidebar.rs +0 -0
  783. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tui/src/app/terminal.rs +0 -0
  784. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tui/src/app/tests.rs +0 -0
  785. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tui/src/app/types.rs +0 -0
  786. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tui/src/app/workspace.rs +0 -0
  787. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tui/src/bin/gtk.rs +0 -0
  788. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tui/src/commands.rs +0 -0
  789. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tui/src/lib.rs +0 -0
  790. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tui/src/main.rs +0 -0
  791. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tui/src/settings.rs +0 -0
  792. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tui/tests/acceptance.rs +0 -0
  793. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tui/tests/cli.rs +0 -0
  794. {code_coordinator-0.5.203 → code_coordinator-0.5.204}/tui/tests/fixtures/board_sample.json +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-coordinator
3
- Version: 0.5.203
3
+ Version: 0.5.204
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.203
3
+ Version: 0.5.204
4
4
  Summary: Coordinate Claude Code workers across multiple machines and repos.
5
5
  Author-email: John Donaghy <johnfdonaghy@gmail.com>
6
6
  License-Expression: LicenseRef-FSL-1.1-MIT
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "0.5.203",
2
+ "tag": "0.5.204",
3
3
  "distance": 0,
4
- "node": "gdac58130113c138d2461927553c0e5039233000e",
4
+ "node": "g471c14e8906b4f0ebf43a5b08365c101a0b02156",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-21"
@@ -4981,6 +4981,119 @@ def _maybe_clear_expected_red(entry: QueuedMerge, board, gh_ops: GhOps) -> Merge
4981
4981
  return MergeEvent(entry, event_type, msg)
4982
4982
 
4983
4983
 
4984
+ def _maybe_push_design_round(
4985
+ entry: QueuedMerge, config, gh_ops: GhOps
4986
+ ) -> "MergeEvent | None":
4987
+ """PDR-3 (#2508): right after a `type="mock-author"` (Gate A) PR has
4988
+ actually merged into ``entry.target_branch``, push its rendered mock
4989
+ bundle + contract to the portal as a design round — the epic-#2506
4990
+ bridge's third leg, wiring PDR-1's link (``coord portal link``,
4991
+ #2507) and PDR-2's upload route (coord-portal#120) into the one signal
4992
+ ``coord/merge_queue.py`` already fires for any assignment type: a real
4993
+ merge.
4994
+
4995
+ Returns ``None`` for every "nothing to do" reason — not a `mock-author`
4996
+ entry, no ``portal:`` block configured, the tracking issue isn't under
4997
+ a milestone, or (the common case pre-#2508) the milestone has no portal
4998
+ link on file. That last one is the fail-open posture
4999
+ ``coord.portal_bridge``'s module docstring already states for the rest
5000
+ of this bridge: "a portal outage must never block a merge or a
5001
+ dispatch" applies just as much to "there's simply no portal submission
5002
+ for this milestone yet" — until an operator runs ``coord portal link``,
5003
+ this is silently, correctly, a no-op. Every other failure (can't fetch
5004
+ the tracking issue, can't collect the bundle, upload/enqueue rejected)
5005
+ degrades to a ``design_round_push_failed`` event rather than raising —
5006
+ called from ``process()`` inside its own try/except, same discipline as
5007
+ :func:`_maybe_clear_expected_red` right above it, but belt-and-braces
5008
+ here too since this reaches out to two different externals (GitHub's
5009
+ Contents API and the portal itself).
5010
+ """
5011
+ if entry.assignment_type != "mock-author":
5012
+ return None
5013
+ portal_cfg = getattr(config, "portal", None)
5014
+ if portal_cfg is None or not portal_cfg.enabled:
5015
+ return None
5016
+
5017
+ # #1467-style optional probe: `get_issue` isn't part of the GhOps
5018
+ # Protocol proper (most stubs in tests never need it), so a stub that
5019
+ # doesn't implement it degrades to "nothing to do" rather than an
5020
+ # AttributeError — mirrors `branch_has_merge_commit`'s optional-probe
5021
+ # pattern used for the rebase→squash fallback above.
5022
+ get_issue = getattr(gh_ops, "get_issue", None)
5023
+ if get_issue is None:
5024
+ return None
5025
+ try:
5026
+ issue_data = get_issue(entry.repo_github, entry.issue_number)
5027
+ except Exception as e: # noqa: BLE001 — best-effort, see docstring
5028
+ return MergeEvent(
5029
+ entry, "design_round_push_failed",
5030
+ f"could not fetch tracking issue #{entry.issue_number}: {e}",
5031
+ )
5032
+ milestone = (issue_data or {}).get("milestone") or {}
5033
+ milestone_number = milestone.get("number")
5034
+ if milestone_number is None:
5035
+ # A "mock-author" entry not scoped to a milestone at all (shouldn't
5036
+ # happen via `coord acceptance mock`, which always resolves one —
5037
+ # but this hook must survive a hand-dispatched entry that skips it).
5038
+ return None
5039
+
5040
+ from coord import portal_store # noqa: PLC0415
5041
+
5042
+ link = portal_store.get_milestone_link(
5043
+ repo_name=entry.repo_name, milestone_number=milestone_number
5044
+ )
5045
+ if link is None:
5046
+ # PDR-1: no `coord portal link` recorded for this milestone yet —
5047
+ # the whole point of the fail-open posture (see docstring above).
5048
+ return None
5049
+
5050
+ from coord.mock_author import build_design_round, collect_mock_bundle_files # noqa: PLC0415
5051
+ from coord.portal_bridge import PortalBridgeError, client_from_config # noqa: PLC0415
5052
+ from coord.portal_sync import PortalSyncError, enqueue_design_round # noqa: PLC0415
5053
+
5054
+ client = client_from_config(portal_cfg)
5055
+ if client is None:
5056
+ return None
5057
+
5058
+ try:
5059
+ files = collect_mock_bundle_files(
5060
+ entry.repo_github, milestone_number, entry.target_branch
5061
+ )
5062
+ except Exception as e: # noqa: BLE001 — best-effort, see docstring
5063
+ return MergeEvent(
5064
+ entry, "design_round_push_failed",
5065
+ f"could not collect mock bundle: {e}",
5066
+ )
5067
+ if not files:
5068
+ return MergeEvent(
5069
+ entry, "design_round_push_skipped",
5070
+ f"no rendered mock bundle found on {entry.target_branch} for "
5071
+ f"ms-{milestone_number} — nothing to push",
5072
+ )
5073
+
5074
+ try:
5075
+ bundle_key = client.upload_bundle(link.submission_id, files)
5076
+ except PortalBridgeError as e:
5077
+ return MergeEvent(entry, "design_round_push_failed", f"bundle upload failed: {e}")
5078
+
5079
+ design_round = build_design_round(
5080
+ milestone_title=milestone.get("title") or f"ms-{milestone_number}",
5081
+ tracking_issue_title=issue_data.get("title") or "",
5082
+ tracking_issue_body=issue_data.get("body") or "",
5083
+ bundle_key=bundle_key,
5084
+ )
5085
+ try:
5086
+ row = enqueue_design_round(link.submission_id, design_round)
5087
+ except PortalSyncError as e:
5088
+ return MergeEvent(entry, "design_round_push_failed", f"enqueue failed: {e}")
5089
+
5090
+ return MergeEvent(
5091
+ entry, "design_round_queued",
5092
+ f"queued design round for portal submission {link.submission_id} "
5093
+ f"(seq={row.seq}, bundle_key={bundle_key})",
5094
+ )
5095
+
5096
+
4984
5097
  def process(
4985
5098
  items: list[QueuedMerge],
4986
5099
  gh_ops: GhOps,
@@ -6205,6 +6318,20 @@ def process(
6205
6318
  clear_event = MergeEvent(entry, "expected_red_clear_failed", str(e))
6206
6319
  if clear_event is not None:
6207
6320
  events.append(clear_event)
6321
+ # PDR-3 (#2508): a merged Gate-A (`type="mock-author"`)
6322
+ # branch auto-pushes a design round to the portal, if (and
6323
+ # only if) its milestone has a portal link on file. Best
6324
+ # effort, same as the expected_red clear above — a portal
6325
+ # outage, or simply no `coord portal link` recorded, must
6326
+ # never undo a real merge.
6327
+ try:
6328
+ design_round_event = _maybe_push_design_round(entry, config, gh_ops)
6329
+ except Exception as e: # noqa: BLE001 — bookkeeping, never undoes a real merge
6330
+ design_round_event = MergeEvent(
6331
+ entry, "design_round_push_failed", str(e)
6332
+ )
6333
+ if design_round_event is not None:
6334
+ events.append(design_round_event)
6208
6335
  continue
6209
6336
  entry.state = CONFLICT
6210
6337
  entry.error = msg
@@ -25,10 +25,18 @@ TYPES``) and the matching exemption from the acceptance-dir auto-forbid in
25
25
  Work → Test → Review → Merge pipeline as any other branch (`required_gates`
26
26
  is the repo's normal `default_gates`) — Gate A produces a normal reviewed
27
27
  commit, not a special-cased one.
28
+
29
+ **PDR-3 (#2508):** :func:`collect_mock_bundle_files` and
30
+ :func:`build_design_round` are the other end of Gate A's output — read back
31
+ off a merged mock-author branch and reshaped into a portal design round by
32
+ ``coord.merge_queue``'s post-merge hook, so a Gate-A merge auto-pushes a
33
+ design round to any milestone with a portal link (`coord portal link`,
34
+ PDR-1/#2507) instead of that link sitting unread.
28
35
  """
29
36
  from __future__ import annotations
30
37
 
31
38
  import uuid
39
+ from typing import Any
32
40
 
33
41
  import httpx
34
42
 
@@ -332,3 +340,97 @@ def dispatch_acceptance_mock(
332
340
  pass
333
341
 
334
342
  return assignment_id, machine.name
343
+
344
+
345
+ # ── PDR-3 (#2508): reading a merged Gate-A branch back into a design round ──
346
+
347
+
348
+ def collect_mock_bundle_files(
349
+ repo_github: str, milestone_number: int, branch: str
350
+ ) -> dict[str, str]:
351
+ """Read a rendered Gate-A bundle off *branch* (post-merge) via the
352
+ GitHub Contents API — no local checkout, the same "gh-only wire layer"
353
+ posture the merge queue's other post-merge reads already use (see e.g.
354
+ ``coord.acceptance.clear_expected_red_via_pr``'s docstring).
355
+
356
+ Returns a ``{relative_path: content}`` mapping — ``"contract.md"`` plus
357
+ every ``mocks/*.html`` fixture under
358
+ ``tests/acceptance/ms-<milestone_number>/`` — ready to hand straight to
359
+ :meth:`coord.portal_bridge.PortalBridgeClient.upload_bundle`. Empty
360
+ when the directory doesn't exist on *branch* (Gate A hasn't merged
361
+ anything there yet, or the repo's acceptance driver renders to a
362
+ different mock glob than ``*.html``) — callers treat that as "nothing
363
+ to push", not an error.
364
+ """
365
+ ms_dir = f"tests/acceptance/{ms_dirname(milestone_number)}"
366
+ files: dict[str, str] = {}
367
+ if github_ops.repo_file_exists(repo_github, f"{ms_dir}/contract.md", branch):
368
+ files["contract.md"] = github_ops.get_repo_file(
369
+ repo_github, f"{ms_dir}/contract.md", branch
370
+ )
371
+ try:
372
+ mock_names = github_ops.list_repo_dir(repo_github, f"{ms_dir}/mocks", branch)
373
+ except RuntimeError:
374
+ # No `mocks/` dir on this branch at all — same "nothing to push"
375
+ # case list_repo_dir already returns [] for a missing path; the
376
+ # explicit catch is only for a `gh` error shaped differently.
377
+ mock_names = []
378
+ for name in mock_names:
379
+ if name.endswith(".html"):
380
+ files[f"mocks/{name}"] = github_ops.get_repo_file(
381
+ repo_github, f"{ms_dir}/mocks/{name}", branch
382
+ )
383
+ return files
384
+
385
+
386
+ def build_design_round(
387
+ *,
388
+ milestone_title: str,
389
+ tracking_issue_title: str,
390
+ tracking_issue_body: str,
391
+ bundle_key: str,
392
+ round_number: int = 1,
393
+ ) -> dict[str, Any]:
394
+ """Build the D1 metadata half of a design round from the same inputs
395
+ `coord milestone chat`'s steward already reads: the tracking issue's
396
+ title/body (source of the plain-language ``outcome_definition``) and its
397
+ ``## Work order`` block (source of the ``decomposition``).
398
+
399
+ *bundle_key* is the R2 object key
400
+ :meth:`coord.portal_bridge.PortalBridgeClient.upload_bundle` returned
401
+ for this round's rendered mock bundle + contract — see that method's
402
+ docstring and :func:`coord.portal_sync.enqueue_design_round`'s for why
403
+ the bundle itself is never inlined into this payload.
404
+
405
+ A missing/malformed ``## Work order`` block degrades to an empty
406
+ ``decomposition`` rather than raising — a milestone that hasn't written
407
+ one yet (or has a stale one that fails validation) should still get a
408
+ design round pushed with whatever plain-language description its
409
+ tracking issue carries; the portal shows a design round with no listed
410
+ decomposition just fine.
411
+ """
412
+ from coord.milestone_order import WorkOrderError, parse_work_order # noqa: PLC0415
413
+
414
+ try:
415
+ work_order = parse_work_order(tracking_issue_body)
416
+ except WorkOrderError:
417
+ work_order = None
418
+ decomposition = [
419
+ {
420
+ "issue_number": node.issue_number,
421
+ "group": node.group,
422
+ "after": list(node.after),
423
+ }
424
+ for node in (work_order.nodes if work_order is not None else ())
425
+ ]
426
+ outcome_definition = (
427
+ tracking_issue_body.strip()
428
+ or tracking_issue_title.strip()
429
+ or milestone_title
430
+ )
431
+ return {
432
+ "round": round_number,
433
+ "outcome_definition": outcome_definition,
434
+ "decomposition": decomposition,
435
+ "bundle_key": bundle_key,
436
+ }
@@ -3,9 +3,12 @@
3
3
  **The gap this closes.** coord-portal has offered ``POST /api/bridge/push``
4
4
  since ms-1, and the entire ms-3 mail pipeline (``docs/CUSTOMER_PORTAL.md``) is
5
5
  live and waiting downstream of a queued outbox row — but nothing on this side
6
- has ever called it. This module is that client: a thin wrapper over the three
7
- bridge routes (``push``, ``pull``, ``heartbeat``), matching the wire contract
8
- coord-portal's ``src/bridge/*`` and ``src/routes/bridge.ts`` define.
6
+ has ever called it. This module is that client: a thin wrapper over
7
+ coord-portal's bridge routes (``push``, ``pull``, ``heartbeat``, and as of
8
+ PDR-3/#2508 ``upload``), matching the wire contract coord-portal's
9
+ ``src/bridge/*`` and ``src/routes/bridge.ts`` define. ``upload`` is the one
10
+ route that carries a bundle's raw content rather than D1 metadata — see
11
+ :meth:`PortalBridgeClient.upload_bundle`.
9
12
 
10
13
  **What this module deliberately does NOT do**, per #2179's own framing —
11
14
  those are separate, harder design questions and belong to follow-up issues:
@@ -319,6 +322,45 @@ class PortalBridgeClient:
319
322
  except ValueError as exc:
320
323
  raise PortalBridgeError(f"GET /api/bridge/pull: non-JSON response: {exc}") from exc
321
324
 
325
+ def upload_bundle(self, submission_id: str, files: dict[str, str]) -> str:
326
+ """``POST /api/bridge/upload`` — store a design round's rendered
327
+ mock bundle + contract in the portal's R2 (coord-portal#120, PDR-2).
328
+
329
+ Deliberately a fourth route, not folded into :meth:`push`: the
330
+ three ``/api/bridge/*`` routes this module otherwise speaks
331
+ (``push``/``pull``/``heartbeat``) carry only D1 metadata —
332
+ :func:`coord.portal_sync.enqueue_design_round`'s own docstring
333
+ already says the mock bundle itself "is not uploaded here". This is
334
+ that upload, kept separate so a bundle (arbitrarily large HTML) is
335
+ never accidentally routed through :data:`MAX_PUSH_UPDATES`-bounded
336
+ ``push`` batching.
337
+
338
+ *files* maps a path relative to the bundle root — e.g.
339
+ ``"contract.md"``, ``"mocks/index.html"`` — to its text content; see
340
+ :func:`coord.mock_author.collect_mock_bundle_files`, which builds
341
+ exactly this mapping by reading a merged Gate-A branch back off
342
+ GitHub. Returns the R2 object key the portal assigns the bundle —
343
+ callers thread that straight into the ``design_round`` payload
344
+ :func:`coord.portal_sync.enqueue_design_round` queues, so the
345
+ customer's browser has something to fetch. Raises
346
+ :class:`PortalBridgeError` the same way every other method here
347
+ does: a transport failure, a 401, a 4xx/5xx, or a response with no
348
+ usable ``bundle_key``.
349
+ """
350
+ if not files:
351
+ raise PortalBridgeError("upload_bundle() got an empty files mapping")
352
+ data = self._post(
353
+ "/api/bridge/upload",
354
+ {"submission_id": submission_id, "files": files},
355
+ )
356
+ bundle_key = data.get("bundle_key")
357
+ if not isinstance(bundle_key, str) or not bundle_key:
358
+ raise PortalBridgeError(
359
+ f"POST /api/bridge/upload: response had no 'bundle_key' "
360
+ f"string: {data!r}"
361
+ )
362
+ return bundle_key
363
+
322
364
 
323
365
  def _utcnow_iso() -> str:
324
366
  return (
@@ -177,11 +177,16 @@ def enqueue_design_round(
177
177
  ) -> portal_store.OutboxRow:
178
178
  """Queue a design round (the D1 metadata half) for *submission_id*.
179
179
 
180
- The mock bundle itself is an R2 object and is **not** uploaded here: the
181
- portal's upload route is not part of the three bridge routes this side
182
- speaks (:mod:`coord.portal_bridge`), so *design_round* is expected to
183
- already carry whatever reference the customer's browser will follow. What
184
- this function guarantees is the ordering see :func:`enqueue_status`.
180
+ The mock bundle itself is an R2 object and is **not** uploaded here:
181
+ that goes through :meth:`coord.portal_bridge.PortalBridgeClient.
182
+ upload_bundle` (coord-portal#120, PDR-2) a separate call from the
183
+ three ``push``/``pull``/``heartbeat`` D1-metadata routes this queue
184
+ drains so *design_round* is expected to already carry whatever
185
+ reference (the returned bundle key) the customer's browser will follow.
186
+ The auto-push caller (:mod:`coord.merge_queue`'s post-merge hook,
187
+ PDR-3/#2508) uploads first and passes the resulting key through
188
+ :func:`coord.mock_author.build_design_round`. What this function
189
+ guarantees is the ordering — see :func:`enqueue_status`.
185
190
  """
186
191
  if not isinstance(design_round, dict) or not design_round:
187
192
  raise PortalSyncError("design_round payload must be a non-empty mapping")
@@ -1493,6 +1493,206 @@ class TestExpectedRedClearOnMerge:
1493
1493
  assert "coord acceptance expected-red api --clear --issue 1" in events[-1].message
1494
1494
 
1495
1495
 
1496
+ class _StubResponse:
1497
+ """Minimal `httpx.Response` stand-in — mirrors `test_portal_bridge.py`'s
1498
+ `_Response`, needed here too since `_maybe_push_design_round` (PDR-3,
1499
+ #2508) drives a real `PortalBridgeClient` over `httpx.post`."""
1500
+
1501
+ def __init__(self, status_code=200, json_body=None, text="") -> None:
1502
+ self.status_code = status_code
1503
+ self._json_body = json_body
1504
+ self.text = text or (str(json_body) if json_body is not None else "")
1505
+
1506
+ def json(self):
1507
+ if self._json_body is None:
1508
+ raise ValueError("no body")
1509
+ return self._json_body
1510
+
1511
+
1512
+ @dataclass
1513
+ class _MockAuthorGh(FakeGh):
1514
+ """FakeGh + `get_issue` — the one extra surface
1515
+ `_maybe_push_design_round` (PDR-3, #2508) needs to resolve a
1516
+ `type="mock-author"` entry's milestone. Not part of `GhOps` proper (see
1517
+ `_maybe_push_design_round`'s optional-probe docstring), so every other
1518
+ `FakeGh`-based test in this file is unaffected."""
1519
+
1520
+ issue_milestone_number: int | None = 9
1521
+ issue_title: str = "Q3 push"
1522
+ issue_body: str = "Ship the thing."
1523
+
1524
+ def get_issue(self, repo: str, issue_number: int) -> dict:
1525
+ milestone = (
1526
+ {"number": self.issue_milestone_number, "title": "Q3 push"}
1527
+ if self.issue_milestone_number is not None
1528
+ else None
1529
+ )
1530
+ return {"title": self.issue_title, "body": self.issue_body, "milestone": milestone}
1531
+
1532
+
1533
+ class TestDesignRoundPushOnMerge:
1534
+ """PDR-3 (#2508): a merged `type="mock-author"` (Gate A) PR auto-pushes
1535
+ a design round to the portal — but only for a milestone with a portal
1536
+ link on file (`coord portal link`, PDR-1/#2507). No link, no portal
1537
+ config, or a GhOps stub that can't even resolve the tracking issue all
1538
+ degrade to a no-op, matching `coord.portal_bridge`'s fail-open posture
1539
+ for the rest of this bridge ("a portal outage must never block a
1540
+ merge")."""
1541
+
1542
+ @staticmethod
1543
+ def _board(completed=None):
1544
+ from coord.models import Board
1545
+ return Board(active=[], completed=list(completed or []))
1546
+
1547
+ @staticmethod
1548
+ def _config(*, portal_enabled: bool = True):
1549
+ """A minimal config-like object carrying only what
1550
+ `_maybe_push_design_round` and the ordinary merge-gate defaults
1551
+ read — same "build the smallest _Cfg that satisfies the gate
1552
+ reads" pattern `TestReviewGate._config` uses just above."""
1553
+ from coord.config import PortalConfig
1554
+
1555
+ @dataclass
1556
+ class _Cfg:
1557
+ portal: PortalConfig = field(default_factory=PortalConfig)
1558
+
1559
+ cfg = _Cfg()
1560
+ cfg.portal = PortalConfig(
1561
+ enabled=portal_enabled,
1562
+ base_url="https://intake.example.com",
1563
+ bridge_client_id="id-123",
1564
+ bridge_client_secret="secret-456",
1565
+ )
1566
+ return cfg
1567
+
1568
+ def _link(self, submission_id: str = "sub_1", milestone_number: int = 9) -> None:
1569
+ from coord import portal_store
1570
+ portal_store.link_milestone(
1571
+ repo_name="api", milestone_number=milestone_number, submission_id=submission_id,
1572
+ )
1573
+
1574
+ def test_no_op_when_portal_not_configured(self) -> None:
1575
+ self._link()
1576
+ events = process(
1577
+ [_q("w1", size=10, assignment_type="mock-author")], _MockAuthorGh(),
1578
+ config=None, board=self._board(),
1579
+ )
1580
+ assert not [e for e in events if e.kind.startswith("design_round")]
1581
+
1582
+ def test_no_op_when_portal_disabled(self) -> None:
1583
+ self._link()
1584
+ cfg = self._config(portal_enabled=False)
1585
+ events = process(
1586
+ [_q("w1", size=10, assignment_type="mock-author")], _MockAuthorGh(),
1587
+ config=cfg, board=self._board(),
1588
+ )
1589
+ assert not [e for e in events if e.kind.startswith("design_round")]
1590
+
1591
+ def test_no_op_when_milestone_has_no_portal_link(self) -> None:
1592
+ # No `_link()` call — milestone 9 is never linked.
1593
+ cfg = self._config()
1594
+ events = process(
1595
+ [_q("w1", size=10, assignment_type="mock-author")], _MockAuthorGh(),
1596
+ config=cfg, board=self._board(),
1597
+ )
1598
+ assert not [e for e in events if e.kind.startswith("design_round")]
1599
+ assert events[-1].kind == "merged" # the ordinary "left open" event still fires
1600
+
1601
+ def test_no_op_for_a_plain_work_entry(self) -> None:
1602
+ """Only `type="mock-author"` triggers this hook — a normal `work`
1603
+ merge must never attempt a portal push."""
1604
+ self._link()
1605
+ cfg = self._config()
1606
+ events = process(
1607
+ [_q("w1", size=10, assignment_type="work")], _MockAuthorGh(),
1608
+ config=cfg, board=self._board(),
1609
+ )
1610
+ assert not [e for e in events if e.kind.startswith("design_round")]
1611
+
1612
+ def test_gh_ops_lacking_get_issue_degrades_to_a_noop(self) -> None:
1613
+ """An ordinary `FakeGh` (no `get_issue`) must not crash — same
1614
+ optional-probe convention `branch_has_merge_commit` already uses."""
1615
+ self._link()
1616
+ cfg = self._config()
1617
+ events = process(
1618
+ [_q("w1", size=10, assignment_type="mock-author")], FakeGh(),
1619
+ config=cfg, board=self._board(),
1620
+ )
1621
+ assert not [e for e in events if e.kind.startswith("design_round")]
1622
+
1623
+ def test_pushes_a_design_round_when_linked(self, monkeypatch) -> None:
1624
+ self._link(submission_id="sub_1", milestone_number=9)
1625
+ cfg = self._config()
1626
+
1627
+ monkeypatch.setattr(
1628
+ "coord.mock_author.collect_mock_bundle_files",
1629
+ lambda repo_github, milestone_number, branch: {"contract.md": "# contract"},
1630
+ )
1631
+ seen_upload = {}
1632
+
1633
+ def _post(url, json=None, headers=None, timeout=None):
1634
+ seen_upload["url"] = url
1635
+ seen_upload["json"] = json
1636
+ return _StubResponse(200, {"bundle_key": "bundles/sub_1/r1.tar"})
1637
+
1638
+ monkeypatch.setattr("httpx.post", _post)
1639
+
1640
+ events = process(
1641
+ [_q("w1", size=10, assignment_type="mock-author")], _MockAuthorGh(),
1642
+ config=cfg, board=self._board(),
1643
+ )
1644
+
1645
+ assert events[-1].kind == "design_round_queued"
1646
+ assert "sub_1" in events[-1].message
1647
+ assert seen_upload["url"] == "https://intake.example.com/api/bridge/upload"
1648
+ assert seen_upload["json"]["submission_id"] == "sub_1"
1649
+ assert seen_upload["json"]["files"] == {"contract.md": "# contract"}
1650
+
1651
+ from coord import portal_store
1652
+ rows = portal_store.outbox_for_submission("sub_1")
1653
+ assert len(rows) == 1
1654
+ assert rows[0].kind == "design_round"
1655
+ assert rows[0].fields["design_round"]["bundle_key"] == "bundles/sub_1/r1.tar"
1656
+ assert "Ship the thing." in rows[0].fields["design_round"]["outcome_definition"]
1657
+
1658
+ def test_no_bundle_files_yields_a_skip_event(self, monkeypatch) -> None:
1659
+ self._link()
1660
+ cfg = self._config()
1661
+ monkeypatch.setattr(
1662
+ "coord.mock_author.collect_mock_bundle_files",
1663
+ lambda repo_github, milestone_number, branch: {},
1664
+ )
1665
+
1666
+ events = process(
1667
+ [_q("w1", size=10, assignment_type="mock-author")], _MockAuthorGh(),
1668
+ config=cfg, board=self._board(),
1669
+ )
1670
+
1671
+ assert events[-1].kind == "design_round_push_skipped"
1672
+
1673
+ def test_upload_failure_degrades_to_a_failed_event_not_an_exception(
1674
+ self, monkeypatch,
1675
+ ) -> None:
1676
+ self._link()
1677
+ cfg = self._config()
1678
+ monkeypatch.setattr(
1679
+ "coord.mock_author.collect_mock_bundle_files",
1680
+ lambda repo_github, milestone_number, branch: {"contract.md": "# contract"},
1681
+ )
1682
+ monkeypatch.setattr(
1683
+ "httpx.post", lambda *a, **k: _StubResponse(401, {}, text="unauthorized"),
1684
+ )
1685
+
1686
+ events = process(
1687
+ [_q("w1", size=10, assignment_type="mock-author")], _MockAuthorGh(),
1688
+ config=cfg, board=self._board(),
1689
+ )
1690
+
1691
+ assert events[-1].kind == "design_round_push_failed"
1692
+ # The merge itself still went through — this hook never undoes it.
1693
+ assert any(e.kind == "merged" for e in events)
1694
+
1695
+
1496
1696
  class _TestAuthorGateGh(FakeGh):
1497
1697
  """#2191: FakeGh + the API-only manifest/issue-state surface
1498
1698
  `coord.acceptance.missing_expected_red_warning` needs. Defaults to a