code-coordinator 0.5.227__tar.gz → 0.5.229__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.227 → code_coordinator-0.5.229}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/code_coordinator.egg-info/scm_version.json +2 -2
  4. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/block_log.py +192 -1
  5. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/commands/drive_queue.py +136 -6
  6. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/conflict_fix.py +295 -1
  7. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/models.py +10 -0
  8. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/notify.py +73 -39
  9. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/docs/AGENT_OPERATIONS.md +51 -0
  10. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_block_log.py +113 -0
  11. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_drive_queue.py +165 -1
  12. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_conflict_fix.py +354 -1
  13. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_stalled_pipeline.py +109 -3
  14. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/.claude/commands/board.md +0 -0
  15. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/.claude/commands/complete-session.md +0 -0
  16. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/.claude/commands/coordinator.md +0 -0
  17. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/.githooks/_lib.sh +0 -0
  18. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/.githooks/post-checkout +0 -0
  19. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/.githooks/post-commit +0 -0
  20. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/.githooks/post-merge +0 -0
  21. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  22. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/.github/coord-ci-acceptance.yml +0 -0
  23. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/.github/workflows/auto-release.yml +0 -0
  24. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/.github/workflows/cargo-test.yml +0 -0
  25. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/.github/workflows/publish.yml +0 -0
  26. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/.github/workflows/release-tui.yml +0 -0
  27. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/.github/workflows/test.yml +0 -0
  28. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/.gitignore +0 -0
  29. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/CLAUDE.md +0 -0
  30. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/GOAL.md +0 -0
  31. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/LICENSE +0 -0
  32. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/MANIFEST.in +0 -0
  33. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/README.md +0 -0
  34. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/code_coordinator.egg-info/SOURCES.txt +0 -0
  35. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/code_coordinator.egg-info/dependency_links.txt +0 -0
  36. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/code_coordinator.egg-info/entry_points.txt +0 -0
  37. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/code_coordinator.egg-info/requires.txt +0 -0
  38. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/code_coordinator.egg-info/scm_file_list.json +0 -0
  39. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/code_coordinator.egg-info/top_level.txt +0 -0
  40. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/__init__.py +0 -0
  41. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/_board_mapping.py +0 -0
  42. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/acceptance.py +0 -0
  43. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/acceptance_drivers.py +0 -0
  44. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/agent.py +0 -0
  45. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/agent_app.py +0 -0
  46. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/agent_update.py +0 -0
  47. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/agents/opencode/.gitignore +0 -0
  48. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/agents/opencode/agents/work.md +0 -0
  49. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/agents/opencode/routing.jsonc +0 -0
  50. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/approved_work.py +0 -0
  51. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/audit.py +0 -0
  52. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/auto_loop.py +0 -0
  53. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/board_bool_guard.py +0 -0
  54. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/board_service.py +0 -0
  55. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/board_wire.py +0 -0
  56. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/brain.py +0 -0
  57. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/branch_model.py +0 -0
  58. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/bug_intake.py +0 -0
  59. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/cargo_cache.py +0 -0
  60. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/ci_fix.py +0 -0
  61. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/ci_github.py +0 -0
  62. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/ci_gitlab.py +0 -0
  63. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/ci_store.py +0 -0
  64. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/claim.py +0 -0
  65. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/cli.py +0 -0
  66. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/client.py +0 -0
  67. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/commands/__init__.py +0 -0
  68. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/commands/_common.py +0 -0
  69. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/commands/acceptance.py +0 -0
  70. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/commands/agent_ops.py +0 -0
  71. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/commands/audit.py +0 -0
  72. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/commands/chat.py +0 -0
  73. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/commands/dispatch.py +0 -0
  74. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/commands/dispatch_workers.py +0 -0
  75. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/commands/drive.py +0 -0
  76. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/commands/gate_a.py +0 -0
  77. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/commands/gates.py +0 -0
  78. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/commands/issues.py +0 -0
  79. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/commands/lifecycle.py +0 -0
  80. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/commands/merge.py +0 -0
  81. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/commands/milestone.py +0 -0
  82. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/commands/plan_followup.py +0 -0
  83. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/commands/plans.py +0 -0
  84. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/commands/portal.py +0 -0
  85. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/commands/release.py +0 -0
  86. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/commands/repo.py +0 -0
  87. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/commands/report.py +0 -0
  88. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/commands/review.py +0 -0
  89. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/commands/scorecard.py +0 -0
  90. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/commands/sessions.py +0 -0
  91. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/commands/setup.py +0 -0
  92. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/commands/status.py +0 -0
  93. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/commands/terminal.py +0 -0
  94. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/commands/test_gate.py +0 -0
  95. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/commands/tui.py +0 -0
  96. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/comments.py +0 -0
  97. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/config.py +0 -0
  98. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/config_reload.py +0 -0
  99. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/confirm_test.py +0 -0
  100. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/dao.py +0 -0
  101. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/dashboard/__init__.py +0 -0
  102. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/dashboard/fixture.py +0 -0
  103. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/dashboard/index.html +0 -0
  104. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/dashboard/server.py +0 -0
  105. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/dashboard/terminal.py +0 -0
  106. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/db.py +0 -0
  107. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/dead_end.py +0 -0
  108. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/deploy/README.md +0 -0
  109. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/deploy/coord-agent.service +0 -0
  110. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/deploy/coord-db-backup.service +0 -0
  111. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/deploy/coord-db-backup.sh +0 -0
  112. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/deploy/coord-db-backup.timer +0 -0
  113. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/deploy/coord-drive-queue.service +0 -0
  114. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/deploy/coord-drive-queue.timer +0 -0
  115. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/deploy/coord-notify.service +0 -0
  116. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/deploy/coord-notify.timer +0 -0
  117. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/deploy/coord-release-propagate.service +0 -0
  118. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/deploy/coord-release-propagate.timer +0 -0
  119. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/deploy/coord-release-window.service +0 -0
  120. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/deploy/coord-release-window.timer +0 -0
  121. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/deploy/coord-serve.service +0 -0
  122. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/deploy/coord-web-dist-build.service +0 -0
  123. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/deploy/coord-web-dist-build.timer +0 -0
  124. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/deploy/coord-web.service +0 -0
  125. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/deploy_manifest.py +0 -0
  126. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/deploy_units.py +0 -0
  127. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/deps.py +0 -0
  128. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/diagnose.py +0 -0
  129. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/dispatch.py +0 -0
  130. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/dist_name.py +0 -0
  131. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/drive.py +0 -0
  132. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/drive_queue.py +0 -0
  133. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/drive_state.py +0 -0
  134. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/events.py +0 -0
  135. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/failure_class.py +0 -0
  136. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/filelock.py +0 -0
  137. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/fleet_config_health.py +0 -0
  138. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/forge_availability.py +0 -0
  139. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/freshness.py +0 -0
  140. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/gate_a.py +0 -0
  141. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/gate_b.py +0 -0
  142. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/gate_snapshot.py +0 -0
  143. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/gates.py +0 -0
  144. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/github_ops.py +0 -0
  145. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/goal.py +0 -0
  146. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/graph_health.py +0 -0
  147. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/health/__init__.py +0 -0
  148. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/health/aggregate.py +0 -0
  149. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/health/checks/__init__.py +0 -0
  150. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/health/checks/agent_install.py +0 -0
  151. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/health/checks/cargo_targets.py +0 -0
  152. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/health/checks/claude_binary.py +0 -0
  153. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/health/checks/coord_web_ci_pin.py +0 -0
  154. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/health/checks/deploy_lane_facts.py +0 -0
  155. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/health/checks/disk.py +0 -0
  156. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/health/checks/fleet_board.py +0 -0
  157. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  158. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/health/checks/fleet_phantom.py +0 -0
  159. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/health/checks/fleet_unit_drift.py +0 -0
  160. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/health/checks/graph.py +0 -0
  161. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/health/checks/graphify_cli.py +0 -0
  162. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/health/checks/index_lock.py +0 -0
  163. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/health/checks/plan_usage.py +0 -0
  164. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/health/checks/repo_state.py +0 -0
  165. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/health/checks/spawned_coord.py +0 -0
  166. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/health/checks/timer_active.py +0 -0
  167. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/health/checks/toolchain.py +0 -0
  168. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/health/checks/unit_drift.py +0 -0
  169. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/health/checks/unit_enablement.py +0 -0
  170. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/health/checks/worktrees.py +0 -0
  171. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/health/cli.py +0 -0
  172. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/health/context.py +0 -0
  173. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/health/fleet_snapshot.py +0 -0
  174. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/health/models.py +0 -0
  175. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/health/pypi.py +0 -0
  176. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/health/registry.py +0 -0
  177. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/health/render.py +0 -0
  178. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/health/units.py +0 -0
  179. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/hooks.py +0 -0
  180. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/housekeeping.py +0 -0
  181. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/interactive.py +0 -0
  182. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/issue_store.py +0 -0
  183. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/liveness_auditor.py +0 -0
  184. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/machine_pause.py +0 -0
  185. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/merge_queue.py +0 -0
  186. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/milestone_chat.py +0 -0
  187. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/milestone_dispatch.py +0 -0
  188. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/milestone_gate.py +0 -0
  189. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/milestone_order.py +0 -0
  190. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/mock_author.py +0 -0
  191. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/network.py +0 -0
  192. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/new_issue_chat.py +0 -0
  193. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/notifier/__init__.py +0 -0
  194. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/notifier/baseline.py +0 -0
  195. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/notifier/cli.py +0 -0
  196. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/notifier/collect.py +0 -0
  197. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/notifier/digest.py +0 -0
  198. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/notifier/models.py +0 -0
  199. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/notifier/predicate.py +0 -0
  200. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/notifier/service.py +0 -0
  201. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/notifier/store.py +0 -0
  202. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/notifier/transport.py +0 -0
  203. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/openapi.py +0 -0
  204. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/overlap_fence.py +0 -0
  205. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/overlap_predict.py +0 -0
  206. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/parentage.py +0 -0
  207. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/parentage_github.py +0 -0
  208. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/pipeline.py +0 -0
  209. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/plan_parser.py +0 -0
  210. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/plans.py +0 -0
  211. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/platform_paths.py +0 -0
  212. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/portal_bridge.py +0 -0
  213. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/portal_store.py +0 -0
  214. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/portal_sync.py +0 -0
  215. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/pr_body_lint.py +0 -0
  216. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/prereqs.py +0 -0
  217. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/progress.py +0 -0
  218. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/providers/__init__.py +0 -0
  219. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/providers/base.py +0 -0
  220. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/providers/claude.py +0 -0
  221. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/providers/claude_pty.py +0 -0
  222. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/providers/opencode.py +0 -0
  223. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/queue_diagnose.py +0 -0
  224. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/reconcile.py +0 -0
  225. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/reconcile_tick.py +0 -0
  226. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/refine_chat.py +0 -0
  227. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/release_cordon.py +0 -0
  228. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/release_propagate.py +0 -0
  229. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/release_verify.py +0 -0
  230. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/release_window.py +0 -0
  231. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/repo_edit.py +0 -0
  232. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/repo_onboard.py +0 -0
  233. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/reports.py +0 -0
  234. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/revalidate.py +0 -0
  235. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/review.py +0 -0
  236. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/scorecard.py +0 -0
  237. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/self_health.py +0 -0
  238. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/serve_app.py +0 -0
  239. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  240. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  241. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  242. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  243. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  244. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/skills/portal-followup/SKILL.md +0 -0
  245. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  246. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  247. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/skills/update-issue/SKILL.md +0 -0
  248. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/smoke.py +0 -0
  249. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/spend_ceiling.py +0 -0
  250. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/split_work.py +0 -0
  251. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/stage_projection.py +0 -0
  252. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/state.py +0 -0
  253. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/test_author.py +0 -0
  254. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/test_chat.py +0 -0
  255. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/test_orchestrator.py +0 -0
  256. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/test_report.py +0 -0
  257. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/tui_release.py +0 -0
  258. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/usage.py +0 -0
  259. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/usage_limits.py +0 -0
  260. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/usage_rollup.py +0 -0
  261. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/worker_events.py +0 -0
  262. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coordinator.example.yml +0 -0
  263. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/deploy/coord-agent.service +0 -0
  264. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/deploy/coord-db-backup.service +0 -0
  265. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/deploy/coord-db-backup.sh +0 -0
  266. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/deploy/coord-db-backup.timer +0 -0
  267. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/deploy/coord-drive-queue.service +0 -0
  268. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/deploy/coord-drive-queue.timer +0 -0
  269. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/deploy/coord-notify.service +0 -0
  270. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/deploy/coord-notify.timer +0 -0
  271. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/deploy/coord-release-propagate.service +0 -0
  272. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/deploy/coord-release-propagate.timer +0 -0
  273. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/deploy/coord-release-window.service +0 -0
  274. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/deploy/coord-release-window.timer +0 -0
  275. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/deploy/coord-serve.service +0 -0
  276. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/deploy/coord-web-dist-build.service +0 -0
  277. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/deploy/coord-web-dist-build.sh +0 -0
  278. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/deploy/coord-web-dist-build.timer +0 -0
  279. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/deploy/coord-web-rollback.sh +0 -0
  280. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/deploy/coord-web.service +0 -0
  281. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/deploy/node-shim.sh +0 -0
  282. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  283. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/docs/ADR_COORD_WEB_CI.md +0 -0
  284. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/docs/ADR_COORD_WEB_DIST.md +0 -0
  285. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/docs/ARCHITECTURE.md +0 -0
  286. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/docs/ARCH_SECURITY_GATES.md +0 -0
  287. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/docs/COCKPIT.md +0 -0
  288. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/docs/CONTROL_CENTER.md +0 -0
  289. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/docs/COST_DISCIPLINE.md +0 -0
  290. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/docs/CROSS_PLATFORM.md +0 -0
  291. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/docs/CUSTOMER_PORTAL.md +0 -0
  292. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/docs/DRIVE_QUEUE.md +0 -0
  293. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/docs/EPHEMERAL_WORKERS.md +0 -0
  294. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/docs/FORGE_MIGRATION.md +0 -0
  295. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/docs/GRAPHIFY_SETUP.md +0 -0
  296. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/docs/ISSUE_GUIDANCE.md +0 -0
  297. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/docs/MAC_MINI.md +0 -0
  298. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  299. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/docs/NOTIFIER.md +0 -0
  300. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/docs/OPENCODE_VERIFICATION.md +0 -0
  301. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/docs/OPERATING_GOTCHAS.md +0 -0
  302. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/docs/ORACLE_LOOP.md +0 -0
  303. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/docs/PHONE_WEBAPP.md +0 -0
  304. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/docs/PIPELINE_V2.md +0 -0
  305. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/docs/PLATFORM_EVOLUTION.md +0 -0
  306. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/docs/SECOND_BACKEND.md +0 -0
  307. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/docs/STORE_SERVICE.md +0 -0
  308. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  309. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/docs/WEB_CONTROL_CENTER.md +0 -0
  310. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/docs/WSL_WINDOWS_WORKER.md +0 -0
  311. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/docs/mocks/web/README.md +0 -0
  312. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/docs/mocks/web/_tokens.css +0 -0
  313. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/docs/mocks/web/issue-detail.html +0 -0
  314. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/docs/mocks/web/pipeline-narrow.html +0 -0
  315. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/docs/mocks/web/pipeline-wide.html +0 -0
  316. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/graphify-out/.gitignore +0 -0
  317. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/install-agent.sh +0 -0
  318. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/pyproject.toml +0 -0
  319. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/scripts/audit_review_verdict_overrides.py +0 -0
  320. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  321. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/scripts/azure-workers/build-worker-image.sh +0 -0
  322. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/scripts/azure-workers/coordinator-machine.py +0 -0
  323. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/scripts/azure-workers/epic-down.sh +0 -0
  324. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/scripts/azure-workers/epic-up.sh +0 -0
  325. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/scripts/azure-workers/preflight.sh +0 -0
  326. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/scripts/azure-workers/provision-worker.sh +0 -0
  327. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  328. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  329. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/scripts/azure-workers/verify-github-token.sh +0 -0
  330. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/scripts/check_gh_argv_containment.py +0 -0
  331. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/scripts/codegen.py +0 -0
  332. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/scripts/coord-test-runner.sh +0 -0
  333. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/scripts/drive-batch.sh +0 -0
  334. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/scripts/gen_board_fixture.py +0 -0
  335. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/scripts/gen_mock_index.py +0 -0
  336. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/scripts/next_release_tag.py +0 -0
  337. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/scripts/run_tests_in_populated_home.sh +0 -0
  338. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/scripts/run_tests_without_gh.sh +0 -0
  339. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/scripts/smoke_437_interactive.py +0 -0
  340. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/scripts/verify_878_review_capture.py +0 -0
  341. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/scripts/verify_release_published.py +0 -0
  342. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/scripts/verify_release_wheel.py +0 -0
  343. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/setup.cfg +0 -0
  344. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/SMOKE_SET.md +0 -0
  345. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/__init__.py +0 -0
  346. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  347. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-33/contract.md +0 -0
  348. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-33/manifest.yml +0 -0
  349. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  350. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  351. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  352. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  353. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-37/conftest.py +0 -0
  354. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-37/contract.md +0 -0
  355. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-37/manifest.yml +0 -0
  356. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  357. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  358. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-38/contract.md +0 -0
  359. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-38/manifest.yml +0 -0
  360. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  361. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  362. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  363. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  364. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  365. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  366. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  367. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  368. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  369. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  370. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-51/contract.md +0 -0
  371. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  372. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  373. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-51/manifest.yml +0 -0
  374. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  375. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-51/tsconfig.json +0 -0
  376. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-65/board_split_2288.rs +0 -0
  377. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
  378. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
  379. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-65/contract.md +0 -0
  380. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
  381. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-65/manifest.yml +0 -0
  382. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
  383. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
  384. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
  385. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
  386. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
  387. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
  388. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
  389. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
  390. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
  391. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
  392. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-65/tabs_persistence_2286.rs +0 -0
  393. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-67/approved_items_2532.rs +0 -0
  394. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-67/contract.md +0 -0
  395. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-67/manifest.yml +0 -0
  396. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-67/mocks/approved-items-chat-opened.screen +0 -0
  397. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-67/mocks/approved-items-context-menu.screen +0 -0
  398. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-67/mocks/approved-items-detail.screen +0 -0
  399. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-67/mocks/approved-items-empty.screen +0 -0
  400. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-67/mocks/approved-items-populated.screen +0 -0
  401. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  402. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/conftest.py +0 -0
  403. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/fixtures/board-pipeline-basic.json +0 -0
  404. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  405. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  406. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  407. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  408. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/fixtures/playwright/all_pass.json +0 -0
  409. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  410. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/fixtures/playwright/mixed_fail.json +0 -0
  411. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  412. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  413. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/fixtures/playwright/skip.json +0 -0
  414. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/fixtures/playwright/truncated.json +0 -0
  415. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  416. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  417. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  418. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  419. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  420. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  421. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  422. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  423. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_acceptance.py +0 -0
  424. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_acceptance_drivers.py +0 -0
  425. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_agent.py +0 -0
  426. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_agent_api_error.py +0 -0
  427. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_agent_app.py +0 -0
  428. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_agent_branch_base.py +0 -0
  429. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_agent_branch_capture.py +0 -0
  430. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_agent_config_free_1712.py +0 -0
  431. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_agent_deploy_units_endpoint.py +0 -0
  432. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_agent_dirty_worktree.py +0 -0
  433. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  434. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_agent_graph_self_heal.py +0 -0
  435. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_agent_health_h3.py +0 -0
  436. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_agent_idle_restart.py +0 -0
  437. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_agent_push_failure.py +0 -0
  438. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_agent_reap.py +0 -0
  439. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_agent_repos_and_pull.py +0 -0
  440. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_agent_restart_services_endpoint.py +0 -0
  441. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_agent_skills_self_heal.py +0 -0
  442. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_agent_startup_diagnostics.py +0 -0
  443. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_agent_update.py +0 -0
  444. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_agent_update_bluegreen.py +0 -0
  445. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_agent_usage_limit.py +0 -0
  446. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_agent_zero_commit.py +0 -0
  447. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_ambient_home_isolation.py +0 -0
  448. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_approve_reject_plan.py +0 -0
  449. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_approve_usage_gate.py +0 -0
  450. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_approved_work_2532.py +0 -0
  451. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_assignment_already_recorded_daemon.py +0 -0
  452. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_audit_log.py +0 -0
  453. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_audit_outcome.py +0 -0
  454. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_audit_query.py +0 -0
  455. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_auto_loop.py +0 -0
  456. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_auto_release_publish_2035.py +0 -0
  457. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_base_checkout_restore.py +0 -0
  458. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_board_cap_762.py +0 -0
  459. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_board_fixture.py +0 -0
  460. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_board_read_path.py +0 -0
  461. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_board_service.py +0 -0
  462. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_board_state.py +0 -0
  463. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_board_wire.py +0 -0
  464. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_brain.py +0 -0
  465. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_branch_model.py +0 -0
  466. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_bug_intake.py +0 -0
  467. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_build_worker_image_env_update.py +0 -0
  468. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cargo_cache.py +0 -0
  469. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_check_gh_argv_containment.py +0 -0
  470. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_ci_acceptance_gate_1950.py +0 -0
  471. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_ci_fix.py +0 -0
  472. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_ci_gitlab.py +0 -0
  473. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_ci_parity_2091.py +0 -0
  474. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_ci_store.py +0 -0
  475. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_claim.py +0 -0
  476. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_acceptance.py +0 -0
  477. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_assign.py +0 -0
  478. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  479. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_assign_interactive_remote.py +0 -0
  480. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_assign_provider.py +0 -0
  481. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  482. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_audit.py +0 -0
  483. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_chat_continue.py +0 -0
  484. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_decide.py +0 -0
  485. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_diagnose_config_provenance.py +0 -0
  486. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_diagnose_forge_availability.py +0 -0
  487. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_diagnose_graph.py +0 -0
  488. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_diagnose_self.py +0 -0
  489. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_doctor.py +0 -0
  490. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_doctor_config_free_1801.py +0 -0
  491. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  492. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_drive.py +0 -0
  493. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_escalate.py +0 -0
  494. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_fix_headless_review.py +0 -0
  495. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_gate_a.py +0 -0
  496. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_install_drift.py +0 -0
  497. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_install_skills.py +0 -0
  498. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_issue_create_label.py +0 -0
  499. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_issue_reopen.py +0 -0
  500. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_merge.py +0 -0
  501. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_milestone_assign.py +0 -0
  502. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_milestone_capture.py +0 -0
  503. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_milestone_chat_add_child.py +0 -0
  504. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_milestone_dispatch.py +0 -0
  505. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_milestone_gate_b.py +0 -0
  506. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_milestone_gate_c.py +0 -0
  507. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_milestone_order.py +0 -0
  508. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  509. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_milestone_ship.py +0 -0
  510. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_network.py +0 -0
  511. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_new_issue_chat.py +0 -0
  512. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_plans.py +0 -0
  513. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_portal.py +0 -0
  514. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_pull_artifact.py +0 -0
  515. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_queue.py +0 -0
  516. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_reattach_sessions.py +0 -0
  517. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_refine_board.py +0 -0
  518. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_release_preflight.py +0 -0
  519. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_release_propagate.py +0 -0
  520. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_release_window.py +0 -0
  521. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_repo_2220.py +0 -0
  522. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_scorecard.py +0 -0
  523. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_set_review_findings.py +0 -0
  524. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_status_advisory_terminal.py +0 -0
  525. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_status_merge_queue.py +0 -0
  526. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_status_provider.py +0 -0
  527. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_status_review_finalizing.py +0 -0
  528. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_status_test_failed_tag.py +0 -0
  529. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_status_usage_limit.py +0 -0
  530. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_sync_comments_873.py +0 -0
  531. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_test_plan.py +0 -0
  532. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_track.py +0 -0
  533. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_tui_update.py +0 -0
  534. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_wait.py +0 -0
  535. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_client_base_install.py +0 -0
  536. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_comments.py +0 -0
  537. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_completion_summary.py +0 -0
  538. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_config.py +0 -0
  539. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_config_acceptance.py +0 -0
  540. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_config_audit.py +0 -0
  541. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_config_pricing.py +0 -0
  542. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  543. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_config_usage_gate.py +0 -0
  544. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_confirm_test.py +0 -0
  545. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_conflict_fix_semantic.py +0 -0
  546. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_coord_test.py +0 -0
  547. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_coord_test_runner_baseline.py +0 -0
  548. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_coord_test_runner_populated_home.py +0 -0
  549. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_coord_test_runner_routing.py +0 -0
  550. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_coord_test_runner_toolchain.py +0 -0
  551. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_coord_web_sse_restart_live.py +0 -0
  552. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_coordinator_machine.py +0 -0
  553. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cross_platform_imports.py +0 -0
  554. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_dashboard.py +0 -0
  555. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_dashboard_fixture.py +0 -0
  556. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_dashboard_terminal.py +0 -0
  557. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_dashboard_terminal_live.py +0 -0
  558. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_db.py +0 -0
  559. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_dead_end.py +0 -0
  560. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_deploy_coord_db_backup.py +0 -0
  561. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_deploy_coord_web_dist.py +0 -0
  562. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_deploy_coord_web_rollback.py +0 -0
  563. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_deploy_drive_queue_unit.py +0 -0
  564. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_deploy_manifest.py +0 -0
  565. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_deploy_notify_unit.py +0 -0
  566. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_deploy_units_lane.py +0 -0
  567. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_deploy_web_unit.py +0 -0
  568. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_deps.py +0 -0
  569. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_diagnose.py +0 -0
  570. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_dispatch.py +0 -0
  571. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_dispatch_target_validation.py +0 -0
  572. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_dist_name.py +0 -0
  573. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_done_housekeeping.py +0 -0
  574. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_drive.py +0 -0
  575. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_drive_queue.py +0 -0
  576. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_drive_state.py +0 -0
  577. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_drive_tmux.py +0 -0
  578. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_epic_up_capability_detection.py +0 -0
  579. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  580. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_epic_up_image_provenance.py +0 -0
  581. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_errors.py +0 -0
  582. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_events.py +0 -0
  583. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_failure_class.py +0 -0
  584. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_filelock.py +0 -0
  585. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  586. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_fix_of_force_override.py +0 -0
  587. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_fleet_config_health.py +0 -0
  588. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_fleet_health_probes.py +0 -0
  589. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_fleet_health_snapshot.py +0 -0
  590. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_forge_availability.py +0 -0
  591. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_freshness.py +0 -0
  592. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_gate_a.py +0 -0
  593. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_gate_b.py +0 -0
  594. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_gate_snapshot_staleness.py +0 -0
  595. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_gates.py +0 -0
  596. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  597. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_gen_mock_index.py +0 -0
  598. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_generated_types_fixture.py +0 -0
  599. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_github_ops.py +0 -0
  600. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_goal.py +0 -0
  601. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_graph_health.py +0 -0
  602. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_graph_selfheal_absent_2237.py +0 -0
  603. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_handoff.py +0 -0
  604. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_health_checks.py +0 -0
  605. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_health_cli.py +0 -0
  606. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_health_cli_graph.py +0 -0
  607. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_health_config.py +0 -0
  608. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_health_context.py +0 -0
  609. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_health_coord_web_ci_pin.py +0 -0
  610. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_health_deploy_lane_facts.py +0 -0
  611. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_health_incident_regression.py +0 -0
  612. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_health_pypi.py +0 -0
  613. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_health_registry.py +0 -0
  614. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_health_timer_active.py +0 -0
  615. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_health_toolchain.py +0 -0
  616. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_health_unit_drift.py +0 -0
  617. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_health_unit_enablement.py +0 -0
  618. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_hooks.py +0 -0
  619. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_human_attended_437.py +0 -0
  620. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_init.py +0 -0
  621. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_integration.py +0 -0
  622. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_interactive_briefing_echo.py +0 -0
  623. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_interactive_prefill_state.py +0 -0
  624. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_interactive_session_relaunch.py +0 -0
  625. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_interactive_test_verdict_backstop.py +0 -0
  626. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_interactive_token_attribution.py +0 -0
  627. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_interactive_worktree.py +0 -0
  628. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_issue_store_seam.py +0 -0
  629. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_liveness_auditor.py +0 -0
  630. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_liveness_notify.py +0 -0
  631. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_machine_pause.py +0 -0
  632. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_merge_queue.py +0 -0
  633. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_merge_verify.py +0 -0
  634. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_milestone_chat.py +0 -0
  635. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_milestone_dispatch.py +0 -0
  636. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_milestone_gate.py +0 -0
  637. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_milestone_order.py +0 -0
  638. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_milestone_seam.py +0 -0
  639. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_mock_author.py +0 -0
  640. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_model_tiering.py +0 -0
  641. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_models.py +0 -0
  642. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_models_config_labels.py +0 -0
  643. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_needs_attention.py +0 -0
  644. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_network.py +0 -0
  645. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_new_issue_chat.py +0 -0
  646. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_next_release_tag.py +0 -0
  647. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_node_shim.py +0 -0
  648. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_notifier_baseline.py +0 -0
  649. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_notifier_cli.py +0 -0
  650. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_notifier_collect.py +0 -0
  651. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_notifier_config.py +0 -0
  652. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_notifier_drive_seam.py +0 -0
  653. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_notifier_isolation.py +0 -0
  654. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_notifier_predicate.py +0 -0
  655. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_notifier_quiet_hours.py +0 -0
  656. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_notifier_service.py +0 -0
  657. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_notify.py +0 -0
  658. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_notify_drain.py +0 -0
  659. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_openapi.py +0 -0
  660. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_operational_defaults.py +0 -0
  661. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_overlap_fence.py +0 -0
  662. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_overlap_predict.py +0 -0
  663. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_packaged_deploy_units.py +0 -0
  664. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_parentage.py +0 -0
  665. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_paste_landed.py +0 -0
  666. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_pipeline.py +0 -0
  667. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_plan_followup_approve_plan_command.py +0 -0
  668. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_plan_followup_pr_command.py +0 -0
  669. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_plan_followup_review_command.py +0 -0
  670. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_plan_only.py +0 -0
  671. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_plan_parser.py +0 -0
  672. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_platform_paths.py +0 -0
  673. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_portal_bridge.py +0 -0
  674. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_portal_config.py +0 -0
  675. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_portal_store.py +0 -0
  676. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_portal_sync.py +0 -0
  677. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_pr_body_lint.py +0 -0
  678. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_prereqs.py +0 -0
  679. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_production_db_guard.py +0 -0
  680. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_progress.py +0 -0
  681. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_provider_seam.py +0 -0
  682. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_providers.py +0 -0
  683. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_providers_config_labels.py +0 -0
  684. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_providers_pty.py +0 -0
  685. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_quiet_hours.py +0 -0
  686. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_quiet_hours_store_2146.py +0 -0
  687. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_reap_merged_sessions.py +0 -0
  688. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_reap_stale_interactive_tick.py +0 -0
  689. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_reconcile.py +0 -0
  690. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_reconcile_branch.py +0 -0
  691. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_reconcile_completions.py +0 -0
  692. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_reconcile_merges.py +0 -0
  693. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_reconcile_no_agent_record.py +0 -0
  694. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_reconcile_tick.py +0 -0
  695. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_reconcile_usage_limit_done.py +0 -0
  696. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_refine_chat.py +0 -0
  697. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_release_cordon_2101.py +0 -0
  698. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  699. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_release_cordon_deadlock_2240.py +0 -0
  700. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_release_cordon_stuck_2490.py +0 -0
  701. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_release_propagate.py +0 -0
  702. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_release_unified_1242.py +0 -0
  703. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_release_verify.py +0 -0
  704. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_release_window.py +0 -0
  705. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_remote_auto_prune.py +0 -0
  706. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_remote_interactive_reaper.py +0 -0
  707. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_repo_edit_2220.py +0 -0
  708. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_repo_graph_fleet_2237.py +0 -0
  709. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_repo_onboard_2220.py +0 -0
  710. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_report_result_push.py +0 -0
  711. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_reports.py +0 -0
  712. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_retry.py +0 -0
  713. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_retry_advisory_1606.py +0 -0
  714. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_retry_type_1636.py +0 -0
  715. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_revalidate.py +0 -0
  716. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_review.py +0 -0
  717. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_review_end_review_without_verdict.py +0 -0
  718. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_review_parse_failure_diagnostic.py +0 -0
  719. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_review_reaffirm.py +0 -0
  720. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_review_state.py +0 -0
  721. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_review_verdict_backstop.py +0 -0
  722. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_review_verdict_override_audit.py +0 -0
  723. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_review_verdict_relay.py +0 -0
  724. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_review_zero_commits.py +0 -0
  725. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_scoped_review_wiring.py +0 -0
  726. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_scorecard.py +0 -0
  727. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_self_health.py +0 -0
  728. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_serve.py +0 -0
  729. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_serve_app_board_trim.py +0 -0
  730. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_session.py +0 -0
  731. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_slice_issue_attribution.py +0 -0
  732. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_smoke.py +0 -0
  733. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_smoke_live_checkout_restore.py +0 -0
  734. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_smoke_workflow.py +0 -0
  735. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_spend_ceiling.py +0 -0
  736. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_spend_ceiling_coordinator.py +0 -0
  737. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_split.py +0 -0
  738. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_split_work.py +0 -0
  739. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_stage_projection.py +0 -0
  740. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_state.py +0 -0
  741. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_state_review_findings_daemon.py +0 -0
  742. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_status_fleet_footer.py +0 -0
  743. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_stop_1567.py +0 -0
  744. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_stuck.py +0 -0
  745. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_terminal_command.py +0 -0
  746. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_test_author.py +0 -0
  747. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_test_chat.py +0 -0
  748. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_test_orchestrator.py +0 -0
  749. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_test_report.py +0 -0
  750. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_test_verdict_parsing.py +0 -0
  751. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_test_verdict_transcript_floor.py +0 -0
  752. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_thin_client_board_audit.py +0 -0
  753. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_thin_client_config_load_1080.py +0 -0
  754. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_thin_client_daemon_routing_906.py +0 -0
  755. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_tmux_host.py +0 -0
  756. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_tmux_session.py +0 -0
  757. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_transcript_floor.py +0 -0
  758. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_usage.py +0 -0
  759. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_usage_limits.py +0 -0
  760. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_usage_rollup.py +0 -0
  761. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_venv_live_install_2121.py +0 -0
  762. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_version_single_source.py +0 -0
  763. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_watch.py +0 -0
  764. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  765. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_worker_events.py +0 -0
  766. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_worker_image_pin_sync.py +0 -0
  767. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_worker_safety.py +0 -0
  768. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_worker_test_scoping.py +0 -0
  769. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_worktree.py +0 -0
  770. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  771. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/Cargo.lock +0 -0
  772. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/Cargo.toml +0 -0
  773. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/cargo-config-local-quadraui.toml.example +0 -0
  774. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/src/app/approved.rs +0 -0
  775. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/src/app/audit.rs +0 -0
  776. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/src/app/chat.rs +0 -0
  777. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/src/app/data.rs +0 -0
  778. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/src/app/dialogs.rs +0 -0
  779. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/src/app/doc_tabs.rs +0 -0
  780. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/src/app/drive.rs +0 -0
  781. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/src/app/drive_queue.rs +0 -0
  782. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/src/app/escalation.rs +0 -0
  783. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/src/app/events.rs +0 -0
  784. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/src/app/fixtures.rs +0 -0
  785. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/src/app/fleet_health.rs +0 -0
  786. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/src/app/fleet_sessions.rs +0 -0
  787. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/src/app/fleet_terminals.rs +0 -0
  788. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/src/app/format.rs +0 -0
  789. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/src/app/milestone_dag.rs +0 -0
  790. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/src/app/mod.rs +0 -0
  791. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/src/app/msv.rs +0 -0
  792. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/src/app/pipeline.rs +0 -0
  793. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/src/app/plans.rs +0 -0
  794. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/src/app/render.rs +0 -0
  795. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/src/app/reports.rs +0 -0
  796. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/src/app/sessions.rs +0 -0
  797. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/src/app/settings_ui.rs +0 -0
  798. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/src/app/sidebar.rs +0 -0
  799. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/src/app/terminal.rs +0 -0
  800. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/src/app/tests.rs +0 -0
  801. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/src/app/types.rs +0 -0
  802. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/src/app/workspace.rs +0 -0
  803. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/src/bin/gtk.rs +0 -0
  804. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/src/commands.rs +0 -0
  805. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/src/lib.rs +0 -0
  806. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/src/main.rs +0 -0
  807. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/src/settings.rs +0 -0
  808. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/tests/acceptance.rs +0 -0
  809. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/tests/cli.rs +0 -0
  810. {code_coordinator-0.5.227 → code_coordinator-0.5.229}/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.227
