code-coordinator 0.5.231__tar.gz → 0.5.232__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 (811) hide show
  1. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/code_coordinator.egg-info/scm_version.json +2 -2
  4. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/acceptance.py +229 -25
  5. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/commands/acceptance.py +2 -1
  6. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/conflict_fix.py +64 -35
  7. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/milestone_dispatch.py +58 -14
  8. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/models.py +18 -8
  9. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/notify.py +7 -2
  10. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/test_author.py +47 -22
  11. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_acceptance.py +178 -0
  12. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_conflict_fix.py +27 -0
  13. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_milestone_dispatch.py +66 -2
  14. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_test_author.py +35 -4
  15. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/.claude/commands/board.md +0 -0
  16. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/.claude/commands/complete-session.md +0 -0
  17. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/.claude/commands/coordinator.md +0 -0
  18. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/.githooks/_lib.sh +0 -0
  19. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/.githooks/post-checkout +0 -0
  20. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/.githooks/post-commit +0 -0
  21. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/.githooks/post-merge +0 -0
  22. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  23. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/.github/coord-ci-acceptance.yml +0 -0
  24. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/.github/workflows/auto-release.yml +0 -0
  25. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/.github/workflows/cargo-test.yml +0 -0
  26. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/.github/workflows/publish.yml +0 -0
  27. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/.github/workflows/release-tui.yml +0 -0
  28. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/.github/workflows/test.yml +0 -0
  29. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/.gitignore +0 -0
  30. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/CLAUDE.md +0 -0
  31. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/GOAL.md +0 -0
  32. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/LICENSE +0 -0
  33. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/MANIFEST.in +0 -0
  34. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/README.md +0 -0
  35. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/code_coordinator.egg-info/SOURCES.txt +0 -0
  36. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/code_coordinator.egg-info/dependency_links.txt +0 -0
  37. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/code_coordinator.egg-info/entry_points.txt +0 -0
  38. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/code_coordinator.egg-info/requires.txt +0 -0
  39. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/code_coordinator.egg-info/scm_file_list.json +0 -0
  40. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/code_coordinator.egg-info/top_level.txt +0 -0
  41. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/__init__.py +0 -0
  42. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/_board_mapping.py +0 -0
  43. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/acceptance_drivers.py +0 -0
  44. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/agent.py +0 -0
  45. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/agent_app.py +0 -0
  46. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/agent_update.py +0 -0
  47. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/agents/opencode/.gitignore +0 -0
  48. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/agents/opencode/agents/work.md +0 -0
  49. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/agents/opencode/routing.jsonc +0 -0
  50. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/approved_work.py +0 -0
  51. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/audit.py +0 -0
  52. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/auto_loop.py +0 -0
  53. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/block_log.py +0 -0
  54. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/board_bool_guard.py +0 -0
  55. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/board_service.py +0 -0
  56. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/board_wire.py +0 -0
  57. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/brain.py +0 -0
  58. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/branch_model.py +0 -0
  59. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/bug_intake.py +0 -0
  60. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/cargo_cache.py +0 -0
  61. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/ci_fix.py +0 -0
  62. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/ci_github.py +0 -0
  63. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/ci_gitlab.py +0 -0
  64. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/ci_store.py +0 -0
  65. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/claim.py +0 -0
  66. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/cli.py +0 -0
  67. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/client.py +0 -0
  68. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/commands/__init__.py +0 -0
  69. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/commands/_common.py +0 -0
  70. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/commands/agent_ops.py +0 -0
  71. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/commands/audit.py +0 -0
  72. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/commands/chat.py +0 -0
  73. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/commands/dispatch.py +0 -0
  74. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/commands/dispatch_workers.py +0 -0
  75. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/commands/drive.py +0 -0
  76. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/commands/drive_queue.py +0 -0
  77. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/commands/gate_a.py +0 -0
  78. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/commands/gates.py +0 -0
  79. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/commands/issues.py +0 -0
  80. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/commands/lifecycle.py +0 -0
  81. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/commands/merge.py +0 -0
  82. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/commands/milestone.py +0 -0
  83. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/commands/plan_followup.py +0 -0
  84. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/commands/plans.py +0 -0
  85. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/commands/portal.py +0 -0
  86. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/commands/release.py +0 -0
  87. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/commands/repo.py +0 -0
  88. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/commands/report.py +0 -0
  89. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/commands/review.py +0 -0
  90. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/commands/scorecard.py +0 -0
  91. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/commands/sessions.py +0 -0
  92. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/commands/setup.py +0 -0
  93. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/commands/status.py +0 -0
  94. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/commands/terminal.py +0 -0
  95. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/commands/test_gate.py +0 -0
  96. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/commands/tui.py +0 -0
  97. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/comments.py +0 -0
  98. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/config.py +0 -0
  99. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/config_reload.py +0 -0
  100. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/confirm_test.py +0 -0
  101. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/dao.py +0 -0
  102. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/dashboard/__init__.py +0 -0
  103. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/dashboard/fixture.py +0 -0
  104. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/dashboard/index.html +0 -0
  105. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/dashboard/server.py +0 -0
  106. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/dashboard/terminal.py +0 -0
  107. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/db.py +0 -0
  108. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/dead_end.py +0 -0
  109. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/deploy/README.md +0 -0
  110. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/deploy/coord-agent.service +0 -0
  111. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/deploy/coord-db-backup.service +0 -0
  112. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/deploy/coord-db-backup.sh +0 -0
  113. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/deploy/coord-db-backup.timer +0 -0
  114. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/deploy/coord-drive-queue.service +0 -0
  115. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/deploy/coord-drive-queue.timer +0 -0
  116. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/deploy/coord-notify.service +0 -0
  117. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/deploy/coord-notify.timer +0 -0
  118. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/deploy/coord-release-propagate.service +0 -0
  119. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/deploy/coord-release-propagate.timer +0 -0
  120. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/deploy/coord-release-window.service +0 -0
  121. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/deploy/coord-release-window.timer +0 -0
  122. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/deploy/coord-serve.service +0 -0
  123. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/deploy/coord-web-dist-build.service +0 -0
  124. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/deploy/coord-web-dist-build.timer +0 -0
  125. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/deploy/coord-web.service +0 -0
  126. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/deploy_manifest.py +0 -0
  127. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/deploy_units.py +0 -0
  128. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/deps.py +0 -0
  129. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/diagnose.py +0 -0
  130. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/dispatch.py +0 -0
  131. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/dist_name.py +0 -0
  132. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/drive.py +0 -0
  133. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/drive_queue.py +0 -0
  134. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/drive_state.py +0 -0
  135. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/events.py +0 -0
  136. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/failure_class.py +0 -0
  137. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/filelock.py +0 -0
  138. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/fleet_config_health.py +0 -0
  139. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/forge_availability.py +0 -0
  140. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/freshness.py +0 -0
  141. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/gate_a.py +0 -0
  142. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/gate_b.py +0 -0
  143. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/gate_snapshot.py +0 -0
  144. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/gates.py +0 -0
  145. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/github_ops.py +0 -0
  146. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/goal.py +0 -0
  147. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/graph_health.py +0 -0
  148. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/health/__init__.py +0 -0
  149. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/health/aggregate.py +0 -0
  150. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/health/checks/__init__.py +0 -0
  151. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/health/checks/agent_install.py +0 -0
  152. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/health/checks/cargo_targets.py +0 -0
  153. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/health/checks/claude_binary.py +0 -0
  154. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/health/checks/coord_web_ci_pin.py +0 -0
  155. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/health/checks/deploy_lane_facts.py +0 -0
  156. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/health/checks/disk.py +0 -0
  157. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/health/checks/fleet_board.py +0 -0
  158. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  159. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/health/checks/fleet_phantom.py +0 -0
  160. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/health/checks/fleet_unit_drift.py +0 -0
  161. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/health/checks/graph.py +0 -0
  162. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/health/checks/graphify_cli.py +0 -0
  163. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/health/checks/index_lock.py +0 -0
  164. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/health/checks/plan_usage.py +0 -0
  165. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/health/checks/repo_state.py +0 -0
  166. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/health/checks/spawned_coord.py +0 -0
  167. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/health/checks/timer_active.py +0 -0
  168. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/health/checks/toolchain.py +0 -0
  169. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/health/checks/unit_drift.py +0 -0
  170. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/health/checks/unit_enablement.py +0 -0
  171. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/health/checks/worktrees.py +0 -0
  172. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/health/cli.py +0 -0
  173. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/health/context.py +0 -0
  174. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/health/fleet_snapshot.py +0 -0
  175. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/health/models.py +0 -0
  176. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/health/pypi.py +0 -0
  177. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/health/registry.py +0 -0
  178. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/health/render.py +0 -0
  179. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/health/units.py +0 -0
  180. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/hooks.py +0 -0
  181. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/housekeeping.py +0 -0
  182. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/interactive.py +0 -0
  183. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/issue_store.py +0 -0
  184. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/liveness_auditor.py +0 -0
  185. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/machine_pause.py +0 -0
  186. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/merge_queue.py +0 -0
  187. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/milestone_chat.py +0 -0
  188. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/milestone_gate.py +0 -0
  189. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/milestone_order.py +0 -0
  190. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/mock_author.py +0 -0
  191. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/network.py +0 -0
  192. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/new_issue_chat.py +0 -0
  193. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/notifier/__init__.py +0 -0
  194. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/notifier/baseline.py +0 -0
  195. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/notifier/cli.py +0 -0
  196. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/notifier/collect.py +0 -0
  197. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/notifier/digest.py +0 -0
  198. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/notifier/models.py +0 -0
  199. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/notifier/predicate.py +0 -0
  200. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/notifier/service.py +0 -0
  201. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/notifier/store.py +0 -0
  202. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/notifier/transport.py +0 -0
  203. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/openapi.py +0 -0
  204. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/overlap_fence.py +0 -0
  205. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/overlap_predict.py +0 -0
  206. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/parentage.py +0 -0
  207. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/parentage_github.py +0 -0
  208. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/pipeline.py +0 -0
  209. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/plan_parser.py +0 -0
  210. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/plans.py +0 -0
  211. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/platform_paths.py +0 -0
  212. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/portal_bridge.py +0 -0
  213. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/portal_store.py +0 -0
  214. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/portal_sync.py +0 -0
  215. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/pr_body_lint.py +0 -0
  216. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/prereqs.py +0 -0
  217. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/progress.py +0 -0
  218. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/providers/__init__.py +0 -0
  219. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/providers/base.py +0 -0
  220. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/providers/claude.py +0 -0
  221. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/providers/claude_pty.py +0 -0
  222. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/providers/opencode.py +0 -0
  223. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/queue_diagnose.py +0 -0
  224. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/reconcile.py +0 -0
  225. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/reconcile_tick.py +0 -0
  226. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/refine_chat.py +0 -0
  227. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/release_cordon.py +0 -0
  228. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/release_propagate.py +0 -0
  229. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/release_verify.py +0 -0
  230. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/release_window.py +0 -0
  231. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/repo_edit.py +0 -0
  232. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/repo_onboard.py +0 -0
  233. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/reports.py +0 -0
  234. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/revalidate.py +0 -0
  235. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/review.py +0 -0
  236. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/scorecard.py +0 -0
  237. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/self_health.py +0 -0
  238. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/serve_app.py +0 -0
  239. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  240. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  241. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  242. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  243. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  244. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/skills/portal-followup/SKILL.md +0 -0
  245. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  246. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  247. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/skills/update-issue/SKILL.md +0 -0
  248. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/smoke.py +0 -0
  249. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/spend_ceiling.py +0 -0
  250. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/split_work.py +0 -0
  251. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/stage_projection.py +0 -0
  252. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/state.py +0 -0
  253. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/test_chat.py +0 -0
  254. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/test_orchestrator.py +0 -0
  255. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/test_report.py +0 -0
  256. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/tui_release.py +0 -0
  257. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/usage.py +0 -0
  258. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/usage_limits.py +0 -0
  259. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/usage_rollup.py +0 -0
  260. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coord/worker_events.py +0 -0
  261. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/coordinator.example.yml +0 -0
  262. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/deploy/coord-agent.service +0 -0
  263. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/deploy/coord-db-backup.service +0 -0
  264. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/deploy/coord-db-backup.sh +0 -0
  265. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/deploy/coord-db-backup.timer +0 -0
  266. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/deploy/coord-drive-queue.service +0 -0
  267. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/deploy/coord-drive-queue.timer +0 -0
  268. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/deploy/coord-notify.service +0 -0
  269. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/deploy/coord-notify.timer +0 -0
  270. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/deploy/coord-release-propagate.service +0 -0
  271. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/deploy/coord-release-propagate.timer +0 -0
  272. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/deploy/coord-release-window.service +0 -0
  273. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/deploy/coord-release-window.timer +0 -0
  274. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/deploy/coord-serve.service +0 -0
  275. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/deploy/coord-web-dist-build.service +0 -0
  276. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/deploy/coord-web-dist-build.sh +0 -0
  277. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/deploy/coord-web-dist-build.timer +0 -0
  278. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/deploy/coord-web-rollback.sh +0 -0
  279. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/deploy/coord-web.service +0 -0
  280. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/deploy/node-shim.sh +0 -0
  281. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  282. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/docs/ADR_COORD_WEB_CI.md +0 -0
  283. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/docs/ADR_COORD_WEB_DIST.md +0 -0
  284. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/docs/AGENT_OPERATIONS.md +0 -0
  285. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/docs/ARCHITECTURE.md +0 -0
  286. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/docs/ARCH_SECURITY_GATES.md +0 -0
  287. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/docs/COCKPIT.md +0 -0
  288. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/docs/CONTROL_CENTER.md +0 -0
  289. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/docs/COST_DISCIPLINE.md +0 -0
  290. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/docs/CROSS_PLATFORM.md +0 -0
  291. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/docs/CUSTOMER_PORTAL.md +0 -0
  292. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/docs/DRIVE_QUEUE.md +0 -0
  293. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/docs/EPHEMERAL_WORKERS.md +0 -0
  294. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/docs/FORGE_MIGRATION.md +0 -0
  295. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/docs/GRAPHIFY_SETUP.md +0 -0
  296. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/docs/ISSUE_GUIDANCE.md +0 -0
  297. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/docs/MAC_MINI.md +0 -0
  298. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  299. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/docs/NOTIFIER.md +0 -0
  300. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/docs/OPENCODE_VERIFICATION.md +0 -0
  301. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/docs/OPERATING_GOTCHAS.md +0 -0
  302. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/docs/ORACLE_LOOP.md +0 -0
  303. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/docs/PHONE_WEBAPP.md +0 -0
  304. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/docs/PIPELINE_V2.md +0 -0
  305. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/docs/PLATFORM_EVOLUTION.md +0 -0
  306. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/docs/SECOND_BACKEND.md +0 -0
  307. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/docs/STORE_SERVICE.md +0 -0
  308. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  309. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/docs/WEB_CONTROL_CENTER.md +0 -0
  310. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/docs/WSL_WINDOWS_WORKER.md +0 -0
  311. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/docs/mocks/web/README.md +0 -0
  312. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/docs/mocks/web/_tokens.css +0 -0
  313. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/docs/mocks/web/issue-detail.html +0 -0
  314. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/docs/mocks/web/pipeline-narrow.html +0 -0
  315. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/docs/mocks/web/pipeline-wide.html +0 -0
  316. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/graphify-out/.gitignore +0 -0
  317. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/install-agent.sh +0 -0
  318. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/pyproject.toml +0 -0
  319. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/scripts/audit_review_verdict_overrides.py +0 -0
  320. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  321. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/scripts/azure-workers/build-worker-image.sh +0 -0
  322. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/scripts/azure-workers/coordinator-machine.py +0 -0
  323. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/scripts/azure-workers/epic-down.sh +0 -0
  324. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/scripts/azure-workers/epic-up.sh +0 -0
  325. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/scripts/azure-workers/preflight.sh +0 -0
  326. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/scripts/azure-workers/provision-worker.sh +0 -0
  327. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  328. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  329. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/scripts/azure-workers/verify-github-token.sh +0 -0
  330. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/scripts/check_gh_argv_containment.py +0 -0
  331. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/scripts/codegen.py +0 -0
  332. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/scripts/coord-test-runner.sh +0 -0
  333. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/scripts/drive-batch.sh +0 -0
  334. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/scripts/gen_board_fixture.py +0 -0
  335. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/scripts/gen_mock_index.py +0 -0
  336. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/scripts/next_release_tag.py +0 -0
  337. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/scripts/run_tests_in_populated_home.sh +0 -0
  338. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/scripts/run_tests_without_gh.sh +0 -0
  339. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/scripts/smoke_437_interactive.py +0 -0
  340. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/scripts/verify_878_review_capture.py +0 -0
  341. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/scripts/verify_release_published.py +0 -0
  342. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/scripts/verify_release_wheel.py +0 -0
  343. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/setup.cfg +0 -0
  344. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/SMOKE_SET.md +0 -0
  345. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/__init__.py +0 -0
  346. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  347. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/acceptance/ms-33/contract.md +0 -0
  348. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/acceptance/ms-33/manifest.yml +0 -0
  349. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  350. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  351. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  352. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  353. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/acceptance/ms-37/conftest.py +0 -0
  354. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/acceptance/ms-37/contract.md +0 -0
  355. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/acceptance/ms-37/manifest.yml +0 -0
  356. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  357. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  358. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/acceptance/ms-38/contract.md +0 -0
  359. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/acceptance/ms-38/manifest.yml +0 -0
  360. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  361. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  362. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  363. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  364. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  365. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  366. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  367. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  368. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  369. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  370. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/acceptance/ms-51/contract.md +0 -0
  371. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  372. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  373. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/acceptance/ms-51/manifest.yml +0 -0
  374. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  375. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/acceptance/ms-51/tsconfig.json +0 -0
  376. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/acceptance/ms-65/board_split_2288.rs +0 -0
  377. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
  378. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
  379. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/acceptance/ms-65/contract.md +0 -0
  380. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
  381. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/acceptance/ms-65/manifest.yml +0 -0
  382. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
  383. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
  384. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
  385. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
  386. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
  387. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
  388. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
  389. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
  390. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
  391. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
  392. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/acceptance/ms-65/tabs_persistence_2286.rs +0 -0
  393. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/acceptance/ms-67/approved_items_2532.rs +0 -0
  394. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/acceptance/ms-67/contract.md +0 -0
  395. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/acceptance/ms-67/manifest.yml +0 -0
  396. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/acceptance/ms-67/mocks/approved-items-chat-opened.screen +0 -0
  397. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/acceptance/ms-67/mocks/approved-items-context-menu.screen +0 -0
  398. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/acceptance/ms-67/mocks/approved-items-detail.screen +0 -0
  399. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/acceptance/ms-67/mocks/approved-items-empty.screen +0 -0
  400. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/acceptance/ms-67/mocks/approved-items-populated.screen +0 -0
  401. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  402. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/conftest.py +0 -0
  403. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/fixtures/board-pipeline-basic.json +0 -0
  404. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  405. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  406. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  407. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  408. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/fixtures/playwright/all_pass.json +0 -0
  409. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  410. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/fixtures/playwright/mixed_fail.json +0 -0
  411. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  412. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  413. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/fixtures/playwright/skip.json +0 -0
  414. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/fixtures/playwright/truncated.json +0 -0
  415. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  416. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  417. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  418. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  419. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  420. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  421. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  422. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  423. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_acceptance_drivers.py +0 -0
  424. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_agent.py +0 -0
  425. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_agent_api_error.py +0 -0
  426. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_agent_app.py +0 -0
  427. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_agent_branch_base.py +0 -0
  428. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_agent_branch_capture.py +0 -0
  429. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_agent_config_free_1712.py +0 -0
  430. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_agent_deploy_units_endpoint.py +0 -0
  431. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_agent_dirty_worktree.py +0 -0
  432. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  433. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_agent_graph_self_heal.py +0 -0
  434. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_agent_health_h3.py +0 -0
  435. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_agent_idle_restart.py +0 -0
  436. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_agent_push_failure.py +0 -0
  437. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_agent_reap.py +0 -0
  438. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_agent_repos_and_pull.py +0 -0
  439. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_agent_restart_services_endpoint.py +0 -0
  440. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_agent_skills_self_heal.py +0 -0
  441. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_agent_startup_diagnostics.py +0 -0
  442. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_agent_update.py +0 -0
  443. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_agent_update_bluegreen.py +0 -0
  444. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_agent_usage_limit.py +0 -0
  445. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_agent_zero_commit.py +0 -0
  446. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_ambient_home_isolation.py +0 -0
  447. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_approve_reject_plan.py +0 -0
  448. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_approve_usage_gate.py +0 -0
  449. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_approved_work_2532.py +0 -0
  450. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_assignment_already_recorded_daemon.py +0 -0
  451. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_audit_log.py +0 -0
  452. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_audit_outcome.py +0 -0
  453. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_audit_query.py +0 -0
  454. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_auto_loop.py +0 -0
  455. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_auto_release_publish_2035.py +0 -0
  456. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_base_checkout_restore.py +0 -0
  457. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_block_log.py +0 -0
  458. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_board_cap_762.py +0 -0
  459. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_board_fixture.py +0 -0
  460. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_board_read_path.py +0 -0
  461. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_board_service.py +0 -0
  462. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_board_state.py +0 -0
  463. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_board_wire.py +0 -0
  464. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_brain.py +0 -0
  465. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_branch_model.py +0 -0
  466. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_bug_intake.py +0 -0
  467. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_build_worker_image_env_update.py +0 -0
  468. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_cargo_cache.py +0 -0
  469. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_check_gh_argv_containment.py +0 -0
  470. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_ci_acceptance_gate_1950.py +0 -0
  471. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_ci_fix.py +0 -0
  472. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_ci_gitlab.py +0 -0
  473. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_ci_parity_2091.py +0 -0
  474. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_ci_store.py +0 -0
  475. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_claim.py +0 -0
  476. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_cli_acceptance.py +0 -0
  477. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_cli_assign.py +0 -0
  478. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  479. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_cli_assign_interactive_remote.py +0 -0
  480. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_cli_assign_provider.py +0 -0
  481. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  482. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_cli_audit.py +0 -0
  483. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_cli_chat_continue.py +0 -0
  484. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_cli_decide.py +0 -0
  485. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_cli_diagnose_config_provenance.py +0 -0
  486. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_cli_diagnose_forge_availability.py +0 -0
  487. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_cli_diagnose_graph.py +0 -0
  488. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_cli_diagnose_self.py +0 -0
  489. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_cli_doctor.py +0 -0
  490. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_cli_doctor_config_free_1801.py +0 -0
  491. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  492. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_cli_drive.py +0 -0
  493. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_cli_drive_queue.py +0 -0
  494. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_cli_escalate.py +0 -0
  495. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_cli_fix_headless_review.py +0 -0
  496. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_cli_gate_a.py +0 -0
  497. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_cli_install_drift.py +0 -0
  498. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_cli_install_skills.py +0 -0
  499. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_cli_issue_create_label.py +0 -0
  500. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_cli_issue_reopen.py +0 -0
  501. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_cli_merge.py +0 -0
  502. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_cli_milestone_assign.py +0 -0
  503. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_cli_milestone_capture.py +0 -0
  504. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_cli_milestone_chat_add_child.py +0 -0
  505. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_cli_milestone_dispatch.py +0 -0
  506. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_cli_milestone_gate_b.py +0 -0
  507. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_cli_milestone_gate_c.py +0 -0
  508. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_cli_milestone_order.py +0 -0
  509. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  510. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_cli_milestone_ship.py +0 -0
  511. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_cli_network.py +0 -0
  512. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_cli_new_issue_chat.py +0 -0
  513. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_cli_plans.py +0 -0
  514. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_cli_portal.py +0 -0
  515. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_cli_pull_artifact.py +0 -0
  516. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_cli_queue.py +0 -0
  517. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_cli_reattach_sessions.py +0 -0
  518. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_cli_refine_board.py +0 -0
  519. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_cli_release_preflight.py +0 -0
  520. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_cli_release_propagate.py +0 -0
  521. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_cli_release_window.py +0 -0
  522. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_cli_repo_2220.py +0 -0
  523. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_cli_scorecard.py +0 -0
  524. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_cli_set_review_findings.py +0 -0
  525. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_cli_status_advisory_terminal.py +0 -0
  526. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_cli_status_merge_queue.py +0 -0
  527. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_cli_status_provider.py +0 -0
  528. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_cli_status_review_finalizing.py +0 -0
  529. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_cli_status_test_failed_tag.py +0 -0
  530. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_cli_status_usage_limit.py +0 -0
  531. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_cli_sync_comments_873.py +0 -0
  532. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_cli_test_plan.py +0 -0
  533. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_cli_track.py +0 -0
  534. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_cli_tui_update.py +0 -0
  535. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_cli_wait.py +0 -0
  536. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_client_base_install.py +0 -0
  537. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_comments.py +0 -0
  538. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_completion_summary.py +0 -0
  539. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_config.py +0 -0
  540. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_config_acceptance.py +0 -0
  541. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_config_audit.py +0 -0
  542. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_config_pricing.py +0 -0
  543. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  544. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_config_usage_gate.py +0 -0
  545. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_confirm_test.py +0 -0
  546. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_conflict_fix_semantic.py +0 -0
  547. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_coord_test.py +0 -0
  548. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_coord_test_runner_baseline.py +0 -0
  549. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_coord_test_runner_populated_home.py +0 -0
  550. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_coord_test_runner_routing.py +0 -0
  551. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_coord_test_runner_toolchain.py +0 -0
  552. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_coord_web_sse_restart_live.py +0 -0
  553. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_coordinator_machine.py +0 -0
  554. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_cross_platform_imports.py +0 -0
  555. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_dashboard.py +0 -0
  556. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_dashboard_fixture.py +0 -0
  557. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_dashboard_terminal.py +0 -0
  558. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_dashboard_terminal_live.py +0 -0
  559. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_db.py +0 -0
  560. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_dead_end.py +0 -0
  561. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_deploy_coord_db_backup.py +0 -0
  562. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_deploy_coord_web_dist.py +0 -0
  563. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_deploy_coord_web_rollback.py +0 -0
  564. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_deploy_drive_queue_unit.py +0 -0
  565. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_deploy_manifest.py +0 -0
  566. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_deploy_notify_unit.py +0 -0
  567. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_deploy_units_lane.py +0 -0
  568. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_deploy_web_unit.py +0 -0
  569. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_deps.py +0 -0
  570. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_diagnose.py +0 -0
  571. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_dispatch.py +0 -0
  572. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_dispatch_target_validation.py +0 -0
  573. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_dist_name.py +0 -0
  574. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_done_housekeeping.py +0 -0
  575. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_drive.py +0 -0
  576. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_drive_queue.py +0 -0
  577. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_drive_state.py +0 -0
  578. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_drive_tmux.py +0 -0
  579. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_epic_up_capability_detection.py +0 -0
  580. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  581. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_epic_up_image_provenance.py +0 -0
  582. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_errors.py +0 -0
  583. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_events.py +0 -0
  584. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_failure_class.py +0 -0
  585. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_filelock.py +0 -0
  586. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  587. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_fix_of_force_override.py +0 -0
  588. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_fleet_config_health.py +0 -0
  589. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_fleet_health_probes.py +0 -0
  590. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_fleet_health_snapshot.py +0 -0
  591. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_forge_availability.py +0 -0
  592. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_freshness.py +0 -0
  593. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_gate_a.py +0 -0
  594. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_gate_b.py +0 -0
  595. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_gate_snapshot_staleness.py +0 -0
  596. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_gates.py +0 -0
  597. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  598. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_gen_mock_index.py +0 -0
  599. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_generated_types_fixture.py +0 -0
  600. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_github_ops.py +0 -0
  601. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_goal.py +0 -0
  602. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_graph_health.py +0 -0
  603. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_graph_selfheal_absent_2237.py +0 -0
  604. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_handoff.py +0 -0
  605. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_health_checks.py +0 -0
  606. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_health_cli.py +0 -0
  607. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_health_cli_graph.py +0 -0
  608. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_health_config.py +0 -0
  609. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_health_context.py +0 -0
  610. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_health_coord_web_ci_pin.py +0 -0
  611. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_health_deploy_lane_facts.py +0 -0
  612. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_health_incident_regression.py +0 -0
  613. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_health_pypi.py +0 -0
  614. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_health_registry.py +0 -0
  615. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_health_timer_active.py +0 -0
  616. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_health_toolchain.py +0 -0
  617. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_health_unit_drift.py +0 -0
  618. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_health_unit_enablement.py +0 -0
  619. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_hooks.py +0 -0
  620. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_human_attended_437.py +0 -0
  621. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_init.py +0 -0
  622. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_integration.py +0 -0
  623. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_interactive_briefing_echo.py +0 -0
  624. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_interactive_pane_log_2541.py +0 -0
  625. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_interactive_prefill_state.py +0 -0
  626. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_interactive_session_relaunch.py +0 -0
  627. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_interactive_test_verdict_backstop.py +0 -0
  628. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_interactive_token_attribution.py +0 -0
  629. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_interactive_worktree.py +0 -0
  630. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_issue_store_seam.py +0 -0
  631. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_liveness_auditor.py +0 -0
  632. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_liveness_notify.py +0 -0
  633. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_machine_pause.py +0 -0
  634. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_merge_queue.py +0 -0
  635. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_merge_verify.py +0 -0
  636. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_milestone_chat.py +0 -0
  637. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_milestone_gate.py +0 -0
  638. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_milestone_order.py +0 -0
  639. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_milestone_seam.py +0 -0
  640. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_mock_author.py +0 -0
  641. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_model_tiering.py +0 -0
  642. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_models.py +0 -0
  643. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_models_config_labels.py +0 -0
  644. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_needs_attention.py +0 -0
  645. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_network.py +0 -0
  646. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_new_issue_chat.py +0 -0
  647. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_next_release_tag.py +0 -0
  648. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_node_shim.py +0 -0
  649. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_notifier_baseline.py +0 -0
  650. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_notifier_cli.py +0 -0
  651. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_notifier_collect.py +0 -0
  652. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_notifier_config.py +0 -0
  653. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_notifier_drive_seam.py +0 -0
  654. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_notifier_isolation.py +0 -0
  655. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_notifier_predicate.py +0 -0
  656. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_notifier_quiet_hours.py +0 -0
  657. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_notifier_service.py +0 -0
  658. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_notify.py +0 -0
  659. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_notify_drain.py +0 -0
  660. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_openapi.py +0 -0
  661. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_operational_defaults.py +0 -0
  662. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_overlap_fence.py +0 -0
  663. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_overlap_predict.py +0 -0
  664. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_packaged_deploy_units.py +0 -0
  665. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_parentage.py +0 -0
  666. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_paste_landed.py +0 -0
  667. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_pipeline.py +0 -0
  668. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_plan_followup_approve_plan_command.py +0 -0
  669. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_plan_followup_pr_command.py +0 -0
  670. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_plan_followup_review_command.py +0 -0
  671. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_plan_only.py +0 -0
  672. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_plan_parser.py +0 -0
  673. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_platform_paths.py +0 -0
  674. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_portal_bridge.py +0 -0
  675. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_portal_config.py +0 -0
  676. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_portal_store.py +0 -0
  677. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_portal_sync.py +0 -0
  678. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_pr_body_lint.py +0 -0
  679. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_prereqs.py +0 -0
  680. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_production_db_guard.py +0 -0
  681. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_progress.py +0 -0
  682. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_provider_seam.py +0 -0
  683. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_providers.py +0 -0
  684. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_providers_config_labels.py +0 -0
  685. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_providers_pty.py +0 -0
  686. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_quiet_hours.py +0 -0
  687. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_quiet_hours_store_2146.py +0 -0
  688. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_reap_merged_sessions.py +0 -0
  689. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_reap_stale_interactive_tick.py +0 -0
  690. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_reconcile.py +0 -0
  691. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_reconcile_branch.py +0 -0
  692. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_reconcile_completions.py +0 -0
  693. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_reconcile_merges.py +0 -0
  694. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_reconcile_no_agent_record.py +0 -0
  695. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_reconcile_tick.py +0 -0
  696. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_reconcile_usage_limit_done.py +0 -0
  697. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_refine_chat.py +0 -0
  698. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_release_cordon_2101.py +0 -0
  699. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  700. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_release_cordon_deadlock_2240.py +0 -0
  701. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_release_cordon_stuck_2490.py +0 -0
  702. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_release_propagate.py +0 -0
  703. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_release_unified_1242.py +0 -0
  704. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_release_verify.py +0 -0
  705. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_release_window.py +0 -0
  706. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_remote_auto_prune.py +0 -0
  707. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_remote_interactive_reaper.py +0 -0
  708. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_repo_edit_2220.py +0 -0
  709. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_repo_graph_fleet_2237.py +0 -0
  710. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_repo_onboard_2220.py +0 -0
  711. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_report_result_push.py +0 -0
  712. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_reports.py +0 -0
  713. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_retry.py +0 -0
  714. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_retry_advisory_1606.py +0 -0
  715. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_retry_type_1636.py +0 -0
  716. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_revalidate.py +0 -0
  717. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_review.py +0 -0
  718. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_review_end_review_without_verdict.py +0 -0
  719. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_review_parse_failure_diagnostic.py +0 -0
  720. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_review_reaffirm.py +0 -0
  721. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_review_state.py +0 -0
  722. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_review_verdict_backstop.py +0 -0
  723. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_review_verdict_override_audit.py +0 -0
  724. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_review_verdict_relay.py +0 -0
  725. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_review_zero_commits.py +0 -0
  726. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_scoped_review_wiring.py +0 -0
  727. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_scorecard.py +0 -0
  728. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_self_health.py +0 -0
  729. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_serve.py +0 -0
  730. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_serve_app_board_trim.py +0 -0
  731. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_session.py +0 -0
  732. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_slice_issue_attribution.py +0 -0
  733. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_smoke.py +0 -0
  734. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_smoke_live_checkout_restore.py +0 -0
  735. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_smoke_workflow.py +0 -0
  736. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_spend_ceiling.py +0 -0
  737. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_spend_ceiling_coordinator.py +0 -0
  738. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_split.py +0 -0
  739. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_split_work.py +0 -0
  740. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_stage_projection.py +0 -0
  741. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_stalled_pipeline.py +0 -0
  742. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_state.py +0 -0
  743. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_state_review_findings_daemon.py +0 -0
  744. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_status_fleet_footer.py +0 -0
  745. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_stop_1567.py +0 -0
  746. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_stuck.py +0 -0
  747. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_terminal_command.py +0 -0
  748. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_test_chat.py +0 -0
  749. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_test_orchestrator.py +0 -0
  750. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_test_report.py +0 -0
  751. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_test_verdict_parsing.py +0 -0
  752. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_test_verdict_transcript_floor.py +0 -0
  753. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_thin_client_board_audit.py +0 -0
  754. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_thin_client_config_load_1080.py +0 -0
  755. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_thin_client_daemon_routing_906.py +0 -0
  756. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_tmux_host.py +0 -0
  757. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_tmux_session.py +0 -0
  758. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_transcript_floor.py +0 -0
  759. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_usage.py +0 -0
  760. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_usage_limits.py +0 -0
  761. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_usage_rollup.py +0 -0
  762. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_venv_live_install_2121.py +0 -0
  763. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_version_single_source.py +0 -0
  764. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_watch.py +0 -0
  765. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  766. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_worker_events.py +0 -0
  767. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_worker_image_pin_sync.py +0 -0
  768. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_worker_safety.py +0 -0
  769. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_worker_test_scoping.py +0 -0
  770. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_worktree.py +0 -0
  771. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  772. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tui/Cargo.lock +0 -0
  773. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tui/Cargo.toml +0 -0
  774. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tui/cargo-config-local-quadraui.toml.example +0 -0
  775. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tui/src/app/approved.rs +0 -0
  776. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tui/src/app/audit.rs +0 -0
  777. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tui/src/app/chat.rs +0 -0
  778. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tui/src/app/data.rs +0 -0
  779. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tui/src/app/dialogs.rs +0 -0
  780. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tui/src/app/doc_tabs.rs +0 -0
  781. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tui/src/app/drive.rs +0 -0
  782. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tui/src/app/drive_queue.rs +0 -0
  783. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tui/src/app/escalation.rs +0 -0
  784. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tui/src/app/events.rs +0 -0
  785. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tui/src/app/fixtures.rs +0 -0
  786. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tui/src/app/fleet_health.rs +0 -0
  787. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tui/src/app/fleet_sessions.rs +0 -0
  788. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tui/src/app/fleet_terminals.rs +0 -0
  789. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tui/src/app/format.rs +0 -0
  790. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tui/src/app/milestone_dag.rs +0 -0
  791. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tui/src/app/mod.rs +0 -0
  792. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tui/src/app/msv.rs +0 -0
  793. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tui/src/app/pipeline.rs +0 -0
  794. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tui/src/app/plans.rs +0 -0
  795. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tui/src/app/render.rs +0 -0
  796. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tui/src/app/reports.rs +0 -0
  797. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tui/src/app/sessions.rs +0 -0
  798. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tui/src/app/settings_ui.rs +0 -0
  799. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tui/src/app/sidebar.rs +0 -0
  800. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tui/src/app/terminal.rs +0 -0
  801. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tui/src/app/tests.rs +0 -0
  802. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tui/src/app/types.rs +0 -0
  803. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tui/src/app/workspace.rs +0 -0
  804. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tui/src/bin/gtk.rs +0 -0
  805. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tui/src/commands.rs +0 -0
  806. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tui/src/lib.rs +0 -0
  807. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tui/src/main.rs +0 -0
  808. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tui/src/settings.rs +0 -0
  809. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tui/tests/acceptance.rs +0 -0
  810. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/tui/tests/cli.rs +0 -0
  811. {code_coordinator-0.5.231 → code_coordinator-0.5.232}/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.231
