code-coordinator 0.5.217__tar.gz → 0.5.218__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 (810) hide show
  1. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/code_coordinator.egg-info/SOURCES.txt +3 -0
  4. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/code_coordinator.egg-info/scm_file_list.json +3 -0
  5. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/code_coordinator.egg-info/scm_version.json +2 -2
  6. code_coordinator-0.5.218/coord/approved_work.py +157 -0
  7. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/config.py +106 -2
  8. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/deploy/coord-drive-queue.service +28 -0
  9. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/portal_store.py +28 -0
  10. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/serve_app.py +17 -0
  11. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/deploy/coord-drive-queue.service +28 -0
  12. code_coordinator-0.5.218/tests/test_approved_work_2532.py +395 -0
  13. code_coordinator-0.5.218/tests/test_deploy_drive_queue_unit.py +141 -0
  14. code_coordinator-0.5.218/tui/src/app/approved.rs +588 -0
  15. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/src/app/data.rs +11 -0
  16. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/src/app/events.rs +81 -0
  17. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/src/app/fixtures.rs +4 -0
  18. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/src/app/mod.rs +48 -0
  19. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/src/app/render.rs +14 -0
  20. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/src/app/sidebar.rs +6 -1
  21. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/src/app/types.rs +59 -0
  22. code_coordinator-0.5.217/tests/test_deploy_drive_queue_unit.py +0 -58
  23. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/.claude/commands/board.md +0 -0
  24. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/.claude/commands/complete-session.md +0 -0
  25. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/.claude/commands/coordinator.md +0 -0
  26. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/.githooks/_lib.sh +0 -0
  27. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/.githooks/post-checkout +0 -0
  28. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/.githooks/post-commit +0 -0
  29. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/.githooks/post-merge +0 -0
  30. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  31. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/.github/coord-ci-acceptance.yml +0 -0
  32. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/.github/workflows/auto-release.yml +0 -0
  33. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/.github/workflows/cargo-test.yml +0 -0
  34. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/.github/workflows/publish.yml +0 -0
  35. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/.github/workflows/release-tui.yml +0 -0
  36. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/.github/workflows/test.yml +0 -0
  37. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/.gitignore +0 -0
  38. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/CLAUDE.md +0 -0
  39. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/GOAL.md +0 -0
  40. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/LICENSE +0 -0
  41. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/MANIFEST.in +0 -0
  42. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/README.md +0 -0
  43. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/code_coordinator.egg-info/dependency_links.txt +0 -0
  44. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/code_coordinator.egg-info/entry_points.txt +0 -0
  45. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/code_coordinator.egg-info/requires.txt +0 -0
  46. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/code_coordinator.egg-info/top_level.txt +0 -0
  47. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/__init__.py +0 -0
  48. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/_board_mapping.py +0 -0
  49. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/acceptance.py +0 -0
  50. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/acceptance_drivers.py +0 -0
  51. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/agent.py +0 -0
  52. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/agent_app.py +0 -0
  53. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/agent_update.py +0 -0
  54. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/agents/opencode/.gitignore +0 -0
  55. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/agents/opencode/agents/work.md +0 -0
  56. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/agents/opencode/routing.jsonc +0 -0
  57. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/audit.py +0 -0
  58. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/auto_loop.py +0 -0
  59. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/block_log.py +0 -0
  60. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/board_bool_guard.py +0 -0
  61. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/board_service.py +0 -0
  62. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/board_wire.py +0 -0
  63. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/brain.py +0 -0
  64. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/branch_model.py +0 -0
  65. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/bug_intake.py +0 -0
  66. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/cargo_cache.py +0 -0
  67. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/ci_fix.py +0 -0
  68. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/ci_github.py +0 -0
  69. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/ci_gitlab.py +0 -0
  70. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/ci_store.py +0 -0
  71. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/claim.py +0 -0
  72. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/cli.py +0 -0
  73. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/client.py +0 -0
  74. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/commands/__init__.py +0 -0
  75. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/commands/_common.py +0 -0
  76. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/commands/acceptance.py +0 -0
  77. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/commands/agent_ops.py +0 -0
  78. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/commands/audit.py +0 -0
  79. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/commands/chat.py +0 -0
  80. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/commands/dispatch.py +0 -0
  81. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/commands/dispatch_workers.py +0 -0
  82. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/commands/drive.py +0 -0
  83. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/commands/drive_queue.py +0 -0
  84. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/commands/gate_a.py +0 -0
  85. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/commands/gates.py +0 -0
  86. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/commands/issues.py +0 -0
  87. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/commands/lifecycle.py +0 -0
  88. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/commands/merge.py +0 -0
  89. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/commands/milestone.py +0 -0
  90. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/commands/plan_followup.py +0 -0
  91. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/commands/plans.py +0 -0
  92. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/commands/portal.py +0 -0
  93. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/commands/release.py +0 -0
  94. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/commands/repo.py +0 -0
  95. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/commands/report.py +0 -0
  96. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/commands/review.py +0 -0
  97. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/commands/scorecard.py +0 -0
  98. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/commands/sessions.py +0 -0
  99. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/commands/setup.py +0 -0
  100. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/commands/status.py +0 -0
  101. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/commands/terminal.py +0 -0
  102. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/commands/test_gate.py +0 -0
  103. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/commands/tui.py +0 -0
  104. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/comments.py +0 -0
  105. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/config_reload.py +0 -0
  106. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/confirm_test.py +0 -0
  107. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/conflict_fix.py +0 -0
  108. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/dao.py +0 -0
  109. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/dashboard/__init__.py +0 -0
  110. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/dashboard/fixture.py +0 -0
  111. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/dashboard/index.html +0 -0
  112. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/dashboard/server.py +0 -0
  113. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/dashboard/terminal.py +0 -0
  114. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/db.py +0 -0
  115. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/dead_end.py +0 -0
  116. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/deploy/README.md +0 -0
  117. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/deploy/coord-agent.service +0 -0
  118. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/deploy/coord-db-backup.service +0 -0
  119. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/deploy/coord-db-backup.sh +0 -0
  120. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/deploy/coord-db-backup.timer +0 -0
  121. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/deploy/coord-drive-queue.timer +0 -0
  122. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/deploy/coord-notify.service +0 -0
  123. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/deploy/coord-notify.timer +0 -0
  124. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/deploy/coord-release-propagate.service +0 -0
  125. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/deploy/coord-release-propagate.timer +0 -0
  126. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/deploy/coord-release-window.service +0 -0
  127. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/deploy/coord-release-window.timer +0 -0
  128. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/deploy/coord-serve.service +0 -0
  129. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/deploy/coord-web-dist-build.service +0 -0
  130. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/deploy/coord-web-dist-build.timer +0 -0
  131. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/deploy/coord-web.service +0 -0
  132. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/deploy_manifest.py +0 -0
  133. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/deploy_units.py +0 -0
  134. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/deps.py +0 -0
  135. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/diagnose.py +0 -0
  136. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/dispatch.py +0 -0
  137. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/dist_name.py +0 -0
  138. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/drive.py +0 -0
  139. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/drive_queue.py +0 -0
  140. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/drive_state.py +0 -0
  141. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/events.py +0 -0
  142. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/failure_class.py +0 -0
  143. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/filelock.py +0 -0
  144. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/fleet_config_health.py +0 -0
  145. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/forge_availability.py +0 -0
  146. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/freshness.py +0 -0
  147. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/gate_a.py +0 -0
  148. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/gate_b.py +0 -0
  149. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/gate_snapshot.py +0 -0
  150. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/gates.py +0 -0
  151. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/github_ops.py +0 -0
  152. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/goal.py +0 -0
  153. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/graph_health.py +0 -0
  154. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/health/__init__.py +0 -0
  155. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/health/aggregate.py +0 -0
  156. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/health/checks/__init__.py +0 -0
  157. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/health/checks/agent_install.py +0 -0
  158. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/health/checks/cargo_targets.py +0 -0
  159. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/health/checks/claude_binary.py +0 -0
  160. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/health/checks/coord_web_ci_pin.py +0 -0
  161. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/health/checks/deploy_lane_facts.py +0 -0
  162. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/health/checks/disk.py +0 -0
  163. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/health/checks/fleet_board.py +0 -0
  164. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  165. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/health/checks/fleet_phantom.py +0 -0
  166. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/health/checks/fleet_unit_drift.py +0 -0
  167. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/health/checks/graph.py +0 -0
  168. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/health/checks/graphify_cli.py +0 -0
  169. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/health/checks/index_lock.py +0 -0
  170. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/health/checks/plan_usage.py +0 -0
  171. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/health/checks/repo_state.py +0 -0
  172. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/health/checks/spawned_coord.py +0 -0
  173. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/health/checks/timer_active.py +0 -0
  174. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/health/checks/toolchain.py +0 -0
  175. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/health/checks/unit_drift.py +0 -0
  176. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/health/checks/unit_enablement.py +0 -0
  177. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/health/checks/worktrees.py +0 -0
  178. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/health/cli.py +0 -0
  179. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/health/context.py +0 -0
  180. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/health/fleet_snapshot.py +0 -0
  181. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/health/models.py +0 -0
  182. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/health/pypi.py +0 -0
  183. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/health/registry.py +0 -0
  184. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/health/render.py +0 -0
  185. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/health/units.py +0 -0
  186. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/hooks.py +0 -0
  187. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/housekeeping.py +0 -0
  188. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/interactive.py +0 -0
  189. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/issue_store.py +0 -0
  190. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/liveness_auditor.py +0 -0
  191. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/machine_pause.py +0 -0
  192. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/merge_queue.py +0 -0
  193. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/milestone_chat.py +0 -0
  194. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/milestone_dispatch.py +0 -0
  195. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/milestone_gate.py +0 -0
  196. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/milestone_order.py +0 -0
  197. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/mock_author.py +0 -0
  198. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/models.py +0 -0
  199. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/network.py +0 -0
  200. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/new_issue_chat.py +0 -0
  201. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/notifier/__init__.py +0 -0
  202. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/notifier/baseline.py +0 -0
  203. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/notifier/cli.py +0 -0
  204. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/notifier/collect.py +0 -0
  205. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/notifier/digest.py +0 -0
  206. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/notifier/models.py +0 -0
  207. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/notifier/predicate.py +0 -0
  208. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/notifier/service.py +0 -0
  209. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/notifier/store.py +0 -0
  210. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/notifier/transport.py +0 -0
  211. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/notify.py +0 -0
  212. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/openapi.py +0 -0
  213. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/overlap_fence.py +0 -0
  214. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/overlap_predict.py +0 -0
  215. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/parentage.py +0 -0
  216. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/parentage_github.py +0 -0
  217. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/pipeline.py +0 -0
  218. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/plan_parser.py +0 -0
  219. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/plans.py +0 -0
  220. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/platform_paths.py +0 -0
  221. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/portal_bridge.py +0 -0
  222. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/portal_sync.py +0 -0
  223. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/pr_body_lint.py +0 -0
  224. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/prereqs.py +0 -0
  225. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/progress.py +0 -0
  226. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/providers/__init__.py +0 -0
  227. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/providers/base.py +0 -0
  228. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/providers/claude.py +0 -0
  229. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/providers/claude_pty.py +0 -0
  230. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/providers/opencode.py +0 -0
  231. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/queue_diagnose.py +0 -0
  232. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/reconcile.py +0 -0
  233. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/reconcile_tick.py +0 -0
  234. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/refine_chat.py +0 -0
  235. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/release_cordon.py +0 -0
  236. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/release_propagate.py +0 -0
  237. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/release_verify.py +0 -0
  238. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/release_window.py +0 -0
  239. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/repo_edit.py +0 -0
  240. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/repo_onboard.py +0 -0
  241. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/reports.py +0 -0
  242. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/revalidate.py +0 -0
  243. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/review.py +0 -0
  244. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/scorecard.py +0 -0
  245. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/self_health.py +0 -0
  246. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  247. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  248. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  249. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  250. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  251. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/skills/portal-followup/SKILL.md +0 -0
  252. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  253. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  254. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/skills/update-issue/SKILL.md +0 -0
  255. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/smoke.py +0 -0
  256. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/spend_ceiling.py +0 -0
  257. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/split_work.py +0 -0
  258. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/stage_projection.py +0 -0
  259. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/state.py +0 -0
  260. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/test_author.py +0 -0
  261. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/test_chat.py +0 -0
  262. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/test_orchestrator.py +0 -0
  263. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/test_report.py +0 -0
  264. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/tui_release.py +0 -0
  265. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/usage.py +0 -0
  266. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/usage_limits.py +0 -0
  267. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/usage_rollup.py +0 -0
  268. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coord/worker_events.py +0 -0
  269. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/coordinator.example.yml +0 -0
  270. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/deploy/coord-agent.service +0 -0
  271. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/deploy/coord-db-backup.service +0 -0
  272. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/deploy/coord-db-backup.sh +0 -0
  273. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/deploy/coord-db-backup.timer +0 -0
  274. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/deploy/coord-drive-queue.timer +0 -0
  275. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/deploy/coord-notify.service +0 -0
  276. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/deploy/coord-notify.timer +0 -0
  277. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/deploy/coord-release-propagate.service +0 -0
  278. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/deploy/coord-release-propagate.timer +0 -0
  279. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/deploy/coord-release-window.service +0 -0
  280. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/deploy/coord-release-window.timer +0 -0
  281. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/deploy/coord-serve.service +0 -0
  282. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/deploy/coord-web-dist-build.service +0 -0
  283. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/deploy/coord-web-dist-build.sh +0 -0
  284. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/deploy/coord-web-dist-build.timer +0 -0
  285. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/deploy/coord-web-rollback.sh +0 -0
  286. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/deploy/coord-web.service +0 -0
  287. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/deploy/node-shim.sh +0 -0
  288. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  289. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/docs/ADR_COORD_WEB_CI.md +0 -0
  290. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/docs/ADR_COORD_WEB_DIST.md +0 -0
  291. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/docs/AGENT_OPERATIONS.md +0 -0
  292. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/docs/ARCHITECTURE.md +0 -0
  293. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/docs/ARCH_SECURITY_GATES.md +0 -0
  294. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/docs/COCKPIT.md +0 -0
  295. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/docs/CONTROL_CENTER.md +0 -0
  296. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/docs/COST_DISCIPLINE.md +0 -0
  297. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/docs/CROSS_PLATFORM.md +0 -0
  298. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/docs/CUSTOMER_PORTAL.md +0 -0
  299. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/docs/DRIVE_QUEUE.md +0 -0
  300. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/docs/EPHEMERAL_WORKERS.md +0 -0
  301. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/docs/FORGE_MIGRATION.md +0 -0
  302. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/docs/GRAPHIFY_SETUP.md +0 -0
  303. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/docs/ISSUE_GUIDANCE.md +0 -0
  304. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/docs/MAC_MINI.md +0 -0
  305. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  306. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/docs/NOTIFIER.md +0 -0
  307. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/docs/OPENCODE_VERIFICATION.md +0 -0
  308. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/docs/OPERATING_GOTCHAS.md +0 -0
  309. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/docs/ORACLE_LOOP.md +0 -0
  310. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/docs/PHONE_WEBAPP.md +0 -0
  311. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/docs/PIPELINE_V2.md +0 -0
  312. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/docs/PLATFORM_EVOLUTION.md +0 -0
  313. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/docs/SECOND_BACKEND.md +0 -0
  314. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/docs/STORE_SERVICE.md +0 -0
  315. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  316. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/docs/WEB_CONTROL_CENTER.md +0 -0
  317. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/docs/WSL_WINDOWS_WORKER.md +0 -0
  318. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/docs/mocks/web/README.md +0 -0
  319. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/docs/mocks/web/_tokens.css +0 -0
  320. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/docs/mocks/web/issue-detail.html +0 -0
  321. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/docs/mocks/web/pipeline-narrow.html +0 -0
  322. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/docs/mocks/web/pipeline-wide.html +0 -0
  323. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/graphify-out/.gitignore +0 -0
  324. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/install-agent.sh +0 -0
  325. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/pyproject.toml +0 -0
  326. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/scripts/audit_review_verdict_overrides.py +0 -0
  327. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  328. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/scripts/azure-workers/build-worker-image.sh +0 -0
  329. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/scripts/azure-workers/coordinator-machine.py +0 -0
  330. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/scripts/azure-workers/epic-down.sh +0 -0
  331. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/scripts/azure-workers/epic-up.sh +0 -0
  332. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/scripts/azure-workers/preflight.sh +0 -0
  333. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/scripts/azure-workers/provision-worker.sh +0 -0
  334. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  335. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  336. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/scripts/azure-workers/verify-github-token.sh +0 -0
  337. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/scripts/check_gh_argv_containment.py +0 -0
  338. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/scripts/codegen.py +0 -0
  339. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/scripts/coord-test-runner.sh +0 -0
  340. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/scripts/drive-batch.sh +0 -0
  341. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/scripts/gen_board_fixture.py +0 -0
  342. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/scripts/gen_mock_index.py +0 -0
  343. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/scripts/next_release_tag.py +0 -0
  344. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/scripts/run_tests_in_populated_home.sh +0 -0
  345. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/scripts/run_tests_without_gh.sh +0 -0
  346. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/scripts/smoke_437_interactive.py +0 -0
  347. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/scripts/verify_878_review_capture.py +0 -0
  348. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/scripts/verify_release_published.py +0 -0
  349. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/scripts/verify_release_wheel.py +0 -0
  350. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/setup.cfg +0 -0
  351. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/SMOKE_SET.md +0 -0
  352. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/__init__.py +0 -0
  353. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  354. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-33/contract.md +0 -0
  355. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-33/manifest.yml +0 -0
  356. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  357. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  358. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  359. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  360. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-37/conftest.py +0 -0
  361. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-37/contract.md +0 -0
  362. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-37/manifest.yml +0 -0
  363. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  364. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  365. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-38/contract.md +0 -0
  366. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-38/manifest.yml +0 -0
  367. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  368. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  369. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  370. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  371. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  372. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  373. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  374. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  375. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  376. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  377. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-51/contract.md +0 -0
  378. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  379. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  380. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-51/manifest.yml +0 -0
  381. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  382. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-51/tsconfig.json +0 -0
  383. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-65/board_split_2288.rs +0 -0
  384. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
  385. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
  386. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-65/contract.md +0 -0
  387. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
  388. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-65/manifest.yml +0 -0
  389. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
  390. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
  391. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
  392. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
  393. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
  394. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
  395. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
  396. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
  397. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
  398. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
  399. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-65/tabs_persistence_2286.rs +0 -0
  400. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-67/approved_items_2532.rs +0 -0
  401. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-67/contract.md +0 -0
  402. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-67/manifest.yml +0 -0
  403. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-67/mocks/approved-items-chat-opened.screen +0 -0
  404. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-67/mocks/approved-items-context-menu.screen +0 -0
  405. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-67/mocks/approved-items-detail.screen +0 -0
  406. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-67/mocks/approved-items-empty.screen +0 -0
  407. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-67/mocks/approved-items-populated.screen +0 -0
  408. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  409. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/conftest.py +0 -0
  410. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/fixtures/board-pipeline-basic.json +0 -0
  411. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  412. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  413. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  414. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  415. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/fixtures/playwright/all_pass.json +0 -0
  416. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  417. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/fixtures/playwright/mixed_fail.json +0 -0
  418. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  419. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  420. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/fixtures/playwright/skip.json +0 -0
  421. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/fixtures/playwright/truncated.json +0 -0
  422. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  423. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  424. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  425. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  426. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  427. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  428. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  429. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  430. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_acceptance.py +0 -0
  431. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_acceptance_drivers.py +0 -0
  432. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_agent.py +0 -0
  433. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_agent_api_error.py +0 -0
  434. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_agent_app.py +0 -0
  435. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_agent_branch_base.py +0 -0
  436. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_agent_branch_capture.py +0 -0
  437. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_agent_config_free_1712.py +0 -0
  438. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_agent_deploy_units_endpoint.py +0 -0
  439. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_agent_dirty_worktree.py +0 -0
  440. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  441. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_agent_graph_self_heal.py +0 -0
  442. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_agent_health_h3.py +0 -0
  443. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_agent_idle_restart.py +0 -0
  444. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_agent_push_failure.py +0 -0
  445. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_agent_reap.py +0 -0
  446. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_agent_repos_and_pull.py +0 -0
  447. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_agent_restart_services_endpoint.py +0 -0
  448. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_agent_skills_self_heal.py +0 -0
  449. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_agent_startup_diagnostics.py +0 -0
  450. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_agent_update.py +0 -0
  451. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_agent_update_bluegreen.py +0 -0
  452. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_agent_usage_limit.py +0 -0
  453. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_agent_zero_commit.py +0 -0
  454. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_ambient_home_isolation.py +0 -0
  455. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_approve_reject_plan.py +0 -0
  456. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_approve_usage_gate.py +0 -0
  457. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_assignment_already_recorded_daemon.py +0 -0
  458. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_audit_log.py +0 -0
  459. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_audit_outcome.py +0 -0
  460. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_audit_query.py +0 -0
  461. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_auto_loop.py +0 -0
  462. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_auto_release_publish_2035.py +0 -0
  463. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_base_checkout_restore.py +0 -0
  464. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_block_log.py +0 -0
  465. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_board_cap_762.py +0 -0
  466. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_board_fixture.py +0 -0
  467. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_board_read_path.py +0 -0
  468. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_board_service.py +0 -0
  469. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_board_state.py +0 -0
  470. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_board_wire.py +0 -0
  471. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_brain.py +0 -0
  472. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_branch_model.py +0 -0
  473. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_bug_intake.py +0 -0
  474. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_build_worker_image_env_update.py +0 -0
  475. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cargo_cache.py +0 -0
  476. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_check_gh_argv_containment.py +0 -0
  477. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_ci_acceptance_gate_1950.py +0 -0
  478. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_ci_fix.py +0 -0
  479. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_ci_gitlab.py +0 -0
  480. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_ci_parity_2091.py +0 -0
  481. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_ci_store.py +0 -0
  482. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_claim.py +0 -0
  483. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_acceptance.py +0 -0
  484. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_assign.py +0 -0
  485. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  486. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_assign_interactive_remote.py +0 -0
  487. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_assign_provider.py +0 -0
  488. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  489. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_audit.py +0 -0
  490. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_chat_continue.py +0 -0
  491. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_decide.py +0 -0
  492. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_diagnose_config_provenance.py +0 -0
  493. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_diagnose_forge_availability.py +0 -0
  494. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_diagnose_graph.py +0 -0
  495. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_diagnose_self.py +0 -0
  496. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_doctor.py +0 -0
  497. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_doctor_config_free_1801.py +0 -0
  498. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  499. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_drive.py +0 -0
  500. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_drive_queue.py +0 -0
  501. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_escalate.py +0 -0
  502. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_fix_headless_review.py +0 -0
  503. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_gate_a.py +0 -0
  504. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_install_drift.py +0 -0
  505. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_install_skills.py +0 -0
  506. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_issue_create_label.py +0 -0
  507. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_issue_reopen.py +0 -0
  508. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_merge.py +0 -0
  509. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_milestone_assign.py +0 -0
  510. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_milestone_capture.py +0 -0
  511. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_milestone_chat_add_child.py +0 -0
  512. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_milestone_dispatch.py +0 -0
  513. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_milestone_gate_b.py +0 -0
  514. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_milestone_gate_c.py +0 -0
  515. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_milestone_order.py +0 -0
  516. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  517. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_milestone_ship.py +0 -0
  518. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_network.py +0 -0
  519. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_new_issue_chat.py +0 -0
  520. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_plans.py +0 -0
  521. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_portal.py +0 -0
  522. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_pull_artifact.py +0 -0
  523. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_queue.py +0 -0
  524. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_reattach_sessions.py +0 -0
  525. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_refine_board.py +0 -0
  526. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_release_preflight.py +0 -0
  527. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_release_propagate.py +0 -0
  528. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_release_window.py +0 -0
  529. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_repo_2220.py +0 -0
  530. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_scorecard.py +0 -0
  531. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_set_review_findings.py +0 -0
  532. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_status_advisory_terminal.py +0 -0
  533. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_status_merge_queue.py +0 -0
  534. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_status_provider.py +0 -0
  535. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_status_review_finalizing.py +0 -0
  536. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_status_test_failed_tag.py +0 -0
  537. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_status_usage_limit.py +0 -0
  538. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_sync_comments_873.py +0 -0
  539. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_test_plan.py +0 -0
  540. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_track.py +0 -0
  541. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_tui_update.py +0 -0
  542. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cli_wait.py +0 -0
  543. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_client_base_install.py +0 -0
  544. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_comments.py +0 -0
  545. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_completion_summary.py +0 -0
  546. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_config.py +0 -0
  547. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_config_acceptance.py +0 -0
  548. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_config_audit.py +0 -0
  549. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_config_pricing.py +0 -0
  550. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  551. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_config_usage_gate.py +0 -0
  552. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_confirm_test.py +0 -0
  553. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_conflict_fix.py +0 -0
  554. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_conflict_fix_semantic.py +0 -0
  555. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_coord_test.py +0 -0
  556. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_coord_test_runner_baseline.py +0 -0
  557. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_coord_test_runner_populated_home.py +0 -0
  558. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_coord_test_runner_routing.py +0 -0
  559. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_coord_test_runner_toolchain.py +0 -0
  560. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_coord_web_sse_restart_live.py +0 -0
  561. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_coordinator_machine.py +0 -0
  562. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_cross_platform_imports.py +0 -0
  563. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_dashboard.py +0 -0
  564. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_dashboard_fixture.py +0 -0
  565. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_dashboard_terminal.py +0 -0
  566. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_dashboard_terminal_live.py +0 -0
  567. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_db.py +0 -0
  568. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_dead_end.py +0 -0
  569. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_deploy_coord_db_backup.py +0 -0
  570. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_deploy_coord_web_dist.py +0 -0
  571. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_deploy_coord_web_rollback.py +0 -0
  572. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_deploy_manifest.py +0 -0
  573. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_deploy_units_lane.py +0 -0
  574. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_deploy_web_unit.py +0 -0
  575. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_deps.py +0 -0
  576. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_diagnose.py +0 -0
  577. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_dispatch.py +0 -0
  578. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_dispatch_target_validation.py +0 -0
  579. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_dist_name.py +0 -0
  580. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_done_housekeeping.py +0 -0
  581. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_drive.py +0 -0
  582. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_drive_queue.py +0 -0
  583. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_drive_state.py +0 -0
  584. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_drive_tmux.py +0 -0
  585. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_epic_up_capability_detection.py +0 -0
  586. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  587. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_epic_up_image_provenance.py +0 -0
  588. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_errors.py +0 -0
  589. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_events.py +0 -0
  590. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_failure_class.py +0 -0
  591. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_filelock.py +0 -0
  592. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  593. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_fix_of_force_override.py +0 -0
  594. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_fleet_config_health.py +0 -0
  595. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_fleet_health_probes.py +0 -0
  596. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_fleet_health_snapshot.py +0 -0
  597. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_forge_availability.py +0 -0
  598. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_freshness.py +0 -0
  599. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_gate_a.py +0 -0
  600. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_gate_b.py +0 -0
  601. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_gate_snapshot_staleness.py +0 -0
  602. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_gates.py +0 -0
  603. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  604. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_gen_mock_index.py +0 -0
  605. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_generated_types_fixture.py +0 -0
  606. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_github_ops.py +0 -0
  607. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_goal.py +0 -0
  608. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_graph_health.py +0 -0
  609. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_graph_selfheal_absent_2237.py +0 -0
  610. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_handoff.py +0 -0
  611. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_health_checks.py +0 -0
  612. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_health_cli.py +0 -0
  613. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_health_cli_graph.py +0 -0
  614. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_health_config.py +0 -0
  615. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_health_context.py +0 -0
  616. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_health_coord_web_ci_pin.py +0 -0
  617. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_health_deploy_lane_facts.py +0 -0
  618. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_health_incident_regression.py +0 -0
  619. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_health_pypi.py +0 -0
  620. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_health_registry.py +0 -0
  621. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_health_timer_active.py +0 -0
  622. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_health_toolchain.py +0 -0
  623. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_health_unit_drift.py +0 -0
  624. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_health_unit_enablement.py +0 -0
  625. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_hooks.py +0 -0
  626. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_human_attended_437.py +0 -0
  627. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_init.py +0 -0
  628. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_integration.py +0 -0
  629. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_interactive_briefing_echo.py +0 -0
  630. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_interactive_prefill_state.py +0 -0
  631. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_interactive_session_relaunch.py +0 -0
  632. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_interactive_test_verdict_backstop.py +0 -0
  633. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_interactive_token_attribution.py +0 -0
  634. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_interactive_worktree.py +0 -0
  635. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_issue_store_seam.py +0 -0
  636. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_liveness_auditor.py +0 -0
  637. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_liveness_notify.py +0 -0
  638. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_machine_pause.py +0 -0
  639. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_merge_queue.py +0 -0
  640. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_merge_verify.py +0 -0
  641. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_milestone_chat.py +0 -0
  642. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_milestone_dispatch.py +0 -0
  643. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_milestone_gate.py +0 -0
  644. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_milestone_order.py +0 -0
  645. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_milestone_seam.py +0 -0
  646. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_mock_author.py +0 -0
  647. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_model_tiering.py +0 -0
  648. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_models.py +0 -0
  649. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_models_config_labels.py +0 -0
  650. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_needs_attention.py +0 -0
  651. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_network.py +0 -0
  652. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_new_issue_chat.py +0 -0
  653. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_next_release_tag.py +0 -0
  654. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_node_shim.py +0 -0
  655. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_notifier_baseline.py +0 -0
  656. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_notifier_cli.py +0 -0
  657. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_notifier_collect.py +0 -0
  658. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_notifier_config.py +0 -0
  659. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_notifier_drive_seam.py +0 -0
  660. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_notifier_isolation.py +0 -0
  661. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_notifier_predicate.py +0 -0
  662. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_notifier_quiet_hours.py +0 -0
  663. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_notifier_service.py +0 -0
  664. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_notify.py +0 -0
  665. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_notify_drain.py +0 -0
  666. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_openapi.py +0 -0
  667. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_operational_defaults.py +0 -0
  668. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_overlap_fence.py +0 -0
  669. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_overlap_predict.py +0 -0
  670. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_packaged_deploy_units.py +0 -0
  671. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_parentage.py +0 -0
  672. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_paste_landed.py +0 -0
  673. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_pipeline.py +0 -0
  674. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_plan_followup_approve_plan_command.py +0 -0
  675. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_plan_followup_pr_command.py +0 -0
  676. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_plan_followup_review_command.py +0 -0
  677. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_plan_only.py +0 -0
  678. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_plan_parser.py +0 -0
  679. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_platform_paths.py +0 -0
  680. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_portal_bridge.py +0 -0
  681. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_portal_config.py +0 -0
  682. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_portal_store.py +0 -0
  683. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_portal_sync.py +0 -0
  684. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_pr_body_lint.py +0 -0
  685. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_prereqs.py +0 -0
  686. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_production_db_guard.py +0 -0
  687. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_progress.py +0 -0
  688. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_provider_seam.py +0 -0
  689. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_providers.py +0 -0
  690. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_providers_config_labels.py +0 -0
  691. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_providers_pty.py +0 -0
  692. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_quiet_hours.py +0 -0
  693. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_quiet_hours_store_2146.py +0 -0
  694. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_reap_merged_sessions.py +0 -0
  695. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_reap_stale_interactive_tick.py +0 -0
  696. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_reconcile.py +0 -0
  697. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_reconcile_branch.py +0 -0
  698. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_reconcile_completions.py +0 -0
  699. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_reconcile_merges.py +0 -0
  700. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_reconcile_no_agent_record.py +0 -0
  701. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_reconcile_tick.py +0 -0
  702. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_reconcile_usage_limit_done.py +0 -0
  703. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_refine_chat.py +0 -0
  704. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_release_cordon_2101.py +0 -0
  705. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  706. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_release_cordon_deadlock_2240.py +0 -0
  707. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_release_cordon_stuck_2490.py +0 -0
  708. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_release_propagate.py +0 -0
  709. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_release_unified_1242.py +0 -0
  710. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_release_verify.py +0 -0
  711. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_release_window.py +0 -0
  712. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_remote_auto_prune.py +0 -0
  713. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_remote_interactive_reaper.py +0 -0
  714. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_repo_edit_2220.py +0 -0
  715. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_repo_graph_fleet_2237.py +0 -0
  716. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_repo_onboard_2220.py +0 -0
  717. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_report_result_push.py +0 -0
  718. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_reports.py +0 -0
  719. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_retry.py +0 -0
  720. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_retry_advisory_1606.py +0 -0
  721. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_retry_type_1636.py +0 -0
  722. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_revalidate.py +0 -0
  723. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_review.py +0 -0
  724. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_review_end_review_without_verdict.py +0 -0
  725. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_review_parse_failure_diagnostic.py +0 -0
  726. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_review_reaffirm.py +0 -0
  727. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_review_state.py +0 -0
  728. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_review_verdict_backstop.py +0 -0
  729. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_review_verdict_override_audit.py +0 -0
  730. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_review_verdict_relay.py +0 -0
  731. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_review_zero_commits.py +0 -0
  732. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_scoped_review_wiring.py +0 -0
  733. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_scorecard.py +0 -0
  734. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_self_health.py +0 -0
  735. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_serve.py +0 -0
  736. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_serve_app_board_trim.py +0 -0
  737. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_session.py +0 -0
  738. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_slice_issue_attribution.py +0 -0
  739. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_smoke.py +0 -0
  740. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_smoke_live_checkout_restore.py +0 -0
  741. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_smoke_workflow.py +0 -0
  742. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_spend_ceiling.py +0 -0
  743. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_spend_ceiling_coordinator.py +0 -0
  744. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_split.py +0 -0
  745. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_split_work.py +0 -0
  746. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_stage_projection.py +0 -0
  747. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_stalled_pipeline.py +0 -0
  748. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_state.py +0 -0
  749. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_state_review_findings_daemon.py +0 -0
  750. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_status_fleet_footer.py +0 -0
  751. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_stop_1567.py +0 -0
  752. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_stuck.py +0 -0
  753. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_terminal_command.py +0 -0
  754. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_test_author.py +0 -0
  755. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_test_chat.py +0 -0
  756. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_test_orchestrator.py +0 -0
  757. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_test_report.py +0 -0
  758. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_test_verdict_parsing.py +0 -0
  759. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_test_verdict_transcript_floor.py +0 -0
  760. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_thin_client_board_audit.py +0 -0
  761. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_thin_client_config_load_1080.py +0 -0
  762. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_thin_client_daemon_routing_906.py +0 -0
  763. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_tmux_host.py +0 -0
  764. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_tmux_session.py +0 -0
  765. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_transcript_floor.py +0 -0
  766. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_usage.py +0 -0
  767. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_usage_limits.py +0 -0
  768. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_usage_rollup.py +0 -0
  769. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_venv_live_install_2121.py +0 -0
  770. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_version_single_source.py +0 -0
  771. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_watch.py +0 -0
  772. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  773. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_worker_events.py +0 -0
  774. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_worker_image_pin_sync.py +0 -0
  775. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_worker_safety.py +0 -0
  776. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_worker_test_scoping.py +0 -0
  777. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_worktree.py +0 -0
  778. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  779. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/Cargo.lock +0 -0
  780. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/Cargo.toml +0 -0
  781. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/cargo-config-local-quadraui.toml.example +0 -0
  782. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/src/app/audit.rs +0 -0
  783. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/src/app/chat.rs +0 -0
  784. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/src/app/dialogs.rs +0 -0
  785. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/src/app/doc_tabs.rs +0 -0
  786. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/src/app/drive.rs +0 -0
  787. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/src/app/drive_queue.rs +0 -0
  788. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/src/app/escalation.rs +0 -0
  789. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/src/app/fleet_health.rs +0 -0
  790. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/src/app/fleet_sessions.rs +0 -0
  791. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/src/app/fleet_terminals.rs +0 -0
  792. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/src/app/format.rs +0 -0
  793. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/src/app/milestone_dag.rs +0 -0
  794. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/src/app/msv.rs +0 -0
  795. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/src/app/pipeline.rs +0 -0
  796. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/src/app/plans.rs +0 -0
  797. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/src/app/reports.rs +0 -0
  798. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/src/app/sessions.rs +0 -0
  799. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/src/app/settings_ui.rs +0 -0
  800. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/src/app/terminal.rs +0 -0
  801. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/src/app/tests.rs +0 -0
  802. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/src/app/workspace.rs +0 -0
  803. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/src/bin/gtk.rs +0 -0
  804. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/src/commands.rs +0 -0
  805. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/src/lib.rs +0 -0
  806. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/src/main.rs +0 -0
  807. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/src/settings.rs +0 -0
  808. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/tests/acceptance.rs +0 -0
  809. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/tui/tests/cli.rs +0 -0
  810. {code_coordinator-0.5.217 → code_coordinator-0.5.218}/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.217