3
+ Version: 0.5.229
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.227
3
+ Version: 0.5.229
4
4
  Summary: Coordinate Claude Code workers across multiple machines and repos.
5
5
  Author-email: John Donaghy <johnfdonaghy@gmail.com>
6
6
  License-Expression: LicenseRef-FSL-1.1-MIT
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "0.5.227",
2
+ "tag": "0.5.229",
3
3
  "distance": 0,
4
- "node": "g4d72834d6806b7c52ef9e25a887a4ddd33fc5427",
4
+ "node": "gc425ec07e071d15ed23c72606aaa805685c13e0e",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-22"
@@ -35,6 +35,28 @@ cause later agreed with how the episode actually resolved
35
35
  one that abstains, which is why ``unknown`` is counted separately from
36
36
  ``disagreed`` and never folded into it.
37
37
 
38
+ **#2540 fills the column that neither Phase counts: operator effort that never
39
+ touched the queue's own command surface.** ``human_acted`` was, until #2540,
40
+ true only for the narrow set of releases the queue itself can attribute to a
41
+ person — an operator's ``remove``, a Gate-A sign-off. Real recovery routinely
42
+ happens elsewhere entirely: a manual git rebase and force-with-lease push, a
43
+ direct ``coord test``/``coord merge --only``/``coord pr``/``coord fix``
44
+ against the assignment underneath an entry, a ``systemctl``/``coord agent
45
+ update``/``coord diagnose --reset`` on the machine running it. None of that
46
+ is visible to a tick, so none of it was ever counted — a night of real manual
47
+ recovery could read as ``0 needed a human``, which is the exact failure this
48
+ module exists to prevent, just relocated one layer down. This module cannot
49
+ detect that kind of intervention after the fact (recording must not probe live
50
+ state — see above), so :func:`intervention_event` gives an operator a place to
51
+ say so, in real time or shortly after: ``coord drive-queue log-intervention``
52
+ appends a record that :func:`episodes` folds onto whichever episode was open
53
+ for that key, or — if it had already resolved by the time the operator got to
54
+ logging it — the most recently closed one. It flips ``human_acted`` to
55
+ ``True`` the same as an ``operator_resolution_event`` does, and is kept
56
+ separately visible (``intervention_categories``) so the report can still say
57
+ *how* it knows, rather than asserting a single flat "a human acted" with no
58
+ paper trail behind it.
59
+
38
60
  **Recording must never change a decision.** Every public entry point here is