3
+ Version: 0.5.232
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.231
3
+ Version: 0.5.232
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.231",
2
+ "tag": "0.5.232",
3
3
  "distance": 0,
4
- "node": "g9bcc6d2ee8084e339463aeb3572a47a58b9b1657",
4
+ "node": "geaf0ae75fe41add5924a913f93d8c3a955bb2c8c",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-22"
@@ -199,17 +199,80 @@ class ManifestError(Exception):
199
199
  """Raised when a manifest file exists but is malformed."""
200
200
 
201
201
 
202
- def _manifest_paths(acceptance_root: Path) -> list[Path]:
203
- """``ms-NN/manifest.(yml|yaml|json)`` paths under *acceptance_root*,
204
- sorted for deterministic scan order. ``[]`` when the dir doesn't exist."""
205
- if not acceptance_root.exists():
202
+ # #2543: per-issue manifest fragments. Before this, every JIT test-author
203
+ # slice appended its own `issues:`/`expected_red:` block to ONE shared
204
+ # `ms-NN/manifest.yml` (`coord.test_author`'s "Later slices MERGE into this
205
+ # file" convention) — two slices authored concurrently, or one authored
206
+ # against a base that predates a sibling's already-merged slice, collide on
207
+ # that single file even though their actual content never overlaps (each
208
+ # writes a distinct, differently-keyed block). See coord-portal#122/#128/#132.
209
+ #
210
+ # The fix: each issue's `issues:`/`expected_red:` entries live in their OWN
211
+ # file, `ms-NN/manifest.d/<issue>.(yml|yaml|json)` — two slices writing two
212
+ # different files can never textually conflict, no matter how they're
213
+ # scheduled. `manifest.yml` itself keeps carrying the MILESTONE-level blocks
214
+ # (`gate_a:`, `exempt:`) that are rare, hand-edited, and not part of the
215
+ # per-slice JIT-authoring hot path, so it stays a single shared file by
216
+ # choice, not oversight.
217
+ #
218
+ # Backward compatible by construction: every reader below still accepts a
219
+ # legacy single-file `ms-NN/manifest.(yml|json)` that ALSO carries
220
+ # `issues:`/`tests:`/`expected_red:` (this repo's own already-merged
221
+ # `tests/acceptance/ms-33/manifest.yml` and friends) — fragments and a
222
+ # legacy file under the same `ms-NN/` dir are simply merged together, same
223
+ # "later manifest wins on a bare collision" rule as across milestones. No
224
+ # migration script is needed: existing manifests keep working as-is, and new
225
+ # per-issue entries land in `manifest.d/` going forward.
226
+ MANIFEST_FRAGMENTS_DIRNAME = "manifest.d"
227
+
228
+
229
+ def _manifest_fragment_paths(ms_dir: Path) -> list[Path]:
230
+ """``<ms_dir>/manifest.d/*.(yml|yaml|json)`` fragment files, sorted for
231
+ deterministic scan order. ``[]`` when the fragments dir doesn't exist."""
232
+ frag_dir = ms_dir / MANIFEST_FRAGMENTS_DIRNAME
233
+ if not frag_dir.is_dir():
206
234
  return []