3
+ Version: 0.5.218
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.217
3
+ Version: 0.5.218
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
@@ -36,6 +36,7 @@ coord/acceptance_drivers.py
36
36
  coord/agent.py
37
37
  coord/agent_app.py
38
38
  coord/agent_update.py
39
+ coord/approved_work.py
39
40
  coord/audit.py
40
41
  coord/auto_loop.py
41
42
  coord/block_log.py
@@ -364,6 +365,7 @@ tests/test_agent_zero_commit.py
364
365
  tests/test_ambient_home_isolation.py
365
366
  tests/test_approve_reject_plan.py
366
367
  tests/test_approve_usage_gate.py
368
+ tests/test_approved_work_2532.py
367
369
  tests/test_assignment_already_recorded_daemon.py
368
370
  tests/test_audit_log.py
369
371
  tests/test_audit_outcome.py
@@ -770,6 +772,7 @@ tui/src/commands.rs
770
772
  tui/src/lib.rs
771
773
  tui/src/main.rs
772
774
  tui/src/settings.rs
775
+ tui/src/app/approved.rs
773
776
  tui/src/app/audit.rs
774
777
  tui/src/app/chat.rs
775
778
  tui/src/app/data.rs
@@ -30,6 +30,7 @@
30
30
  "coord/agents/opencode/.gitignore",