39
61
  best-effort and swallows its own exceptions (:func:`record`), for the same
40
62
  reason :mod:`coord.audit` does: the tick's merge/dispatch/attempt accounting
@@ -95,7 +117,9 @@ __all__ = [
95
117
  "BY_DESIGN_CAUSES",
96
118
  "EVENT_DIAGNOSIS",
97
119
  "EVENT_ENTER",
120
+ "EVENT_INTERVENTION",
98
121
  "EVENT_RESOLVE",
122
+ "INTERVENTION_CATEGORIES",
99
123
  "OUTCOME_BUCKETS",
100
124
  "RESCUE_SOURCES",
101
125
  "STALL_STATES",
@@ -107,6 +131,7 @@ __all__ = [
107
131
  "episode_bucket",
108
132
  "episode_category",
109
133
  "episodes",
134
+ "intervention_event",
110
135
  "is_by_design",
111
136
  "log_location",
112
137
  "merge_only_event",
@@ -133,6 +158,11 @@ EVENT_RESOLVE = "resolve"
133
158
  #: no read-modify-write race, and a later diagnosis that contradicts an earlier
134
159
  #: one stays visible instead of overwriting it.
135
160
  EVENT_DIAGNOSIS = "diagnosis"
161
+ #: #2540. An operator saying, out of band, "I acted on this key" — the
162
+ #: durable record for intervention that never touches the drive-queue command
163
+ #: surface (`remove`/`resume`) and so was invisible to `human_acted` before
164
+ #: this. See `intervention_event` and the module docstring's #2540 section.
165
+ EVENT_INTERVENTION = "intervention"
136
166
 
137
167
  # Rotate at 4 MiB — comfortably more than two weeks at this fleet's rate
138
168
  # (single-digit stalls a night, ~400 bytes a record), and small enough that
@@ -615,6 +645,71 @@ def operator_resolution_event(
615
645
  return record
616
646
 
617
647
 
648
+ #: Documented common buckets for `coord drive-queue log-intervention
649
+ #: --category`. Deliberately NOT a closed enum enforced anywhere — same
650
+ #: reasoning as `episode_category`'s open vocabulary: a kind of intervention
651
+ #: this build has never named must still be recordable as itself, not
652
+ #: coerced into "other" and lost. This tuple exists purely so the CLI help
653
+ #: text and this module agree on the suggested starting set from #2540's own
654
+ #: evidence (a manual git rebase/conflict-resolution/force-push, a direct
655
+ #: `coord test`/`coord merge --only`/`coord pr`/`coord fix` against the
656
+ #: assignment, and infra-level recovery like `systemctl`/`coord agent
657
+ #: update`/`coord diagnose --reset`).
658
+ INTERVENTION_CATEGORIES: tuple[str, ...] = (
659
+ "git-recovery",
660
+ "cli-recheck",
661
+ "infra",
662
+ "other",
663
+ )
664
+
665
+
666
+ def intervention_event(
667
+ *,
668
+ key: str,
669
+ category: str,
670
+ note: str = "",
671
+ host: str = "",
672
+ now: float | None = None,
673
+ ) -> dict[str, Any]:
674
+ """A #2540 record: a human acted on *key* outside the queue's own commands.
675
+
676
+ The other half of #2235's metric that :func:`operator_resolution_event`
677
+ cannot reach. That function fires only from inside a command
678
+ (``remove``) that IS the resolution — a board mutation this process just
679
+ performed. A manual git rebase, a direct ``coord test``/``coord merge
680
+ --only``/``coord pr``/``coord fix``, or a ``systemctl``/``coord agent
681
+ update`` on the host underneath an entry are real operator effort that
682
+ touches none of this process's own write paths, so nothing here can see
683
+ them happen. What it CAN do is give the operator a place to say so —
684
+ this is that place, called from ``coord drive-queue log-intervention``.
685
+
686
+ Deliberately not a ``resolve``: unlike an operator's ``remove``, logging
687
+ an intervention does not by itself mean the stall is over — the entry may
688
+ still be blocked, may have already resolved by the time the operator gets
689
+ around to typing the command, or may resolve later still by an ordinary
690
+ auto mechanism. :func:`episodes` folds this onto whichever episode was
691
+ open for *key* at the time, or, failing that, the most recently closed
692
+ one — never inventing an episode, and never guessing at *why* the entry
693
+ was stalled, the same restraint :func:`operator_resolution_event` already
694
+ keeps.
695
+
696
+ *category* is free text, not validated against
697
+ :data:`INTERVENTION_CATEGORIES` — the same "open vocabulary, never
698
+ coerced" contract :func:`episode_category` documents. An empty string
699
+ normalises to ``"other"`` so the report always has something to show
700
+ rather than a blank category column.
701
+ """
702
+ return {
703
+ "event": EVENT_INTERVENTION,
704
+ "ts": time.time() if now is None else now,
705
+ "key": key,
706
+ "category": str(category or "other"),
707
+ "note": note,
708
+ "host": host,
709
+ "source": "operator",
710
+ }
711
+
712
+
618
713
  # ── #2276 Phase 1: the diagnosis record, and scoring it ──────────────────────
619
714
 
620
715
 
@@ -806,6 +901,60 @@ def read_events(
806
901
  # ── reading (pairing + summary) ──────────────────────────────────────────────
807
902
 
808
903
 
904
+ def _fold_intervention(
905
+ open_by_key: dict[str, dict[str, Any]],
906
+ out: list[dict[str, Any]],
907
+ key: str,
908
+ event: Mapping[str, Any],
909
+ ) -> None:
910
+ """Attach one #2540 ``intervention`` record to the episode it happened
911
+ during — mutating the episode dict in place, exactly like the
912
+ ``EVENT_DIAGNOSIS`` branch of :func:`episodes` does for ``true_cause``.
913
+
914
+ Preferred target is the OPEN episode for *key* — the common case, an
915
+ operator logging what they are doing while the entry is still stalled.
916
+ Failing that, the most recently CLOSED episode for *key* in *out*:
917
+ ``coord drive-queue log-intervention`` very often runs minutes AFTER the
918
+ fix already landed (the operator ran ``coord merge --only``, it worked,
919
+ then they typed the log line), and by then :func:`episodes` has already
920
+ popped that episode out of ``open_by_key``. Searched from the end of
921
+ ``out`` because that list is built in the same time order *events* is
922
+ iterated in, so the last match for *key* is the most recent past episode
923
+ — never an older one a later re-block would make ambiguous.
924
+
925
+ A *key* with no episode at all yet (logged before this host ever recorded
926
+ a stall for it) is dropped, the same convention an orphan ``resolve`` or
927
+ ``diagnosis`` already follows: there is nothing here to attach evidence
928
+ to, and it is better to say so (`coord drive-queue log-intervention`
929
+ warns) than to silently fabricate one.
930
+ """
931
+ episode = open_by_key.get(key)
932
+ if episode is None:
933
+ for candidate in reversed(out):
934
+ if candidate.get("key") == key:
935
+ episode = candidate
936
+ break
937
+ if episode is None:
938
+ return
939
+ category = str(event.get("category") or "other")
940
+ episode.setdefault("interventions", []).append(
941
+ {
942
+ "ts": float(event.get("ts") or 0.0),
943
+ "category": category,
944
+ "note": str(event.get("note") or ""),
945
+ "host": str(event.get("host") or ""),
946
+ }
947
+ )
948
+ categories = episode.setdefault("intervention_categories", [])
949
+ if category not in categories:
950
+ categories.append(category)
951
+ # The whole point: this is the signal `human_acted` was blind to before
952
+ # #2540. Set unconditionally, whether the episode is still open (the
953
+ # eventual `resolve` branch above ORs it back in rather than clobbering
954
+ # it) or already closed (there is no later write to clobber it).
955
+ episode["human_acted"] = True
956
+
957
+
809
958
  def episodes(events: Sequence[Mapping[str, Any]]) -> list[dict[str, Any]]:
810
959
  """Pair ``enter`` records with the ``resolve`` that closed them.
811
960
 
@@ -828,6 +977,16 @@ def episodes(events: Sequence[Mapping[str, Any]]) -> list[dict[str, Any]]:
828
977
  resolution's own account of what happened and the derived one is kept
829
978
  beside it as ``diagnosed_cause``, so ``agreement`` scores two independent
830
979
  claims rather than one claim against itself.
980
+
981
+ An ``intervention`` (#2540) folds onto an episode the same way — see
982
+ :func:`_fold_intervention` — except it targets a CLOSED episode too, not
983
+ only an open one: unlike a diagnosis, an operator very often logs an
984
+ intervention after the fact, once the fix they made by hand has already
985
+ let the entry auto-resolve. It sets ``human_acted`` true and appends to
986
+ ``intervention_categories``/``interventions`` without touching
987
+ ``true_cause`` — what mechanically flipped the state is still whatever
988
+ the resolution said; #2540 only means the record also captures that a
989
+ human was in the loop, in a way the pre-#2540 log could not see at all.
831
990
  """
832
991
  open_by_key: dict[str, dict[str, Any]] = {}
833
992
  out: list[dict[str, Any]] = []
@@ -866,7 +1025,13 @@ def episodes(events: Sequence[Mapping[str, Any]]) -> list[dict[str, Any]]:
866
1025
  "diagnosis_evidence": [],
867
1026
  "diagnosis_contradicts_stated": False,
868
1027
  "agreement": "",
1028
+ # #2540. Populated only by `intervention_event` records
1029
+ # folded on below — a fresh episode has neither.
1030
+ "interventions": [],
1031
+ "intervention_categories": [],
869
1032
  }
1033
+ elif kind == EVENT_INTERVENTION:
1034
+ _fold_intervention(open_by_key, out, key, event)
870
1035
  elif kind == EVENT_DIAGNOSIS:
871
1036
  episode = open_by_key.get(key)
872
1037
  if episode is None:
@@ -897,7 +1062,14 @@ def episodes(events: Sequence[Mapping[str, Any]]) -> list[dict[str, Any]]:
897
1062
  "resolved": True,
898
1063
  "resolution": event.get("resolution", ""),
899
1064
  "true_cause": resolution_cause,
900
- "human_acted": bool(event.get("human_acted")),
1065
+ # #2540: OR in whatever an earlier `intervention_event`
1066
+ # already set. Without the `or`, an ordinary auto
1067
+ # resolution's own `human_acted=False` would blindly
1068
+ # overwrite the `True` a logged intervention just
1069
+ # earned — exactly the undercount this issue is about,
1070
+ # relocated one line down instead of fixed.
1071
+ "human_acted": bool(event.get("human_acted"))
1072
+ or bool(episode.get("human_acted")),
901
1073
  "resolved_at": resolved_at,
902
1074
  "stalled_seconds": max(0.0, resolved_at - episode["entered_at"]),
903
1075
  "source": event.get("source", ""),
@@ -937,11 +1109,27 @@ def summarize(items: Sequence[Mapping[str, Any]]) -> dict[str, Any]:
937
1109
  counts the episodes where the live evidence positively ruled the queue's
938
1110
  stated reason out — the five-of-seven number, finally measured instead of
939
1111
  reconstructed by hand.
1112
+
1113
+ ``human_acted_logged`` (#2540) is the subset of ``human_acted`` this build
1114
+ can actually SHOW ITS WORK for: episodes carrying at least one
1115
+ ``coord drive-queue log-intervention`` record. The rest of ``human_acted``
1116
+ still comes from the pre-#2540 queue-command surface (an operator's
1117
+ ``remove``, a Gate-A sign-off) — real, but with no evidence trail beyond
1118
+ "the resolve record said so". Neither of those two is a claim that
1119
+ *nothing else* happened: a night with ``human_acted_logged == 0`` means
1120
+ no intervention was LOGGED, not that none occurred — this module still
1121
+ cannot see a git rebase or a direct ``coord test`` call that nobody typed
1122
+ the one extra command for. That is the honest limit of what an
1123
+ append-only log fed only by this process's own choke points can claim,
1124
+ and it is why the CLI help for ``log-intervention`` asks operators to run
1125
+ it as a matter of habit rather than treating the count as automatically
1126
+ complete.
940
1127
  """
941
1128
  by_state: dict[str, int] = {}
942
1129
  by_cause: dict[str, int] = {}
943
1130
  seen_pairs: dict[tuple[str, str], int] = {}
944
1131
  human = 0
1132
+ human_logged = 0
945
1133
  auto = 0
946
1134
  still_open = 0
947
1135
  diagnosed = 0
@@ -961,6 +1149,8 @@ def summarize(items: Sequence[Mapping[str, Any]]) -> dict[str, Any]:
961
1149
  still_open += 1
962
1150
  elif item.get("human_acted"):
963
1151
  human += 1
1152
+ if item.get("intervention_categories"):
1153
+ human_logged += 1
964
1154
  else:
965
1155
  auto += 1
966
1156
  cause = episode_category(item)
@@ -986,6 +1176,7 @@ def summarize(items: Sequence[Mapping[str, Any]]) -> dict[str, Any]:
986
1176
  "by_state": by_state,
987
1177
  "by_cause": by_cause,
988
1178
  "human_acted": human,
1179
+ "human_acted_logged": human_logged,
989
1180
  "auto_released": auto,
990
1181
  "open": still_open,
991
1182
  "repeat_causes": repeats,
@@ -38,7 +38,7 @@ from typing import Any, Mapping
38
38
 
39
39
  import click
40
40
 
41
- from coord.block_log import STALL_STATES
41
+ from coord.block_log import INTERVENTION_CATEGORIES, STALL_STATES
42
42
  from coord.commands._common import _CONFIG_OPTION
43
43
  from coord.drive_state import WORK_LIKE
44
44
  from coord.drive_queue import (
@@ -807,7 +807,7 @@ def _hold_lines(entry: QueueEntry) -> list[str]:
807
807
  # ── #2235 Phase 0 stall log ──────────────────────────────────────────────────
808
808
 
809
809
 
810
- def _record_block_log(events: list[dict[str, Any]]) -> None:
810
+ def _record_block_log(events: list[dict[str, Any]]) -> int:
811
811
  """Append #2235's Phase-0 stall records. Observability only.
812
812
 
813
813
  Best-effort by construction (:func:`coord.block_log.record` swallows its
@@ -817,12 +817,19 @@ def _record_block_log(events: list[dict[str, Any]]) -> None:
817
817
  dispatch or attempt-accounting decision, and the cheapest way to guarantee
818
818
  that is for the log to sit downstream of every decision and be read by
819
819
  none of them.
820
+
821
+ Returns how many events actually landed — :func:`coord.block_log.record`'s
822
+ own count, ``0`` on a full disk / read-only ``$HOME`` / unserialisable
823
+ event. Every tick call site treats this as fire-and-forget and ignores
824
+ the count; ``drive_queue_log_intervention`` is the one caller that must
825
+ not (#2540 review) — printing "logged" on the strength of "did not raise"
826
+ alone is the "unconfirmed success" shape epic #2096's checklist forbids.
820
827
  """
821
828
  if not events:
822
- return
829
+ return 0
823
830
  from coord import block_log # noqa: PLC0415
824
831
 
825
- block_log.record(events)
832
+ return block_log.record(events)
826
833
 
827
834
 
828
835
  def _record_operator_release(row: Mapping[str, Any] | None, *, resolution: str) -> None:
@@ -852,6 +859,102 @@ def _record_operator_release(row: Mapping[str, Any] | None, *, resolution: str)
852
859
  )
853
860
 
854
861
 
862
+ # ── log-intervention (#2540) ─────────────────────────────────────────────────
863
+
864
+
865
+ @drive_queue_group.command("log-intervention")
866
+ @click.argument("repo")
867
+ @click.argument("issue", type=int)
868
+ @click.option(
869
+ "--category",
870
+ default="other",
871
+ show_default=True,
872
+ help=(
873
+ "What kind of intervention this was. Free text, not a closed set — "
874
+ "the documented starting buckets are: "
875
+ + ", ".join(INTERVENTION_CATEGORIES)
876
+ + "."
877
+ ),
878
+ )
879
+ @click.option(
880
+ "--note",
881
+ default="",
882
+ help="Optional free-text detail — what you actually did.",
883
+ )
884
+ @_CONFIG_OPTION
885
+ def drive_queue_log_intervention(
886
+ repo: str, issue: int, category: str, note: str, config_path: Path
887
+ ) -> None:
888
+ """Record that a human acted on REPO ISSUE, outside the queue's own commands (#2540).
889
+
890
+ `human_acted` in `coord drive-queue block-log` only ever recognised
891
+ `remove`/`resume` and a Gate-A sign-off — the drive-queue command surface.
892
+ Real recovery routinely happens elsewhere entirely: a manual git rebase /
893
+ conflict resolution / `git push --force-with-lease`, a direct `coord
894
+ test`/`coord merge --only`/`coord pr`/`coord fix` against the assignment
895
+ underneath this entry, a `systemctl`/`coord agent update`/`coord diagnose
896
+ --reset` on the machine running it. None of that touches this process's
897
+ own write paths, so none of it was ever counted — a night of real manual
898
+ recovery could read as `0 needed a human`.
899
+
900
+ This command does not try to detect that after the fact (block-log
901
+ recording never probes live state — see `coord/block_log.py`). It gives
902
+ you a place to say so. Run it once per intervention, whenever you do one
903
+ — during the recovery or shortly after, either is fine — and `block-log`
904
+ folds it onto whichever episode was open for this key at the time, or, if
905
+ it had already resolved by the time you got to logging it, the most
906
+ recently closed one. It never guesses at *why* the entry was stalled or
907
+ what specifically you fixed — `--note` is where that goes, verbatim.
908
+
909
+ A REPO ISSUE this host has never recorded a stall for has nothing to
910
+ attach this to — the record is still written (append-only, never lost),
911
+ but this warns rather than pretending it landed somewhere.
912
+
913
+ Runs against **this host's** block log only — it is per-host by design
914
+ (see `coord/block_log.py`). Run it on the same host that recorded the
915
+ original stall (usually the daemon host that ran the tick), not e.g. your
916
+ laptop, or the write lands in a log `coord drive-queue block-log` on the
917
+ host that actually stalled will never read.
918
+ """
919
+ from coord.block_log import episodes, intervention_event, read_events # noqa: PLC0415
920
+
921
+ key = entry_key(repo, issue)
922
+ event = intervention_event(
923
+ key=key, category=category, note=note, host=_local_host_id()
924
+ )
925
+ written = _record_block_log([event])
926
+ if written < 1:
927
+ raise click.ClickException(
928
+ f"failed to log intervention against {key} — the block log did "
929
+ "not accept the write (full disk, read-only $HOME, or an "
930
+ "unserialisable record); nothing was recorded, try again"
931
+ )
932
+
933
+ # #2540 review: "did not raise" is not "landed" — read the log back and
934
+ # confirm the record we just wrote is actually in it before telling the
935
+ # operator it's logged. This reuses the same `read_events()` call
936
+ # `episodes()` below already needs for the attach-to-episode check (one
937
+ # membership check against it), rather than a second pass over the log.
938
+ all_events = read_events()
939
+ if event not in all_events:
940
+ raise click.ClickException(
941
+ f"failed to log intervention against {key} — the write reported "
942
+ "success but the record could not be read back afterward; "
943
+ "nothing is confirmed logged, try again"
944
+ )
945
+
946
+ matches = [ep for ep in episodes(all_events) if ep.get("key") == key]
947
+ if not matches:
948
+ click.echo(
949
+ f"logged, but {key} has no recorded stall on this host's block "
950
+ "log yet — it will not attach to an episode until one exists "
951
+ "(see `coord drive-queue block-log`)",
952
+ err=True,
953
+ )
954
+ return
955
+ click.echo(f"logged a {category!r} intervention against {key}")
956
+
957
+
855
958
  # ── remove / move ────────────────────────────────────────────────────────────
856
959
 
857
960
 
@@ -999,8 +1102,15 @@ def _episode_line(item: Mapping[str, Any]) -> str:
999
1102
  stated = " ".join(str(item.get("stated_reason") or "(none)").split())
1000
1103
  if len(stated) > 90:
1001
1104
  stated = stated[:87] + "..."
1105
+ # #2540: whatever `coord drive-queue log-intervention` has recorded
1106
+ # against this episode, open or resolved — rendered the same way in
1107
+ # both branches below so an operator sees it whether the entry is still
1108
+ # stalled (they logged it live) or already closed (they logged it after).
1109
+ intervened = ", ".join(str(c) for c in (item.get("intervention_categories") or []))
1002
1110
  if not item.get("resolved"):
1003
1111
  line = f"{key:<28} {state:<8} STILL STALLED stated: {stated}"
1112
+ if intervened:
1113
+ line += f"\n{'':<28} {'':<8} intervened: {intervened}"
1004
1114
  # #2276 Phase 1. An open episode used to have nothing in the `cause`
1005
1115
  # column at all — `summarize` bucketed it as `(unresolved)`. When the
1006
1116
  # diagnostician has been round, it does, and the CONTRADICTS marker is
@@ -1024,10 +1134,16 @@ def _episode_line(item: Mapping[str, Any]) -> str:
1024
1134
  held = item.get("stalled_seconds")
1025
1135
  age = _age_str(float(held)) if held is not None else "?"
1026
1136
  cause = " ".join(str(item.get("true_cause") or "").split())
1027
- return (
1137
+ line = (
1028
1138
  f"{key:<28} {state:<8} {mark} {age:>6} stated: {stated}\n"
1029
1139
  f"{'':<28} {'':<8} cause: {cause}"
1030
1140
  )
1141
+ if intervened:
1142
+ # `cause` is still the auto mechanism's own account of what flipped
1143
+ # the state (#2540 never rewrites it) — this line is the separate,
1144
+ # explicit claim that a human was ALSO in the loop.
1145
+ line += f"\n{'':<28} {'':<8} logged: {intervened}"
1146
+ return line
1031
1147
 
1032
1148
 
1033
1149
  @drive_queue_group.command("block-log")
@@ -1068,6 +1184,14 @@ def drive_queue_block_log(output_json: bool, days: float, config_path: Path) ->
1068
1184
  everything stalled forever shows up as `open` climbing, not as success.
1069
1185
  `repeats` is the tripwire — the same repo stalling on the same stated
1070
1186
  reason twice is a bug report, not a rescue.
1187
+
1188
+ `human_acted` folds in both how it always could tell (an operator's
1189
+ `remove`, a Gate-A sign-off) and #2540's `coord drive-queue
1190
+ log-intervention` records — the ones logged are called out separately in
1191
+ the summary line, because that count is the only one with an actual paper
1192
+ trail behind it (see `human_acted_logged` / `_episode_line`'s `logged:`
1193
+ row). It is still not a ceiling: an intervention nobody ran
1194
+ `log-intervention` for is invisible to this command by construction.
1071
1195
  """
1072
1196
  from coord.block_log import block_log_path, episodes, read_events, summarize # noqa: PLC0415
1073
1197
 
@@ -1098,9 +1222,15 @@ def drive_queue_block_log(output_json: bool, days: float, config_path: Path) ->
1098
1222
  for item in items:
1099
1223
  click.echo(_episode_line(item))
1100
1224
  click.echo("")
1225
+ # #2540: call out how many of `human_acted` are backed by an actual
1226
+ # `log-intervention` record, but only when there is one to show — the
1227
+ # base sentence stays exactly what it always was otherwise, so a fleet
1228
+ # that has never run the new command reads no different than before.
1229
+ logged = stats.get("human_acted_logged") or 0
1230
+ human_note = f" ({logged} logged)" if logged else ""
1101
1231
  click.echo(
1102
1232
  f"{stats['episodes']} stall(s) in {days:g}d — "
1103
- f"{stats['human_acted']} needed a human · "
1233
+ f"{stats['human_acted']} needed a human{human_note} · "
1104
1234
  f"{stats['auto_released']} released themselves · "
1105
1235
  f"{stats['open']} still stalled"
1106
1236
  )