207
235
  return sorted(
208
- p for p in acceptance_root.glob("*/manifest.*")
209
- if p.suffix in (".yml", ".yaml", ".json")
236
+ p for p in frag_dir.iterdir()
237
+ if p.is_file() and p.suffix in (".yml", ".yaml", ".json")
210
238
  )
211
239
 
212
240
 
241
+ def _manifest_paths(acceptance_root: Path) -> list[Path]:
242
+ """Every manifest SOURCE path under *acceptance_root*, sorted for
243
+ deterministic scan order: per ``ms-NN``/``issue-NN`` directory, the
244
+ legacy single-file ``manifest.(yml|yaml|json)`` (if present) followed by
245
+ each ``manifest.d/<issue>.(yml|yaml|json)`` fragment (#2543). ``[]`` when
246
+ *acceptance_root* doesn't exist.
247
+
248
+ Callers that need to know which owning directory a given path came from
249
+ (a fragment's is its grandparent, not its parent) should go through
250
+ :func:`_ms_dir_for_manifest_path` rather than assuming ``path.parent``.
251
+ """
252
+ if not acceptance_root.exists():
253
+ return []
254
+ paths: list[Path] = []
255
+ for ms_dir in sorted(p for p in acceptance_root.iterdir() if p.is_dir()):
256
+ paths.extend(
257
+ sorted(
258
+ p for p in ms_dir.glob("manifest.*")
259
+ if p.suffix in (".yml", ".yaml", ".json")
260
+ )
261
+ )
262
+ paths.extend(_manifest_fragment_paths(ms_dir))
263
+ return paths
264
+
265
+
266
+ def _ms_dir_for_manifest_path(path: Path) -> Path:
267
+ """The owning ``ms-NN``/``issue-NN`` directory for a manifest source
268
+ *path* returned by :func:`_manifest_paths` — itself for a legacy
269
+ single-file manifest, or its grandparent for a
270
+ ``manifest.d/<issue>.(yml|json)`` fragment (#2543)."""
271
+ if path.parent.name == MANIFEST_FRAGMENTS_DIRNAME:
272
+ return path.parent.parent
273
+ return path.parent
274
+
275
+
213
276
  @dataclass(frozen=True)