31
31
  "coord/agents/opencode/agents/work.md",
32
32
  "coord/agents/opencode/routing.jsonc",
33
+ "coord/approved_work.py",
33
34
  "coord/audit.py",
34
35
  "coord/auto_loop.py",
35
36
  "coord/block_log.py",
@@ -434,6 +435,7 @@
434
435
  "tests/test_ambient_home_isolation.py",
435
436
  "tests/test_approve_reject_plan.py",
436
437
  "tests/test_approve_usage_gate.py",
438
+ "tests/test_approved_work_2532.py",
437
439
  "tests/test_assignment_already_recorded_daemon.py",
438
440
  "tests/test_audit_log.py",
439
441
  "tests/test_audit_outcome.py",
@@ -760,6 +762,7 @@
760
762
  "tui/Cargo.lock",
761
763
  "tui/Cargo.toml",
762
764
  "tui/cargo-config-local-quadraui.toml.example",
765
+ "tui/src/app/approved.rs",
763
766
  "tui/src/app/audit.rs",
764
767
  "tui/src/app/chat.rs",
765
768
  "tui/src/app/data.rs",
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "0.5.217",
2
+ "tag": "0.5.218",
3
3
  "distance": 0,
4
- "node": "gbfdae79e2c8dc4a4bdc2faac45f8212b0f4d4fbf",
4
+ "node": "ge3d2e92010c272a4de2492c97e24a763480894bd",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-22"
@@ -0,0 +1,157 @@
1
+ """``/board``'s ``approved_submissions`` block — the "Approved work items"
2
+ panel's data source (#2532, ms-67 contract §5).
3
+
4
+ **Why this is server-side.** The TUI is a thin client: it renders what
5
+ ``coord serve`` computes and never reads ``coordinator.yml`` or the local
6
+ SQLite DB itself (#2336). The portal bridge's tables live on the *daemon
7
+ host* and are canonical only there (:mod:`coord.portal_store`'s module doc),
8
+ so a client that read them locally would show an empty panel on every
9
+ machine that is not the daemon — which is exactly the failure mode #2532's
10
+ issue body calls out. Everything this module resolves — which submissions
11
+ are approved, which repos their project maps to, how the timestamp is
12
+ spelled — is therefore decided here and shipped as plain JSON.
13
+
14
+ **What "approved" means today.** A submission whose most recent sign-off
15
+ event carries an ``approved`` verdict. Nothing coord-side consumes those
16
+ events (:func:`coord.portal_sync._consume_verdicts` deliberately leaves an
17
+ ``approved`` verdict unhandled pending #2509's policy question), so they
18
+ accumulate as exactly the FIFO backlog the panel exists to work through.
19
+ A later ``changes_requested`` on the same submission takes it back off the
20
+ list — last verdict wins, not "was ever approved".
21
+
22
+ **Field-name honesty (contract §6.9).** coord-portal's submission schema
23
+ lives in a separate repo that is not visible from here, so the intake fields
24
+ (outcome / audience / done-definition / constraints, plus client and project
25
+ identity) are read out of the read-only customer mirror
26
+ (``portal_submissions.customer_json``, which
27
+ :func:`coord.portal_sync._mirror_event` fills with whatever the portal sent
28
+ minus coord-owned keys) under the contract's own key spelling, with the
29
+ camelCase variant accepted as an alias because the portal is a TypeScript
30
+ worker. A field the portal never sent renders as an empty string — the panel
31
+ shows a blank cell, it does not omit the row or crash. If coord-portal's
32
+ real spelling turns out to be something else entirely, this alias table is
33
+ the one place to correct it.
34
+ """
35
+
36
+ from __future__ import annotations
37
+
38
+ from datetime import datetime, timezone
39
+ from typing import TYPE_CHECKING, Any
40
+
41
+ if TYPE_CHECKING: # pragma: no cover - typing only
42
+ from coord.config import Config
43
+
44
+ #: The wire keys :class:`ApprovedSubmission` (``tui/src/app/types.rs``)
45
+ #: deserializes without ``#[serde(default)]``, i.e. the ones this module must
46
+ #: always emit even when the mirror has nothing for them.
47
+ _TEXT_FIELD_ALIASES: dict[str, tuple[str, ...]] = {
48
+ "client": ("client", "client_name", "clientName"),
49
+ "project_id": ("project_id", "projectId"),
50
+ "project_label": ("project_label", "projectLabel"),
51
+ "outcome": ("outcome",),
52
+ "audience": ("audience",),
53
+ "done_definition": ("done_definition", "doneDefinition"),
54
+ "constraints": ("constraints",),
55
+ }
56
+
57
+
58
+ def _first_str(mirror: dict[str, Any], keys: tuple[str, ...]) -> str:
59
+ """The first non-blank string *mirror* has under *keys*, else ``""``.
60
+
61
+ Non-string values (a number, a nested object the portal decided to send)
62
+ are stringified rather than dropped: a rendered-but-odd cell is easier to
63
+ diagnose from the panel than a silently blank one.
64
+ """
65
+ for key in keys:
66
+ value = mirror.get(key)
67
+ if isinstance(value, str):
68
+ if value.strip():
69
+ return value.strip()
70
+ elif value is not None and not isinstance(value, (list, dict, bool)):
71
+ return str(value)
72
+ return ""
73
+
74
+
75
+ def _iso8601(epoch: Any) -> str:
76
+ """``first_seen_at`` (a float epoch) as ``YYYY-MM-DDTHH:MM:SSZ``.
77
+
78
+ The TUI keeps this as a raw string and parses it defensively, so a bad
79
+ value must degrade to ``""`` rather than raise — a submission with an
80
+ unreadable timestamp still belongs on the list.
81
+ """
82
+ try:
83
+ stamp = float(epoch)
84
+ except (TypeError, ValueError):
85
+ return ""
86
+ try:
87
+ return (
88
+ datetime.fromtimestamp(stamp, tz=timezone.utc)
89
+ .strftime("%Y-%m-%dT%H:%M:%SZ")
90
+ )
91
+ except (OverflowError, OSError, ValueError):
92
+ return ""
93
+
94
+
95
+ def approved_submission_ids() -> set[str]:
96
+ """Submission ids whose LATEST sign-off verdict is ``approved``.
97
+
98
+ Folds :func:`coord.portal_store.signoff_events` (oldest first) into one
99
+ verdict per submission, so a walked-back approval drops out. Reuses
100
+ :mod:`coord.portal_sync`'s own verdict readers rather than re-deriving
101
+ them: the portal's sign-off event shape is not fully pinned down, and two
102
+ independent guesses at it would drift.
103
+ """
104
+ from coord import portal_store # noqa: PLC0415 — avoid import cycle
105
+ from coord.portal_sync import ( # noqa: PLC0415
106
+ _normalize_verdict,
107
+ _signoff_verdict,
108
+ )
109
+
110
+ latest: dict[str, str] = {}
111
+ for event in portal_store.signoff_events():
112
+ submission_id = (event.submission_id or "").strip()
113
+ if not submission_id:
114
+ continue
115
+ verdict = _signoff_verdict(event)
116
+ if verdict is None:
117
+ continue
118
+ latest[submission_id] = _normalize_verdict(verdict)
119
+ return {sid for sid, verdict in latest.items() if verdict == "approved"}
120
+
121
+
122
+ def approved_submissions(config: "Config") -> list[dict[str, Any]]:
123
+ """The ``/board`` ``approved_submissions`` payload, **oldest first**.
124
+
125
+ Oldest-first is the panel's contract (§3c: a FIFO backlog, the longest
126
+ unactioned sign-off at the top) and comes for free from
127
+ :func:`coord.portal_store.list_submissions`' own
128
+ ``first_seen_at ASC, submission_id ASC`` ordering — the tie-break matters
129
+ because a pull page can land several submissions on the same stamp.
130
+
131
+ ``repos`` is resolved here via
132
+ :meth:`coord.config.PortalConfig.repos_for_project`; an unmapped project
133
+ yields ``[]``, which the panel renders as "— no mapping —". That is a
134
+ normal state, not an error, so it never suppresses the row: an operator
135
+ who cannot see the unmapped submission cannot know to map it.
136
+ """
137
+ from coord import portal_store # noqa: PLC0415 — avoid import cycle
138
+
139
+ approved = approved_submission_ids()
140
+ if not approved:
141
+ return []
142
+
143
+ portal = getattr(config, "portal", None)
144
+ rows: list[dict[str, Any]] = []
145
+ for record in portal_store.list_submissions():
146
+ if record.submission_id not in approved:
147
+ continue
148
+ mirror = record.customer if isinstance(record.customer, dict) else {}
149
+ row: dict[str, Any] = {"submission_id": record.submission_id}
150
+ for wire_key, aliases in _TEXT_FIELD_ALIASES.items():
151
+ row[wire_key] = _first_str(mirror, aliases)
152
+ row["repos"] = (
153
+ portal.repos_for_project(row["project_id"]) if portal is not None else []
154
+ )
155
+ row["received_at"] = _iso8601(record.first_seen_at)
156
+ rows.append(row)
157
+ return rows
@@ -1787,6 +1787,21 @@ class NotificationsConfig:
1787
1787
  cold_ceiling_mins: dict[str, float] = field(default_factory=dict)
1788
1788
 
1789
1789
 
1790
+ @dataclass(frozen=True)
1791
+ class PortalProjectRepo:
1792
+ """One portal-project → coord-repo(s) mapping (ms-67 contract §2).
1793
+
1794
+ ``project_id`` is the portal's own opaque identifier: coord never mints
1795
+ one and never validates its *shape*, only that it is non-empty and
1796
+ declared at most once. ``repos`` must each name a configured
1797
+ ``repos[].name`` — the same cross-reference posture
1798
+ :func:`_validate_dependencies` already applies to ``depends_on``.
1799
+ """
1800
+
1801
+ project_id: str
1802
+ repos: list[str]
1803
+
1804
+
1790
1805
  @dataclass
1791
1806
  class PortalConfig:
1792
1807
  """The outbound client to coord-portal's sync bridge (#2179, ``docs/CUSTOMER_PORTAL.md``).
@@ -1820,6 +1835,28 @@ class PortalConfig:
1820
1835
  # coord.portal_bridge.PortalBridgeClient. A 401 never retries: a bad
1821
1836
  # credential does not become a good one on attempt two.
1822
1837
  max_retries: int = 2
1838
+ # ms-67 contract §2: portal project ↔ coord repo(s). Absent == nothing
1839
+ # mapped == every lookup returns [], which the "Approved work items"
1840
+ # panel renders as its literal "— no mapping —" placeholder rather than
1841
+ # a blank cell. Mapping is *operator* knowledge (which repo a client's
1842
+ # project lands in), so it lives here and not in the portal's schema.
1843
+ project_repos: list[PortalProjectRepo] = field(default_factory=list)
1844
+
1845
+ def repos_for_project(self, project_id: str) -> list[str]:
1846
+ """The coord repo name(s) *project_id* maps to — ``[]`` if unmapped.
1847
+
1848
+ **Never raises.** An unmapped project is a valid, common state (a
1849
+ brand-new portal project the operator has not routed yet), not an
1850
+ error: the caller renders "no mapping", it does not fail. Returns a
1851
+ fresh list so a caller cannot mutate the parsed config.
1852
+ """
1853
+ wanted = (project_id or "").strip()
1854
+ if not wanted:
1855
+ return []
1856
+ for entry in self.project_repos:
1857
+ if entry.project_id == wanted:
1858
+ return list(entry.repos)
1859
+ return []
1823
1860
 
1824
1861
 
1825
1862
  @dataclass
@@ -1920,7 +1957,7 @@ def parse_mapping(raw: Any, *, path: Path | None = None) -> Config:
1920
1957
  pricing = _parse_pricing(raw.get("pricing"))
1921
1958
  health = _parse_health(raw.get("health"))
1922
1959
  notifications = _parse_notifications(raw.get("notifications"))
1923
- portal = _parse_portal(raw.get("portal"))
1960
+ portal = _parse_portal(raw.get("portal"), {r.name for r in repos})
1924
1961
 
1925
1962
  return Config(
1926
1963
  repos=repos,
@@ -3498,12 +3535,18 @@ _PORTAL_PLAIN_STR_FIELDS = ("base_url",)
3498
3535
  _PORTAL_SECRET_STR_FIELDS = ("bridge_client_id", "bridge_client_secret")
3499
3536
 
3500
3537
 
3501
- def _parse_portal(raw: Any) -> PortalConfig:
3538
+ def _parse_portal(raw: Any, repo_names: set[str] | None = None) -> PortalConfig:
3502
3539
  """Parse the optional ``portal:`` block from coordinator.yml (#2179).
3503
3540
 
3504
3541
  An absent block returns a **disabled** :class:`PortalConfig` — unchanged
3505
3542
  behaviour for every existing deployment, and the correct default until
3506
3543
  ``BRIDGE_CLIENT_ID``/``BRIDGE_CLIENT_SECRET`` exist in production.
3544
+
3545
+ *repo_names* (ms-67 contract §2) is the set of configured ``repos[].name``
3546
+ that ``project_repos[*].repos`` entries are cross-checked against, the
3547
+ same way ``reviews.repo_overrides`` already is. ``None`` skips that one
3548
+ check (for callers that parse the block in isolation); every other
3549
+ validation still applies.
3507
3550
  """
3508
3551
  if raw is None:
3509
3552
  return PortalConfig()
@@ -3561,6 +3604,9 @@ def _parse_portal(raw: Any) -> PortalConfig:
3561
3604
  raise ConfigError("portal.max_retries must be a non-negative integer")
3562
3605
  cfg.max_retries = value
3563
3606
 
3607
+ if "project_repos" in raw:
3608
+ cfg.project_repos = _parse_portal_project_repos(raw["project_repos"], repo_names)
3609
+
3564
3610
  if cfg.enabled and not (cfg.base_url and cfg.bridge_client_id and cfg.bridge_client_secret):
3565
3611
  # Half a credential is not a credential — coord-portal's
3566
3612
  # isBridgeAuthorized takes the identical position and fails closed on
@@ -3573,6 +3619,64 @@ def _parse_portal(raw: Any) -> PortalConfig:
3573
3619
  return cfg
3574
3620
 
3575
3621
 
3622
+ def _parse_portal_project_repos(
3623
+ raw: Any, repo_names: set[str] | None
3624
+ ) -> list[PortalProjectRepo]:
3625
+ """Parse ``portal.project_repos`` (ms-67 contract §2).
3626
+
3627
+ Rejects at LOAD, never at use — the same posture every other
3628
+ ``portal.*`` field takes, and the reason
3629
+ :meth:`PortalConfig.repos_for_project` can promise never to raise.
3630
+ """
3631
+ if raw is None:
3632
+ return []
3633
+ if not isinstance(raw, list):
3634
+ raise ConfigError("portal.project_repos must be a list of mappings")
3635
+
3636
+ parsed: list[PortalProjectRepo] = []
3637
+ seen: set[str] = set()
3638
+ for i, entry in enumerate(raw):
3639
+ if not isinstance(entry, dict):
3640
+ raise ConfigError(f"portal.project_repos[{i}] must be a mapping")
3641
+ unknown = sorted(set(entry) - {"project_id", "repos"})
3642
+ if unknown:
3643
+ raise ConfigError(
3644
+ f"unknown portal.project_repos[{i}] option(s): {', '.join(unknown)} "
3645
+ "(valid: project_id, repos)"
3646
+ )
3647
+ project_id = entry.get("project_id")
3648
+ if not isinstance(project_id, str) or not project_id.strip():
3649
+ raise ConfigError(
3650
+ f"portal.project_repos[{i}].project_id must be a non-empty string"
3651
+ )
3652
+ project_id = project_id.strip()
3653
+ if project_id in seen:
3654
+ raise ConfigError(
3655
+ f"portal.project_repos has duplicate project_id {project_id!r}"
3656
+ )
3657
+ seen.add(project_id)
3658
+
3659
+ repos_raw = entry.get("repos")
3660
+ if (
3661
+ not isinstance(repos_raw, list)
3662
+ or not repos_raw
3663
+ or not all(isinstance(r, str) and r.strip() for r in repos_raw)
3664
+ ):
3665
+ raise ConfigError(
3666
+ f"portal.project_repos[{i}].repos must be a non-empty list of repo names"
3667
+ )
3668
+ repos = [r.strip() for r in repos_raw]
3669
+ if repo_names is not None:
3670
+ unknown_repos = [r for r in repos if r not in repo_names]
3671
+ if unknown_repos:
3672
+ raise ConfigError(
3673
+ f"portal.project_repos[{i}] ({project_id}) references unknown "
3674
+ f"repos: {unknown_repos}"
3675
+ )
3676
+ parsed.append(PortalProjectRepo(project_id=project_id, repos=repos))
3677
+ return parsed
3678
+
3679
+
3576
3680
  def _parse_providers(raw: Any) -> ProvidersConfig:
3577
3681
  """Parse the optional ``providers:`` block from coordinator.yml.
3578
3682
 
@@ -101,6 +101,34 @@ Wants=network-online.target
101
101
  [Service]
102
102
  Type=oneshot
103
103
  KillMode=process
104
+ # #2532: WITHOUT this line the tick inherits the systemd *user manager's*
105
+ # PATH (`/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:
106
+ # /usr/games:/usr/local/games:/snap/bin`), which does NOT contain
107
+ # `~/.cargo/bin` — and rustup installs `cargo` nowhere else. That matters
108
+ # because this tick launches `coord drive`, which runs the oracle-loop trust
109
+ # gate `coord acceptance record` IN-PROCESS on this host, which shells out to
110
+ # the repo's acceptance driver command. For claude-coordinator's `tui/**`
111
+ # route (and quadraui's, and every future cargo-based sealed suite) that
112
+ # command starts with `cargo`, so it exited 127 `cargo: not found` with EMPTY
113
+ # stdout. `coord.acceptance_drivers.run_driver` folds a non-zero exit into
114
+ # its result rather than raising, so zero parsed verdicts became
115
+ # `total=0/passed=0/green=false` and the board recorded a *false red* trust
116
+ # gate with an empty reason string — indistinguishable, from every operator
117
+ # surface, from the worker's code genuinely failing the sealed suite. It cost
118
+ # #2532 a full fix-round dispatch against a branch whose 22 acceptance tests
119
+ # were green the whole time.
120
+ #
121
+ # Ordering mirrors the sibling units on this same host that already got this
122
+ # right (deploy/coord-serve.service, deploy/coord-agent.service,
123
+ # deploy/coord-web-dist-build.service): the pinned `~/.coord-venv/bin` first
124
+ # so nothing can shadow the release that is driving the fleet, then
125
+ # `~/.cargo/bin`, then `~/.local/bin`. NO `.venv/bin` entry appears at all —
126
+ # the #1831 `unit_drift` health check flags any unit whose PATH puts an
127
+ # editable repo checkout ahead of `~/.local/bin` / `~/.coord-venv/bin`.
128
+ # Everything the user manager's default PATH carried (tmux, git, gh, and
129
+ # /snap/bin) is preserved below, so this is a strict superset of what the
130
+ # tick could reach before — nothing it currently finds can go missing.
131
+ Environment=PATH=%h/.coord-venv/bin:%h/.cargo/bin:%h/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
104
132
  # --max-parallel 4 (#2012, raised from 3 in #2057) — the global ceiling,
105
133
  # ONE SLOT PER REPO IN THE FLEET: claude-coordinator, quadraui, vimcode,
106
134
  # coord-portal. It was 3 because the fleet had three repos when #2012 set
@@ -206,6 +206,34 @@ def unhandled_events(limit: int = 100) -> list[PortalEvent]:
206
206
  return [_event_from_row(r) for r in rows]
207
207
 
208
208
 
209
+ def signoff_events() -> list[PortalEvent]:
210
+ """Every sign-off event in the inbox, **oldest first** (#2532).
211
+
212
+ Deliberately unfiltered by ``handled_at``: an ``approved`` verdict is
213
+ never marked handled by anything today (see :func:`coord.portal_sync.
214
+ _consume_verdicts` — it advances its own watermark past one without
215
+ claiming it), so a ``handled_at IS NULL`` filter would be a no-op that
216
+ silently becomes wrong the day #2509 decides to consume them.
217
+
218
+ Oldest-first is what makes "the LATEST verdict wins" a plain
219
+ last-write-wins fold in the caller: a submission approved and then
220
+ walked back with ``changes_requested`` must not still read as approved.
221
+
222
+ Matching is on ``kind`` alone (``signoff`` / ``signoff.*``) — the same
223
+ prefix test :func:`coord.portal_sync._signoff_verdict` applies before it
224
+ looks at the payload — so this stays a cheap indexed-ish scan and the
225
+ verdict-shape guesswork lives in exactly one place.
226
+ """
227
+ rows = _conn().execute(
228
+ """
229
+ SELECT * FROM portal_events
230
+ WHERE kind = 'signoff' OR kind LIKE 'signoff.%'
231
+ ORDER BY received_at ASC, rowid ASC
232
+ """
233
+ ).fetchall()
234
+ return [_event_from_row(r) for r in rows]
235
+
236
+
209
237
  def events_after_verdict_watermark(
210
238
  received_at: float, rowid: int, *, limit: int = 100
211
239
  ) -> list[tuple[int, PortalEvent]]:
@@ -4100,6 +4100,23 @@ def build_app(store: CoordStore, config: Config, *, token: str | None = None) ->
4100
4100
  # key is structurally unreachable from any of them — see
4101
4101
  # tests/test_health_advisory_only.py.
4102
4102
  projection["fleet_health"] = _fleet_health_refresher.snapshot().to_dict()
4103
+ # #2532 (ms-67 contract §5): portal submissions the client has
4104
+ # signed off on and that are waiting to be decomposed into
4105
+ # coordinator work. Computed HERE, on the daemon host, because
4106
+ # the portal bridge's SQLite tables are canonical only here
4107
+ # (coord/portal_store.py's module doc) and the `repos` column is
4108
+ # resolved from `coordinator.yml` (#2531's project↔repo map),
4109
+ # which a thin client never reads (#2336). Same fail-open,
4110
+ # sibling-key posture as `fleet_health` above: an empty list is a
4111
+ # legitimate answer ("nothing approved yet"), so no error here
4112
+ # may 503 the board or blank an otherwise-good projection.
4113
+ try:
4114
+ from coord.approved_work import ( # noqa: PLC0415
4115
+ approved_submissions as _approved_submissions,
4116
+ )
4117
+ projection["approved_submissions"] = _approved_submissions(_cfg)
4118
+ except Exception: # noqa: BLE001 — advisory panel, never fatal
4119
+ projection["approved_submissions"] = []
4103
4120
  try:
4104
4121
  from coord import merge_queue as _mq # noqa: PLC0415
4105
4122
  from coord.state import build_board as _build_board # noqa: PLC0415
@@ -101,6 +101,34 @@ Wants=network-online.target
101
101
  [Service]
102
102
  Type=oneshot
103
103
  KillMode=process
104
+ # #2532: WITHOUT this line the tick inherits the systemd *user manager's*
105
+ # PATH (`/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:
106
+ # /usr/games:/usr/local/games:/snap/bin`), which does NOT contain
107
+ # `~/.cargo/bin` — and rustup installs `cargo` nowhere else. That matters
108
+ # because this tick launches `coord drive`, which runs the oracle-loop trust
109
+ # gate `coord acceptance record` IN-PROCESS on this host, which shells out to
110
+ # the repo's acceptance driver command. For claude-coordinator's `tui/**`
111
+ # route (and quadraui's, and every future cargo-based sealed suite) that
112
+ # command starts with `cargo`, so it exited 127 `cargo: not found` with EMPTY
113
+ # stdout. `coord.acceptance_drivers.run_driver` folds a non-zero exit into
114
+ # its result rather than raising, so zero parsed verdicts became
115
+ # `total=0/passed=0/green=false` and the board recorded a *false red* trust
116
+ # gate with an empty reason string — indistinguishable, from every operator
117
+ # surface, from the worker's code genuinely failing the sealed suite. It cost
118
+ # #2532 a full fix-round dispatch against a branch whose 22 acceptance tests
119
+ # were green the whole time.
120
+ #
121
+ # Ordering mirrors the sibling units on this same host that already got this
122
+ # right (deploy/coord-serve.service, deploy/coord-agent.service,
123
+ # deploy/coord-web-dist-build.service): the pinned `~/.coord-venv/bin` first
124
+ # so nothing can shadow the release that is driving the fleet, then
125
+ # `~/.cargo/bin`, then `~/.local/bin`. NO `.venv/bin` entry appears at all —
126
+ # the #1831 `unit_drift` health check flags any unit whose PATH puts an
127
+ # editable repo checkout ahead of `~/.local/bin` / `~/.coord-venv/bin`.
128
+ # Everything the user manager's default PATH carried (tmux, git, gh, and
129
+ # /snap/bin) is preserved below, so this is a strict superset of what the
130
+ # tick could reach before — nothing it currently finds can go missing.
131
+ Environment=PATH=%h/.coord-venv/bin:%h/.cargo/bin:%h/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
104
132
  # --max-parallel 4 (#2012, raised from 3 in #2057) — the global ceiling,
105
133
  # ONE SLOT PER REPO IN THE FLEET: claude-coordinator, quadraui, vimcode,
106
134
  # coord-portal. It was 3 because the fleet had three repos when #2012 set