214
277
  class ManifestData:
215
278
  """One manifest file's parsed contents: the test-id -> issue-number
@@ -329,6 +392,50 @@ def parse_manifest_text(text: str, *, source: str = "<manifest>") -> ManifestDat
329
392
  )
330
393
 
331
394
 
395
+ def merge_manifest_data(*datas: ManifestData) -> ManifestData:
396
+ """Merge multiple :class:`ManifestData` instances into one, as if their
397
+ source files had been scanned together (#2543) — same "later source
398
+ wins on a bare collision" rule :func:`load_manifest`/:func:`_manifest_paths`
399
+ already apply across files, just operating on already-parsed data
400
+ instead of paths. Shared by both the local-checkout readers (which
401
+ merge ``_manifest_paths``' legacy-file-then-fragments per ``ms-NN``) and
402
+ the API-only dispatch-time reader
403
+ (:func:`coord.milestone_dispatch._fetch_manifest_data`, which fetches
404
+ the legacy file and one issue's fragment separately over ``gh`` and
405
+ needs to combine them the same way).
406
+
407
+ ``tests``/``exempt``/``expected_red`` union across every *datas* entry
408
+ (a later entry's ``tests`` mapping overwrites an earlier one's on an
409
+ exact test-id collision; ``exempt``/``expected_red`` union rather than
410
+ overwrite since those are naturally per-issue-keyed sets, not a flat
411
+ mapping that can collide). ``gate_a_exempt``/``gate_a_exempt_reason``
412
+ are milestone-level, not per-issue, so they come from whichever entry
413
+ sets ``gate_a_exempt=True`` last — in practice always the legacy shared
414
+ file, since only that carries the ``gate_a:`` block (#2543 keeps it
415
+ there by choice; per-issue fragments never set it).
416
+ """
417
+ tests: dict[str, int] = {}
418
+ exempt: set[int] = set()
419
+ expected_red: dict[int, frozenset[str]] = {}
420
+ gate_a_exempt = False
421
+ gate_a_exempt_reason = ""
422
+ for data in datas:
423
+ tests.update(data.tests)
424
+ exempt |= set(data.exempt)
425
+ for issue_number, test_ids in data.expected_red.items():
426
+ expected_red[issue_number] = expected_red.get(issue_number, frozenset()) | test_ids
427
+ if data.gate_a_exempt:
428
+ gate_a_exempt = True
429
+ gate_a_exempt_reason = data.gate_a_exempt_reason or gate_a_exempt_reason
430
+ return ManifestData(
431
+ tests=tests,
432
+ exempt=frozenset(exempt),
433
+ gate_a_exempt=gate_a_exempt,
434
+ gate_a_exempt_reason=gate_a_exempt_reason,
435
+ expected_red=expected_red,
436
+ )
437
+
438
+
332
439
  def _parse_manifest_file(path: Path) -> dict[str, int]:
333
440
  """Parse one manifest file into ``{test_id: issue_number}`` (the
334
441
  ``exempt:`` list, if any, is dropped — callers that need it use
@@ -415,7 +522,7 @@ def load_expected_red(
415
522
  mapping: dict[str, int] = {}
416
523
  for path in _manifest_paths(acceptance_root):
417
524
  if driver_kind is not None:
418
- resolved = _driver_kind_for_manifest_dir(path.parent)
525
+ resolved = _driver_kind_for_manifest_dir(_ms_dir_for_manifest_path(path))
419
526
  if resolved is not None and resolved != driver_kind:
420
527
  continue
421
528
  try:
@@ -441,7 +548,7 @@ def ms_dir_for_issue(acceptance_root: Path, issue_number: int) -> str | None:
441
548
  for path in _manifest_paths(acceptance_root):
442
549
  mapping = _parse_manifest_file(path)
443
550
  if test_ids_for_issue(mapping, issue_number):
444
- return path.parent.name
551
+ return _ms_dir_for_manifest_path(path).name
445
552
  return None
446
553
 
447
554
 
@@ -873,16 +980,27 @@ def _default_github_ops():
873
980
  return github_ops
874
981
 
875
982
 
876
- def _fetch_ms_manifest_via_api(
877
- repo_github: str, branch: str, ms_dir: str, get_file: Callable[..., "tuple[str, str]"],
983
+ def _fetch_manifest_source_via_api(
984
+ repo_github: str,
985
+ branch: str,
986
+ dir_path: str,
987
+ filename_stem: str,
988
+ get_file: Callable[..., "tuple[str, str]"],
878
989
  ) -> "tuple[str, str, str, ManifestData] | None":
879
- """One ms-dir's ``manifest.(yml|yaml|json)`` via *get_file* (a
880
- ``get_repo_file_with_sha``-shaped callable), trying each extension in
881
- turn like :func:`_manifest_paths` does on local disk. Returns ``(path,
882
- text, blob_sha, data)`` for the first extension that exists and parses,
883
- or ``None`` if none does / the one that exists is malformed."""
990
+ """One manifest source file — ``<dir_path>/<filename_stem>.(yml|yaml|
991
+ json)`` — via *get_file* (a ``get_repo_file_with_sha``-shaped callable),
992
+ trying each extension in turn like :func:`_manifest_paths` does on local
993
+ disk. Returns ``(path, text, blob_sha, data)`` for the first extension
994
+ that exists and parses, or ``None`` if none does / the one that exists is
995
+ malformed.
996
+
997
+ Shared primitive (#2543) behind both the legacy single-file fetch
998
+ (:func:`_fetch_ms_manifest_via_api`, ``filename_stem="manifest"``) and a
999
+ per-issue fragment fetch (:func:`_fetch_ms_manifest_fragment_via_api`,
1000
+ ``filename_stem=str(issue_number)`` under ``<ms_dir>/manifest.d/``).
1001
+ """
884
1002
  for ext in (".yml", ".yaml", ".json"):
885
- path = f"{ACCEPTANCE_DIRNAME}/{ms_dir}/manifest{ext}"
1003
+ path = f"{dir_path}/{filename_stem}{ext}"
886
1004
  try:
887
1005
  text, blob_sha = get_file(repo_github, path, branch)
888
1006
  except Exception: # noqa: BLE001 — this extension doesn't exist, or a transient gh hiccup
@@ -895,13 +1013,52 @@ def _fetch_ms_manifest_via_api(
895
1013
  return None
896
1014
 
897
1015
 
1016
+ def _fetch_ms_manifest_via_api(
1017
+ repo_github: str, branch: str, ms_dir: str, get_file: Callable[..., "tuple[str, str]"],
1018
+ ) -> "tuple[str, str, str, ManifestData] | None":
1019
+ """One ms-dir's LEGACY single-file ``manifest.(yml|yaml|json)`` via
1020
+ *get_file* — see :func:`_fetch_manifest_source_via_api`. Since #2543,
1021
+ per-issue data more commonly lives in a ``manifest.d/<issue>.(yml|json)``
1022
+ fragment instead (:func:`_fetch_ms_manifest_fragment_via_api`); this
1023
+ still covers the milestone-level ``gate_a:``/``exempt:`` blocks (which
1024
+ stay in the single shared file by choice, #2543) and any not-yet-migrated
1025
+ milestone whose per-issue data is still all in one file."""
1026
+ return _fetch_manifest_source_via_api(
1027
+ repo_github, branch, f"{ACCEPTANCE_DIRNAME}/{ms_dir}", "manifest", get_file,
1028
+ )
1029
+
1030
+
1031
+ def _fetch_ms_manifest_fragment_via_api(
1032
+ repo_github: str,
1033
+ branch: str,
1034
+ ms_dir: str,
1035
+ issue_number: int,
1036
+ get_file: Callable[..., "tuple[str, str]"],
1037
+ ) -> "tuple[str, str, str, ManifestData] | None":
1038
+ """*issue_number*'s own ``ms-NN/manifest.d/<issue_number>.(yml|yaml|
1039
+ json)`` fragment via *get_file* (#2543) — see
1040
+ :func:`_fetch_manifest_source_via_api`. A targeted fetch by exact,
1041
+ predictable filename, no directory listing required, since the caller
1042
+ already knows the issue number it's looking for."""
1043
+ return _fetch_manifest_source_via_api(
1044
+ repo_github,
1045
+ branch,
1046
+ f"{ACCEPTANCE_DIRNAME}/{ms_dir}/{MANIFEST_FRAGMENTS_DIRNAME}",
1047
+ str(issue_number),
1048
+ get_file,
1049
+ )
1050
+
1051
+
898
1052
  def find_ms_manifest_for_issue_via_api(
899
1053
  repo_github: str, branch: str, issue_number: int, *, gh_ops: Any = None,
900
1054
  ) -> "tuple[str, str, str, ManifestData] | None":
901
1055
  """API-only (no local checkout) equivalent of :func:`ms_dir_for_issue`:
902
- search every ``tests/acceptance/ms-*/manifest.(yml|yaml|json)`` on
903
- *branch* via the GitHub Contents API for the one whose ``tests``/
904
- ``issues``/``expected_red`` mapping covers *issue_number*.
1056
+ search every ``tests/acceptance/ms-*/`` on *branch* via the GitHub
1057
+ Contents API for the one whose ``tests``/``issues``/``expected_red``
1058
+ mapping covers *issue_number* — checking, per ms-dir, *issue_number*'s
1059
+ own ``manifest.d/<issue_number>.(yml|json)`` fragment (#2543) FIRST
1060
+ (a targeted, exact-filename fetch), then the legacy single-file
1061
+ ``manifest.(yml|yaml|json)``.
905
1062
 
906
1063
  Returns ``(path, text, blob_sha, data)`` for the first match (ms-dirs
907
1064
  scanned in sorted-name order for determinism), or ``None`` when nothing
@@ -923,6 +1080,15 @@ def find_ms_manifest_for_issue_via_api(
923
1080
  return None
924
1081
 
925
1082
  for name in sorted(subdirs):
1083
+ frag = _fetch_ms_manifest_fragment_via_api(
1084
+ repo_github, branch, name, issue_number, get_file,
1085
+ )
1086
+ if frag is not None:
1087
+ _path, _text, _blob_sha, data = frag
1088
+ if issue_number in data.expected_red or test_ids_for_issue(
1089
+ data.tests, issue_number
1090
+ ):
1091
+ return frag
926
1092
  found = _fetch_ms_manifest_via_api(repo_github, branch, name, get_file)
927
1093
  if found is None:
928
1094
  continue
@@ -1014,10 +1180,19 @@ def list_expected_red_via_api(
1014
1180
  with at least one expected_red entry are included. ``{}`` on any
1015
1181
  listing failure or when nothing is expected-red anywhere (best-effort,
1016
1182
  matches the rest of this module's read paths).
1183
+
1184
+ #2543: merges BOTH the legacy single-file ``manifest.(yml|json)`` and
1185
+ every ``manifest.d/<issue>.(yml|json)`` fragment for each ms-dir — a
1186
+ milestone whose per-issue data has moved to fragments must not go dark
1187
+ here just because ``list_repo_dir`` (needed to enumerate the fragments
1188
+ dir) is unavailable on *gh_ops*: that case degrades to "legacy file
1189
+ only", same fail-open posture as everywhere else in this module, not to
1190
+ "nothing found."
1017
1191
  """
1018
1192
  ops = gh_ops or _default_github_ops()
1019
1193
  list_subdirs = getattr(ops, "list_repo_subdirs", None)
1020
1194
  get_file = getattr(ops, "get_repo_file_with_sha", None)
1195
+ list_dir = getattr(ops, "list_repo_dir", None)
1021
1196
  if list_subdirs is None or get_file is None:
1022
1197
  return {}
1023
1198
  try:
@@ -1027,12 +1202,37 @@ def list_expected_red_via_api(
1027
1202
 
1028
1203
  out: dict[str, dict[int, frozenset[str]]] = {}
1029
1204
  for name in sorted(subdirs):
1205
+ merged: dict[int, frozenset[str]] = {}
1206
+
1030
1207
  found = _fetch_ms_manifest_via_api(repo_github, branch, name, get_file)
1031
- if found is None:
1032
- continue
1033
- _path, _text, _blob_sha, data = found
1034
- if data.expected_red:
1035
- out[name] = dict(data.expected_red)
1208
+ if found is not None:
1209
+ _path, _text, _blob_sha, data = found
1210
+ for issue, ids in data.expected_red.items():
1211
+ merged[issue] = merged.get(issue, frozenset()) | ids
1212
+
1213
+ if list_dir is not None:
1214
+ frag_dir = f"{ACCEPTANCE_DIRNAME}/{name}/{MANIFEST_FRAGMENTS_DIRNAME}"
1215
+ try:
1216
+ filenames = list_dir(repo_github, frag_dir, branch)
1217
+ except Exception: # noqa: BLE001 — no fragments dir, or a transient hiccup
1218
+ filenames = []
1219
+ for filename in filenames:
1220
+ if Path(filename).suffix not in (".yml", ".yaml", ".json"):
1221
+ continue
1222
+ frag_path = f"{frag_dir}/{filename}"
1223
+ try:
1224
+ text, _sha = get_file(repo_github, frag_path, branch)
1225
+ except Exception: # noqa: BLE001
1226
+ continue
1227
+ try:
1228
+ frag_data = parse_manifest_text(text, source=frag_path)
1229
+ except ManifestError:
1230
+ continue
1231
+ for issue, ids in frag_data.expected_red.items():
1232
+ merged[issue] = merged.get(issue, frozenset()) | ids
1233
+
1234
+ if merged:
1235
+ out[name] = merged
1036
1236
  return out
1037
1237
 
1038
1238
 
@@ -1101,7 +1301,11 @@ def clear_expected_red_via_pr(
1101
1301
  except Exception as exc: # noqa: BLE001
1102
1302
  return f"warning: could not resolve {default_branch} tip: {exc}"
1103
1303
 
1104
- ms_dir = path.split("/")[-2] if "/" in path else "ms"
1304
+ # #2543: for a manifest.d/<issue>.yml fragment, path.parent is the
1305
+ # `manifest.d` directory itself, not the ms-NN dir — go through
1306
+ # _ms_dir_for_manifest_path so a fragment-clear derives the SAME
1307
+ # branch-name component a legacy-file clear would.
1308
+ ms_dir = _ms_dir_for_manifest_path(Path(path)).name if "/" in path else "ms"
1105
1309
  branch_name = f"coord/clear-expected-red-{issue_number}-{ms_dir}"
1106
1310
  # #944-style idempotency: a prior attempt may have already created this
1107
1311
  # branch (e.g. a partial failure on a previous merge-queue tick) — a
@@ -209,7 +209,8 @@ def _scoped_verdict(
209
209
  "--ci", "ci_mode", is_flag=True,
210
210
  help=(
211
211
  "#2164: the CI wrapper. Only valid with --all. Honours each "
212
- "ms-NN/manifest.yml's `expected_red:` registry a listed test-id "
212
+ "ms-NN/manifest.yml AND manifest.d/<issue>.yml fragment's (#2543) "
213
+ "`expected_red:` registry — a listed test-id "
213
214
  "that FAILS does not fail the run (a sealed slice is red by design "
214
215
  "before its fix exists); one that PASSES is a hard, loud failure "
215
216
  "(the vacuous-assertion case #1965 cares about). Point your repo's "
@@ -40,6 +40,7 @@ import uuid
40
40
 
41
41
  import httpx
42
42
 
43
+ from coord.acceptance import MANIFEST_FRAGMENTS_DIRNAME
43
44
  from coord.config import Config
44
45
  from coord.dispatch import AGENT_PORT
45
46
  from coord.merge_queue import QueuedMerge
@@ -245,10 +246,13 @@ date or conflicts with another slice.
245
246
  This repo's CLAUDE.md tells every ordinary worker to never touch \
246
247
  `tests/acceptance/**` — that rule keeps the acceptance oracle independent \
247
248
  of the workers it grades. It does NOT apply to you for this one narrow \
248
- purpose: resolving a merge conflict in a milestone's \
249
- `tests/acceptance/ms-NN/{SEALED_MANIFEST_FILENAME}`, the file every slice \
250
- under that milestone appends its own block to. You are explicitly \
251
- authorized to edit ONLY that file, and only additively.
249
+ purpose: resolving a merge conflict in a milestone's shared \
250
+ `tests/acceptance/ms-NN/{SEALED_MANIFEST_FILENAME}` and/or a per-issue \
251
+ `tests/acceptance/ms-NN/manifest.d/<issue>.(yml|json)` fragment (#2543 \
252
+ each issue's own manifest data lives in its own fragment file now, so a \
253
+ DIFFERENT-issue collision mostly can't happen any more; this path is for a \
254
+ legacy single-file milestone or a same-issue retry). You are explicitly \
255
+ authorized to edit ONLY those manifest file(s), and only additively.
252
256
 
253
257
  Rules:
254
258
  - The coordinator denies `gh` and `git push --force` for this worker. \
@@ -256,21 +260,22 @@ Don't try to use them — the harness will reject the call.
256
260
  - Stay on the worker's branch — do NOT push to main / develop / target.
257
261
  - Use git push --force-with-lease (NOT --force).
258
262
  - Rebase onto the target branch. If the ONLY conflict is inside a \
259
- `{SEALED_MANIFEST_FILENAME}` under `tests/acceptance/`, resolve it \
260
- ADDITIVELY: keep BOTH sides' issue blocks, without reordering or rewriting \
261
- any block that isn't yours. Never delete or rewrite another issue's block \
262
- — this mirrors the "one block per issue, later slices merge in" rule the \
263
- manifest files document in their own header comment.
263
+ `{SEALED_MANIFEST_FILENAME}` or a `manifest.d/<issue>.(yml|json)` fragment \
264
+ under `tests/acceptance/`, resolve it ADDITIVELY: keep BOTH sides' issue \
265
+ blocks, without reordering or rewriting any block that isn't yours. Never \
266
+ delete or rewrite another issue's block — this mirrors the "one block per \
267
+ issue, later slices merge in" rule the manifest files document in their \
268
+ own header comment.
264
269
  - Do NOT create, edit, or delete ANY OTHER file under `tests/acceptance/` \
265
270
  — not a test body, not `contract.md`, not a mock, not a fixture, not an \
266
271
  entry-point registration. Those stay sealed even for you.
267
- - If the conflict is NOT confined to a `{SEALED_MANIFEST_FILENAME}` it \
268
- also touches a test body or any other sealed file, OR the \
269
- `{SEALED_MANIFEST_FILENAME}` conflict itself is not a clean additive case \
270
- (e.g. the same issue's own block was edited two different ways) — DO NOT \
271
- GUESS and do NOT touch it. Exit non-zero with a STUCK: line that starts \
272
- with the exact marker `{SEALED_SCOPE_STUCK_MARKER}` and then names the \
273
- file(s) in conflict, e.g.
272
+ - If the conflict is NOT confined to a `{SEALED_MANIFEST_FILENAME}` or a \
273
+ `manifest.d/<issue>.(yml|json)` fragment — it also touches a test body or \
274
+ any other sealed file, OR the manifest conflict itself is not a clean \
275
+ additive case (e.g. the same issue's own block was edited two different \
276
+ ways) — DO NOT GUESS and do NOT touch it. Exit non-zero with a STUCK: line \
277
+ that starts with the exact marker `{SEALED_SCOPE_STUCK_MARKER}` and then \
278
+ names the file(s) in conflict, e.g.
274
279
  STUCK: {SEALED_SCOPE_STUCK_MARKER} tests/acceptance/ms-33/audit.rs:1-40 \
275
280
  — conflict is in a test body, not {SEALED_MANIFEST_FILENAME}
276
281
  The coordinator reads that marker and hands this off to a human — there is \
@@ -296,15 +301,17 @@ def build_sealed_manifest_conflict_briefing(
296
301
  :data:`coord.models.SEALED_PATH_AUTHOR_TYPES` branch (#2555).
297
302
 
298
303
  Unlike :func:`build_conflict_fix_briefing`, this worker IS authorized to
299
- edit one specific sealed file — the milestone's ``manifest.yml``
300
- because that is the one file every acceptance slice under a milestone
301
- appends an additive block to (see e.g.
302
- ``tests/acceptance/ms-33/manifest.yml``'s own header comment), so a
303
- two-slice collision there is a mechanical, written-down-rule merge, not
304
- a semantic one. Everything else under ``tests/acceptance/`` stays
305
- off-limits see :data:`SEALED_MANIFEST_CONFLICT_SYSTEM_PROMPT`'s
306
- "Rules" for the exact boundary and :data:`SEALED_SCOPE_STUCK_MARKER`,
307
- the marker the worker uses to escalate when the conflict crosses it.
304
+ edit the sealed manifest — the milestone's shared ``manifest.yml`` and/or
305
+ a per-issue ``manifest.d/<issue>.(yml|json)`` fragment (#2543) because
306
+ those are mechanical, written-down-rule merges (an issue's own block, or
307
+ a legacy milestone's additive block), not semantic ones. Since #2543 the
308
+ common two-DIFFERENT-slices collision this was built for mostly can't
309
+ happen any more (each issue writes its own fragment file), but a legacy
310
+ milestone or a same-issue retry can still land here. Everything else
311
+ under ``tests/acceptance/`` stays off-limits see
312
+ :data:`SEALED_MANIFEST_CONFLICT_SYSTEM_PROMPT`'s "Rules" for the exact
313
+ boundary and :data:`SEALED_SCOPE_STUCK_MARKER`, the marker the worker
314
+ uses to escalate when the conflict crosses it.
308
315
  """
309
316
  test_cmd = test_command or "echo '(no test command configured)'"
310
317
  lines: list[str] = [
@@ -316,8 +323,8 @@ def build_sealed_manifest_conflict_briefing(
316
323
  f"Issue: #{entry.issue_number} — {entry.issue_title}",
317
324
  f"Assignment type: `{entry.assignment_type}` — this branch's whole "
318
325
  "job was authoring under `tests/acceptance/`, so its conflict is "
319
- f"almost always another slice's additive edit to the same "
320
- f"milestone's `{SEALED_MANIFEST_FILENAME}`.",
326
+ f"almost always an additive edit to a `{SEALED_MANIFEST_FILENAME}` "
327
+ "or a `manifest.d/<issue>.(yml|json)` fragment (#2543).",
321
328
  "",
322
329
  "## Where you are",
323
330
  "",
@@ -334,7 +341,8 @@ def build_sealed_manifest_conflict_briefing(
334
341
  "1. `git fetch origin`",
335
342
  f"2. `git pull --rebase origin {entry.target_branch}`",
336
343
  f"3. If a conflict marker appears in a `{SEALED_MANIFEST_FILENAME}` "
337
- "under `tests/acceptance/`, resolve it by keeping BOTH sides' issue "
344
+ "or a `manifest.d/<issue>.(yml|json)` fragment under "
345
+ "`tests/acceptance/`, resolve it by keeping BOTH sides' issue "
338
346
  "blocks (additive — see the system prompt's rules). If a conflict "
339
347
  "marker appears ANYWHERE ELSE, stop — see \"When NOT to guess\" "
340
348
  "below.",
@@ -344,12 +352,13 @@ def build_sealed_manifest_conflict_briefing(
344
352
  "",
345
353
  "## When NOT to guess",
346
354
  "",
347
- f"You are authorized to edit ONLY a `{SEALED_MANIFEST_FILENAME}` "
348
- "under `tests/acceptance/`, and only additively. If the conflict "
355
+ f"You are authorized to edit ONLY a `{SEALED_MANIFEST_FILENAME}` or "
356
+ "a `manifest.d/<issue>.(yml|json)` fragment under "
357
+ "`tests/acceptance/`, and only additively. If the conflict "
349
358
  "touches a test body, `contract.md`, a mock, a fixture, an "
350
359
  "entry-point registration, or anything else sealed — or the "
351
- f"`{SEALED_MANIFEST_FILENAME}` conflict is not a clean additive "
352
- "case — DO NOT touch it. Exit non-zero with a `STUCK:` line "
360
+ "manifest conflict is not a clean additive case — DO NOT touch it. "
361
+ "Exit non-zero with a `STUCK:` line "
353
362
  f"starting with the exact marker `{SEALED_SCOPE_STUCK_MARKER}` and "
354
363
  "the file(s)/reason, e.g.",
355
364
  "",
@@ -379,9 +388,29 @@ def sealed_scope_verdict_in_text(text: str | None) -> bool:
379
388
 
380
389
 
381
390
  def _is_sealed_manifest_path(path: str) -> bool:
382
- """True when *path* is (any milestone's) ``manifest.yml`` the one file
383
- a sealed-author conflict-fix dispatch is authorized to touch."""
384
- return path.rsplit("/", 1)[-1] == SEALED_MANIFEST_FILENAME
391
+ """True when *path* is (any milestone's) shared ``manifest.yml`` OR a
392
+ per-issue ``manifest.d/<issue>.(yml|yaml|json)`` fragment (#2543) the
393
+ files a sealed-author conflict-fix dispatch is authorized to touch.
394
+
395
+ #2543 moves the routine per-issue `issues:`/`expected_red:` traffic out
396
+ of the single shared file into per-issue fragments (two different
397
+ fragment files can't textually conflict at all — the collision this
398
+ whole sealed-conflict-fix mechanism exists to resolve mostly stops
399
+ happening by construction going forward), but a fragment path is still
400
+ recognized here for completeness — a legacy single-file milestone, or a
401
+ same-issue retry that manages to conflict with itself, still resolves
402
+ the same additive way.
403
+ """
404
+ parts = path.split("/")
405
+ name = parts[-1]
406
+ if name == SEALED_MANIFEST_FILENAME:
407
+ return True
408
+ return (
409
+ len(parts) >= 2
410
+ and parts[-2] == MANIFEST_FRAGMENTS_DIRNAME
411
+ and name.rsplit(".", 1)[-1] in ("yml", "yaml", "json")
412
+ and "." in name
413
+ )
385
414
 
386
415
 
387
416
  def sealed_conflict_is_manifest_only(files: list[str]) -> bool:
@@ -259,30 +259,73 @@ def _default_fetch_repo_file(repo_github: str, path: str, branch: str) -> str |
259
259
 
260
260
 
261
261
  def _fetch_manifest_data(
262
- repo_github: str, milestone_number: int, branch: str, fetch: ManifestFetch,
262
+ repo_github: str,
263
+ milestone_number: int,
264
+ branch: str,
265
+ fetch: ManifestFetch,
266
+ *,
267
+ issue_number: int | None = None,
263
268
  ):
269
+ """*milestone_number*'s manifest data via *fetch* (a raw-content GitHub
270
+ fetch, no local checkout, no directory listing) — the legacy single-file
271
+ ``manifest.(yml|yaml|json)`` (milestone-level ``gate_a:``/``exempt:``
272
+ blocks live here by choice, #2543), merged with *issue_number*'s own
273
+ ``manifest.d/<issue_number>.(yml|yaml|json)`` fragment
274
+ (:data:`coord.acceptance.MANIFEST_FRAGMENTS_DIRNAME`) when *issue_number*
275
+ is given.
276
+
277
+ #2543 review: before this, only the legacy file was ever fetched here,
278
+ so an issue whose JIT slice was authored under the new per-issue-
279
+ fragment convention (``coord.test_author``'s briefing writes ONLY to
280
+ the fragment, never the shared file) would read back
281
+ ``test_ids_for_issue(...) == set()`` forever — the #1138 hard gate
282
+ (:func:`issue_oracle_ready`) would refuse Work dispatch with "no
283
+ acceptance slice yet" even after the slice landed, and
284
+ :func:`coord.drive.AcceptanceGateChecker.has_authored_slice` (which
285
+ reads the same ``OracleReadiness.has_slice``) would keep believing no
286
+ slice was ever authored, re-dispatching a redundant ``test-author``
287
+ session — precisely the concurrent-JIT-authoring collision #2543 exists
288
+ to prevent, triggered by the fix itself. Fetching + merging the
289
+ fragment closes that gap. Callers that only need the milestone-level
290
+ blocks (:func:`gate_a_signoff_status`, which has no single issue in
291
+ scope) pass no *issue_number* and get exactly the legacy-only reads
292
+ this always did.
293
+ """
264
294
  from coord.acceptance import ( # noqa: PLC0415
265
295
  ACCEPTANCE_DIRNAME,
296
+ MANIFEST_FRAGMENTS_DIRNAME,
266
297
  ManifestData,
267
298
  ManifestError,
299
+ merge_manifest_data,
268
300
  ms_dirname,
269
301
  parse_manifest_text,
270
302
  )
271
303
 
304
+ def _fetch_one(dir_path: str, filename_stem: str) -> "ManifestData":
305
+ for ext in (".yml", ".yaml", ".json"):
306
+ path = f"{dir_path}/{filename_stem}{ext}"
307
+ content = fetch(repo_github, path, branch)
308
+ if content is None:
309
+ continue
310
+ try:
311
+ return parse_manifest_text(content, source=path)
312
+ except ManifestError:
313
+ # Malformed manifest degrades to "no slice authored" rather
314
+ # than crashing dispatch — same fail-soft posture as
315
+ # oracle_loop_contract_block (#945).
316
+ return ManifestData()
317
+ return ManifestData()
318
+
272
319
  ms_dir = ms_dirname(milestone_number)
273
- for ext in (".yml", ".yaml", ".json"):
274
- path = f"{ACCEPTANCE_DIRNAME}/{ms_dir}/manifest{ext}"
275
- content = fetch(repo_github, path, branch)
276
- if content is None:
277
- continue
278
- try:
279
- return parse_manifest_text(content, source=path)
280
- except ManifestError:
281
- # Malformed manifest degrades to "no slice authored" rather
282
- # than crashing dispatch — same fail-soft posture as
283
- # oracle_loop_contract_block (#945).
284
- return ManifestData()
285
- return ManifestData()
320
+ legacy = _fetch_one(f"{ACCEPTANCE_DIRNAME}/{ms_dir}", "manifest")
321
+ if issue_number is None:
322
+ return legacy
323
+
324
+ fragment = _fetch_one(
325
+ f"{ACCEPTANCE_DIRNAME}/{ms_dir}/{MANIFEST_FRAGMENTS_DIRNAME}",
326
+ str(issue_number),
327
+ )
328
+ return merge_manifest_data(legacy, fragment)
286
329
 
287
330
 
288
331
  def _unsupported_driver_kinds(entry: "AcceptanceDriverConfig") -> tuple[str, ...]:
@@ -522,6 +565,7 @@ def issue_oracle_ready(
522
565
 
523
566
  manifest = _fetch_manifest_data(
524
567
  repo_cfg.github, milestone_number, repo_cfg.default_branch, fetch,
568
+ issue_number=issue_number,
525
569
  )
526
570
  has_slice = bool(test_ids_for_issue(manifest.tests, issue_number))
527
571
  exempt = issue_number in manifest.exempt or "oracle:exempt" in set(issue_labels)