code-coordinator 0.5.224__tar.gz → 0.5.226__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.224 → code_coordinator-0.5.226}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/code_coordinator.egg-info/scm_version.json +2 -2
  4. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/confirm_test.py +67 -2
  5. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/notify.py +34 -3
  6. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/reconcile.py +134 -29
  7. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_confirm_test.py +129 -3
  8. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_drive.py +6 -0
  9. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_notify.py +1 -1
  10. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_reconcile_no_agent_record.py +186 -1
  11. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/.claude/commands/board.md +0 -0
  12. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/.claude/commands/complete-session.md +0 -0
  13. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/.claude/commands/coordinator.md +0 -0
  14. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/.githooks/_lib.sh +0 -0
  15. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/.githooks/post-checkout +0 -0
  16. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/.githooks/post-commit +0 -0
  17. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/.githooks/post-merge +0 -0
  18. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  19. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/.github/coord-ci-acceptance.yml +0 -0
  20. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/.github/workflows/auto-release.yml +0 -0
  21. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/.github/workflows/cargo-test.yml +0 -0
  22. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/.github/workflows/publish.yml +0 -0
  23. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/.github/workflows/release-tui.yml +0 -0
  24. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/.github/workflows/test.yml +0 -0
  25. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/.gitignore +0 -0
  26. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/CLAUDE.md +0 -0
  27. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/GOAL.md +0 -0
  28. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/LICENSE +0 -0
  29. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/MANIFEST.in +0 -0
  30. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/README.md +0 -0
  31. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/code_coordinator.egg-info/SOURCES.txt +0 -0
  32. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/code_coordinator.egg-info/dependency_links.txt +0 -0
  33. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/code_coordinator.egg-info/entry_points.txt +0 -0
  34. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/code_coordinator.egg-info/requires.txt +0 -0
  35. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/code_coordinator.egg-info/scm_file_list.json +0 -0
  36. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/code_coordinator.egg-info/top_level.txt +0 -0
  37. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/__init__.py +0 -0
  38. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/_board_mapping.py +0 -0
  39. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/acceptance.py +0 -0
  40. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/acceptance_drivers.py +0 -0
  41. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/agent.py +0 -0
  42. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/agent_app.py +0 -0
  43. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/agent_update.py +0 -0
  44. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/agents/opencode/.gitignore +0 -0
  45. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/agents/opencode/agents/work.md +0 -0
  46. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/agents/opencode/routing.jsonc +0 -0
  47. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/approved_work.py +0 -0
  48. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/audit.py +0 -0
  49. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/auto_loop.py +0 -0
  50. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/block_log.py +0 -0
  51. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/board_bool_guard.py +0 -0
  52. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/board_service.py +0 -0
  53. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/board_wire.py +0 -0
  54. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/brain.py +0 -0
  55. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/branch_model.py +0 -0
  56. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/bug_intake.py +0 -0
  57. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/cargo_cache.py +0 -0
  58. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/ci_fix.py +0 -0
  59. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/ci_github.py +0 -0
  60. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/ci_gitlab.py +0 -0
  61. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/ci_store.py +0 -0
  62. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/claim.py +0 -0
  63. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/cli.py +0 -0
  64. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/client.py +0 -0
  65. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/commands/__init__.py +0 -0
  66. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/commands/_common.py +0 -0
  67. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/commands/acceptance.py +0 -0
  68. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/commands/agent_ops.py +0 -0
  69. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/commands/audit.py +0 -0
  70. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/commands/chat.py +0 -0
  71. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/commands/dispatch.py +0 -0
  72. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/commands/dispatch_workers.py +0 -0
  73. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/commands/drive.py +0 -0
  74. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/commands/drive_queue.py +0 -0
  75. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/commands/gate_a.py +0 -0
  76. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/commands/gates.py +0 -0
  77. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/commands/issues.py +0 -0
  78. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/commands/lifecycle.py +0 -0
  79. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/commands/merge.py +0 -0
  80. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/commands/milestone.py +0 -0
  81. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/commands/plan_followup.py +0 -0
  82. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/commands/plans.py +0 -0
  83. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/commands/portal.py +0 -0
  84. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/commands/release.py +0 -0
  85. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/commands/repo.py +0 -0
  86. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/commands/report.py +0 -0
  87. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/commands/review.py +0 -0
  88. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/commands/scorecard.py +0 -0
  89. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/commands/sessions.py +0 -0
  90. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/commands/setup.py +0 -0
  91. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/commands/status.py +0 -0
  92. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/commands/terminal.py +0 -0
  93. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/commands/test_gate.py +0 -0
  94. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/commands/tui.py +0 -0
  95. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/comments.py +0 -0
  96. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/config.py +0 -0
  97. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/config_reload.py +0 -0
  98. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/conflict_fix.py +0 -0
  99. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/dao.py +0 -0
  100. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/dashboard/__init__.py +0 -0
  101. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/dashboard/fixture.py +0 -0
  102. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/dashboard/index.html +0 -0
  103. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/dashboard/server.py +0 -0
  104. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/dashboard/terminal.py +0 -0
  105. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/db.py +0 -0
  106. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/dead_end.py +0 -0
  107. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/deploy/README.md +0 -0
  108. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/deploy/coord-agent.service +0 -0
  109. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/deploy/coord-db-backup.service +0 -0
  110. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/deploy/coord-db-backup.sh +0 -0
  111. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/deploy/coord-db-backup.timer +0 -0
  112. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/deploy/coord-drive-queue.service +0 -0
  113. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/deploy/coord-drive-queue.timer +0 -0
  114. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/deploy/coord-notify.service +0 -0
  115. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/deploy/coord-notify.timer +0 -0
  116. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/deploy/coord-release-propagate.service +0 -0
  117. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/deploy/coord-release-propagate.timer +0 -0
  118. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/deploy/coord-release-window.service +0 -0
  119. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/deploy/coord-release-window.timer +0 -0
  120. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/deploy/coord-serve.service +0 -0
  121. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/deploy/coord-web-dist-build.service +0 -0
  122. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/deploy/coord-web-dist-build.timer +0 -0
  123. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/deploy/coord-web.service +0 -0
  124. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/deploy_manifest.py +0 -0
  125. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/deploy_units.py +0 -0
  126. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/deps.py +0 -0
  127. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/diagnose.py +0 -0
  128. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/dispatch.py +0 -0
  129. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/dist_name.py +0 -0
  130. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/drive.py +0 -0
  131. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/drive_queue.py +0 -0
  132. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/drive_state.py +0 -0
  133. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/events.py +0 -0
  134. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/failure_class.py +0 -0
  135. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/filelock.py +0 -0
  136. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/fleet_config_health.py +0 -0
  137. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/forge_availability.py +0 -0
  138. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/freshness.py +0 -0
  139. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/gate_a.py +0 -0
  140. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/gate_b.py +0 -0
  141. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/gate_snapshot.py +0 -0
  142. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/gates.py +0 -0
  143. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/github_ops.py +0 -0
  144. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/goal.py +0 -0
  145. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/graph_health.py +0 -0
  146. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/health/__init__.py +0 -0
  147. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/health/aggregate.py +0 -0
  148. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/health/checks/__init__.py +0 -0
  149. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/health/checks/agent_install.py +0 -0
  150. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/health/checks/cargo_targets.py +0 -0
  151. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/health/checks/claude_binary.py +0 -0
  152. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/health/checks/coord_web_ci_pin.py +0 -0
  153. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/health/checks/deploy_lane_facts.py +0 -0
  154. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/health/checks/disk.py +0 -0
  155. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/health/checks/fleet_board.py +0 -0
  156. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  157. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/health/checks/fleet_phantom.py +0 -0
  158. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/health/checks/fleet_unit_drift.py +0 -0
  159. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/health/checks/graph.py +0 -0
  160. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/health/checks/graphify_cli.py +0 -0
  161. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/health/checks/index_lock.py +0 -0
  162. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/health/checks/plan_usage.py +0 -0
  163. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/health/checks/repo_state.py +0 -0
  164. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/health/checks/spawned_coord.py +0 -0
  165. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/health/checks/timer_active.py +0 -0
  166. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/health/checks/toolchain.py +0 -0
  167. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/health/checks/unit_drift.py +0 -0
  168. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/health/checks/unit_enablement.py +0 -0
  169. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/health/checks/worktrees.py +0 -0
  170. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/health/cli.py +0 -0
  171. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/health/context.py +0 -0
  172. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/health/fleet_snapshot.py +0 -0
  173. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/health/models.py +0 -0
  174. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/health/pypi.py +0 -0
  175. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/health/registry.py +0 -0
  176. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/health/render.py +0 -0
  177. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/health/units.py +0 -0
  178. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/hooks.py +0 -0
  179. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/housekeeping.py +0 -0
  180. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/interactive.py +0 -0
  181. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/issue_store.py +0 -0
  182. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/liveness_auditor.py +0 -0
  183. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/machine_pause.py +0 -0
  184. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/merge_queue.py +0 -0
  185. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/milestone_chat.py +0 -0
  186. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/milestone_dispatch.py +0 -0
  187. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/milestone_gate.py +0 -0
  188. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/milestone_order.py +0 -0
  189. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/mock_author.py +0 -0
  190. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/models.py +0 -0
  191. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/network.py +0 -0
  192. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/new_issue_chat.py +0 -0
  193. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/notifier/__init__.py +0 -0
  194. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/notifier/baseline.py +0 -0
  195. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/notifier/cli.py +0 -0
  196. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/notifier/collect.py +0 -0
  197. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/notifier/digest.py +0 -0
  198. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/notifier/models.py +0 -0
  199. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/notifier/predicate.py +0 -0
  200. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/notifier/service.py +0 -0
  201. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/notifier/store.py +0 -0
  202. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/notifier/transport.py +0 -0
  203. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/openapi.py +0 -0
  204. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/overlap_fence.py +0 -0
  205. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/overlap_predict.py +0 -0
  206. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/parentage.py +0 -0
  207. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/parentage_github.py +0 -0
  208. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/pipeline.py +0 -0
  209. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/plan_parser.py +0 -0
  210. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/plans.py +0 -0
  211. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/platform_paths.py +0 -0
  212. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/portal_bridge.py +0 -0
  213. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/portal_store.py +0 -0
  214. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/portal_sync.py +0 -0
  215. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/pr_body_lint.py +0 -0
  216. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/prereqs.py +0 -0
  217. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/progress.py +0 -0
  218. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/providers/__init__.py +0 -0
  219. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/providers/base.py +0 -0
  220. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/providers/claude.py +0 -0
  221. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/providers/claude_pty.py +0 -0
  222. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/providers/opencode.py +0 -0
  223. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/queue_diagnose.py +0 -0
  224. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/reconcile_tick.py +0 -0
  225. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/refine_chat.py +0 -0
  226. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/release_cordon.py +0 -0
  227. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/release_propagate.py +0 -0
  228. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/release_verify.py +0 -0
  229. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/release_window.py +0 -0
  230. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/repo_edit.py +0 -0
  231. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/repo_onboard.py +0 -0
  232. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/reports.py +0 -0
  233. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/revalidate.py +0 -0
  234. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/review.py +0 -0
  235. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/scorecard.py +0 -0
  236. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/self_health.py +0 -0
  237. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/serve_app.py +0 -0
  238. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  239. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  240. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  241. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  242. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  243. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/skills/portal-followup/SKILL.md +0 -0
  244. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  245. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  246. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/skills/update-issue/SKILL.md +0 -0
  247. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/smoke.py +0 -0
  248. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/spend_ceiling.py +0 -0
  249. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/split_work.py +0 -0
  250. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/stage_projection.py +0 -0
  251. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/state.py +0 -0
  252. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/test_author.py +0 -0
  253. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/test_chat.py +0 -0
  254. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/test_orchestrator.py +0 -0
  255. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/test_report.py +0 -0
  256. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/tui_release.py +0 -0
  257. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/usage.py +0 -0
  258. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/usage_limits.py +0 -0
  259. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/usage_rollup.py +0 -0
  260. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coord/worker_events.py +0 -0
  261. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/coordinator.example.yml +0 -0
  262. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/deploy/coord-agent.service +0 -0
  263. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/deploy/coord-db-backup.service +0 -0
  264. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/deploy/coord-db-backup.sh +0 -0
  265. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/deploy/coord-db-backup.timer +0 -0
  266. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/deploy/coord-drive-queue.service +0 -0
  267. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/deploy/coord-drive-queue.timer +0 -0
  268. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/deploy/coord-notify.service +0 -0
  269. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/deploy/coord-notify.timer +0 -0
  270. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/deploy/coord-release-propagate.service +0 -0
  271. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/deploy/coord-release-propagate.timer +0 -0
  272. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/deploy/coord-release-window.service +0 -0
  273. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/deploy/coord-release-window.timer +0 -0
  274. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/deploy/coord-serve.service +0 -0
  275. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/deploy/coord-web-dist-build.service +0 -0
  276. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/deploy/coord-web-dist-build.sh +0 -0
  277. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/deploy/coord-web-dist-build.timer +0 -0
  278. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/deploy/coord-web-rollback.sh +0 -0
  279. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/deploy/coord-web.service +0 -0
  280. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/deploy/node-shim.sh +0 -0
  281. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  282. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/docs/ADR_COORD_WEB_CI.md +0 -0
  283. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/docs/ADR_COORD_WEB_DIST.md +0 -0
  284. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/docs/AGENT_OPERATIONS.md +0 -0
  285. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/docs/ARCHITECTURE.md +0 -0
  286. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/docs/ARCH_SECURITY_GATES.md +0 -0
  287. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/docs/COCKPIT.md +0 -0
  288. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/docs/CONTROL_CENTER.md +0 -0
  289. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/docs/COST_DISCIPLINE.md +0 -0
  290. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/docs/CROSS_PLATFORM.md +0 -0
  291. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/docs/CUSTOMER_PORTAL.md +0 -0
  292. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/docs/DRIVE_QUEUE.md +0 -0
  293. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/docs/EPHEMERAL_WORKERS.md +0 -0
  294. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/docs/FORGE_MIGRATION.md +0 -0
  295. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/docs/GRAPHIFY_SETUP.md +0 -0
  296. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/docs/ISSUE_GUIDANCE.md +0 -0
  297. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/docs/MAC_MINI.md +0 -0
  298. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  299. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/docs/NOTIFIER.md +0 -0
  300. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/docs/OPENCODE_VERIFICATION.md +0 -0
  301. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/docs/OPERATING_GOTCHAS.md +0 -0
  302. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/docs/ORACLE_LOOP.md +0 -0
  303. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/docs/PHONE_WEBAPP.md +0 -0
  304. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/docs/PIPELINE_V2.md +0 -0
  305. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/docs/PLATFORM_EVOLUTION.md +0 -0
  306. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/docs/SECOND_BACKEND.md +0 -0
  307. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/docs/STORE_SERVICE.md +0 -0
  308. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  309. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/docs/WEB_CONTROL_CENTER.md +0 -0
  310. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/docs/WSL_WINDOWS_WORKER.md +0 -0
  311. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/docs/mocks/web/README.md +0 -0
  312. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/docs/mocks/web/_tokens.css +0 -0
  313. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/docs/mocks/web/issue-detail.html +0 -0
  314. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/docs/mocks/web/pipeline-narrow.html +0 -0
  315. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/docs/mocks/web/pipeline-wide.html +0 -0
  316. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/graphify-out/.gitignore +0 -0
  317. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/install-agent.sh +0 -0
  318. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/pyproject.toml +0 -0
  319. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/scripts/audit_review_verdict_overrides.py +0 -0
  320. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  321. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/scripts/azure-workers/build-worker-image.sh +0 -0
  322. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/scripts/azure-workers/coordinator-machine.py +0 -0
  323. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/scripts/azure-workers/epic-down.sh +0 -0
  324. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/scripts/azure-workers/epic-up.sh +0 -0
  325. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/scripts/azure-workers/preflight.sh +0 -0
  326. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/scripts/azure-workers/provision-worker.sh +0 -0
  327. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  328. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  329. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/scripts/azure-workers/verify-github-token.sh +0 -0
  330. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/scripts/check_gh_argv_containment.py +0 -0
  331. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/scripts/codegen.py +0 -0
  332. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/scripts/coord-test-runner.sh +0 -0
  333. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/scripts/drive-batch.sh +0 -0
  334. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/scripts/gen_board_fixture.py +0 -0
  335. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/scripts/gen_mock_index.py +0 -0
  336. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/scripts/next_release_tag.py +0 -0
  337. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/scripts/run_tests_in_populated_home.sh +0 -0
  338. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/scripts/run_tests_without_gh.sh +0 -0
  339. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/scripts/smoke_437_interactive.py +0 -0
  340. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/scripts/verify_878_review_capture.py +0 -0
  341. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/scripts/verify_release_published.py +0 -0
  342. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/scripts/verify_release_wheel.py +0 -0
  343. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/setup.cfg +0 -0
  344. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/SMOKE_SET.md +0 -0
  345. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/__init__.py +0 -0
  346. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  347. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/acceptance/ms-33/contract.md +0 -0
  348. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/acceptance/ms-33/manifest.yml +0 -0
  349. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  350. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  351. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  352. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  353. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/acceptance/ms-37/conftest.py +0 -0
  354. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/acceptance/ms-37/contract.md +0 -0
  355. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/acceptance/ms-37/manifest.yml +0 -0
  356. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  357. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  358. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/acceptance/ms-38/contract.md +0 -0
  359. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/acceptance/ms-38/manifest.yml +0 -0
  360. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  361. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  362. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  363. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  364. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  365. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  366. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  367. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  368. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  369. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  370. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/acceptance/ms-51/contract.md +0 -0
  371. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  372. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  373. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/acceptance/ms-51/manifest.yml +0 -0
  374. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  375. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/acceptance/ms-51/tsconfig.json +0 -0
  376. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/acceptance/ms-65/board_split_2288.rs +0 -0
  377. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
  378. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
  379. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/acceptance/ms-65/contract.md +0 -0
  380. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
  381. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/acceptance/ms-65/manifest.yml +0 -0
  382. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
  383. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
  384. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
  385. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
  386. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
  387. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
  388. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
  389. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
  390. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
  391. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
  392. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/acceptance/ms-65/tabs_persistence_2286.rs +0 -0
  393. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/acceptance/ms-67/approved_items_2532.rs +0 -0
  394. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/acceptance/ms-67/contract.md +0 -0
  395. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/acceptance/ms-67/manifest.yml +0 -0
  396. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/acceptance/ms-67/mocks/approved-items-chat-opened.screen +0 -0
  397. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/acceptance/ms-67/mocks/approved-items-context-menu.screen +0 -0
  398. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/acceptance/ms-67/mocks/approved-items-detail.screen +0 -0
  399. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/acceptance/ms-67/mocks/approved-items-empty.screen +0 -0
  400. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/acceptance/ms-67/mocks/approved-items-populated.screen +0 -0
  401. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  402. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/conftest.py +0 -0
  403. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/fixtures/board-pipeline-basic.json +0 -0
  404. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  405. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  406. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  407. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  408. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/fixtures/playwright/all_pass.json +0 -0
  409. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  410. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/fixtures/playwright/mixed_fail.json +0 -0
  411. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  412. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  413. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/fixtures/playwright/skip.json +0 -0
  414. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/fixtures/playwright/truncated.json +0 -0
  415. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  416. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  417. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  418. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  419. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  420. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  421. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  422. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  423. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_acceptance.py +0 -0
  424. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_acceptance_drivers.py +0 -0
  425. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_agent.py +0 -0
  426. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_agent_api_error.py +0 -0
  427. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_agent_app.py +0 -0
  428. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_agent_branch_base.py +0 -0
  429. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_agent_branch_capture.py +0 -0
  430. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_agent_config_free_1712.py +0 -0
  431. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_agent_deploy_units_endpoint.py +0 -0
  432. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_agent_dirty_worktree.py +0 -0
  433. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  434. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_agent_graph_self_heal.py +0 -0
  435. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_agent_health_h3.py +0 -0
  436. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_agent_idle_restart.py +0 -0
  437. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_agent_push_failure.py +0 -0
  438. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_agent_reap.py +0 -0
  439. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_agent_repos_and_pull.py +0 -0
  440. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_agent_restart_services_endpoint.py +0 -0
  441. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_agent_skills_self_heal.py +0 -0
  442. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_agent_startup_diagnostics.py +0 -0
  443. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_agent_update.py +0 -0
  444. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_agent_update_bluegreen.py +0 -0
  445. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_agent_usage_limit.py +0 -0
  446. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_agent_zero_commit.py +0 -0
  447. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_ambient_home_isolation.py +0 -0
  448. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_approve_reject_plan.py +0 -0
  449. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_approve_usage_gate.py +0 -0
  450. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_approved_work_2532.py +0 -0
  451. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_assignment_already_recorded_daemon.py +0 -0
  452. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_audit_log.py +0 -0
  453. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_audit_outcome.py +0 -0
  454. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_audit_query.py +0 -0
  455. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_auto_loop.py +0 -0
  456. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_auto_release_publish_2035.py +0 -0
  457. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_base_checkout_restore.py +0 -0
  458. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_block_log.py +0 -0
  459. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_board_cap_762.py +0 -0
  460. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_board_fixture.py +0 -0
  461. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_board_read_path.py +0 -0
  462. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_board_service.py +0 -0
  463. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_board_state.py +0 -0
  464. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_board_wire.py +0 -0
  465. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_brain.py +0 -0
  466. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_branch_model.py +0 -0
  467. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_bug_intake.py +0 -0
  468. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_build_worker_image_env_update.py +0 -0
  469. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_cargo_cache.py +0 -0
  470. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_check_gh_argv_containment.py +0 -0
  471. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_ci_acceptance_gate_1950.py +0 -0
  472. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_ci_fix.py +0 -0
  473. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_ci_gitlab.py +0 -0
  474. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_ci_parity_2091.py +0 -0
  475. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_ci_store.py +0 -0
  476. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_claim.py +0 -0
  477. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_cli_acceptance.py +0 -0
  478. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_cli_assign.py +0 -0
  479. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  480. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_cli_assign_interactive_remote.py +0 -0
  481. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_cli_assign_provider.py +0 -0
  482. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  483. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_cli_audit.py +0 -0
  484. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_cli_chat_continue.py +0 -0
  485. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_cli_decide.py +0 -0
  486. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_cli_diagnose_config_provenance.py +0 -0
  487. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_cli_diagnose_forge_availability.py +0 -0
  488. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_cli_diagnose_graph.py +0 -0
  489. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_cli_diagnose_self.py +0 -0
  490. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_cli_doctor.py +0 -0
  491. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_cli_doctor_config_free_1801.py +0 -0
  492. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  493. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_cli_drive.py +0 -0
  494. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_cli_drive_queue.py +0 -0
  495. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_cli_escalate.py +0 -0
  496. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_cli_fix_headless_review.py +0 -0
  497. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_cli_gate_a.py +0 -0
  498. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_cli_install_drift.py +0 -0
  499. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_cli_install_skills.py +0 -0
  500. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_cli_issue_create_label.py +0 -0
  501. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_cli_issue_reopen.py +0 -0
  502. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_cli_merge.py +0 -0
  503. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_cli_milestone_assign.py +0 -0
  504. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_cli_milestone_capture.py +0 -0
  505. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_cli_milestone_chat_add_child.py +0 -0
  506. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_cli_milestone_dispatch.py +0 -0
  507. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_cli_milestone_gate_b.py +0 -0
  508. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_cli_milestone_gate_c.py +0 -0
  509. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_cli_milestone_order.py +0 -0
  510. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  511. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_cli_milestone_ship.py +0 -0
  512. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_cli_network.py +0 -0
  513. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_cli_new_issue_chat.py +0 -0
  514. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_cli_plans.py +0 -0
  515. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_cli_portal.py +0 -0
  516. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_cli_pull_artifact.py +0 -0
  517. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_cli_queue.py +0 -0
  518. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_cli_reattach_sessions.py +0 -0
  519. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_cli_refine_board.py +0 -0
  520. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_cli_release_preflight.py +0 -0
  521. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_cli_release_propagate.py +0 -0
  522. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_cli_release_window.py +0 -0
  523. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_cli_repo_2220.py +0 -0
  524. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_cli_scorecard.py +0 -0
  525. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_cli_set_review_findings.py +0 -0
  526. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_cli_status_advisory_terminal.py +0 -0
  527. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_cli_status_merge_queue.py +0 -0
  528. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_cli_status_provider.py +0 -0
  529. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_cli_status_review_finalizing.py +0 -0
  530. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_cli_status_test_failed_tag.py +0 -0
  531. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_cli_status_usage_limit.py +0 -0
  532. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_cli_sync_comments_873.py +0 -0
  533. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_cli_test_plan.py +0 -0
  534. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_cli_track.py +0 -0
  535. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_cli_tui_update.py +0 -0
  536. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_cli_wait.py +0 -0
  537. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_client_base_install.py +0 -0
  538. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_comments.py +0 -0
  539. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_completion_summary.py +0 -0
  540. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_config.py +0 -0
  541. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_config_acceptance.py +0 -0
  542. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_config_audit.py +0 -0
  543. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_config_pricing.py +0 -0
  544. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  545. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_config_usage_gate.py +0 -0
  546. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_conflict_fix.py +0 -0
  547. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_conflict_fix_semantic.py +0 -0
  548. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_coord_test.py +0 -0
  549. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_coord_test_runner_baseline.py +0 -0
  550. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_coord_test_runner_populated_home.py +0 -0
  551. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_coord_test_runner_routing.py +0 -0
  552. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_coord_test_runner_toolchain.py +0 -0
  553. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_coord_web_sse_restart_live.py +0 -0
  554. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_coordinator_machine.py +0 -0
  555. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_cross_platform_imports.py +0 -0
  556. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_dashboard.py +0 -0
  557. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_dashboard_fixture.py +0 -0
  558. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_dashboard_terminal.py +0 -0
  559. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_dashboard_terminal_live.py +0 -0
  560. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_db.py +0 -0
  561. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_dead_end.py +0 -0
  562. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_deploy_coord_db_backup.py +0 -0
  563. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_deploy_coord_web_dist.py +0 -0
  564. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_deploy_coord_web_rollback.py +0 -0
  565. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_deploy_drive_queue_unit.py +0 -0
  566. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_deploy_manifest.py +0 -0
  567. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_deploy_notify_unit.py +0 -0
  568. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_deploy_units_lane.py +0 -0
  569. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_deploy_web_unit.py +0 -0
  570. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_deps.py +0 -0
  571. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_diagnose.py +0 -0
  572. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_dispatch.py +0 -0
  573. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_dispatch_target_validation.py +0 -0
  574. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_dist_name.py +0 -0
  575. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_done_housekeeping.py +0 -0
  576. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_drive_queue.py +0 -0
  577. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_drive_state.py +0 -0
  578. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_drive_tmux.py +0 -0
  579. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_epic_up_capability_detection.py +0 -0
  580. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  581. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_epic_up_image_provenance.py +0 -0
  582. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_errors.py +0 -0
  583. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_events.py +0 -0
  584. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_failure_class.py +0 -0
  585. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_filelock.py +0 -0
  586. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  587. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_fix_of_force_override.py +0 -0
  588. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_fleet_config_health.py +0 -0
  589. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_fleet_health_probes.py +0 -0
  590. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_fleet_health_snapshot.py +0 -0
  591. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_forge_availability.py +0 -0
  592. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_freshness.py +0 -0
  593. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_gate_a.py +0 -0
  594. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_gate_b.py +0 -0
  595. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_gate_snapshot_staleness.py +0 -0
  596. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_gates.py +0 -0
  597. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  598. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_gen_mock_index.py +0 -0
  599. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_generated_types_fixture.py +0 -0
  600. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_github_ops.py +0 -0
  601. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_goal.py +0 -0
  602. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_graph_health.py +0 -0
  603. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_graph_selfheal_absent_2237.py +0 -0
  604. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_handoff.py +0 -0
  605. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_health_checks.py +0 -0
  606. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_health_cli.py +0 -0
  607. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_health_cli_graph.py +0 -0
  608. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_health_config.py +0 -0
  609. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_health_context.py +0 -0
  610. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_health_coord_web_ci_pin.py +0 -0
  611. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_health_deploy_lane_facts.py +0 -0
  612. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_health_incident_regression.py +0 -0
  613. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_health_pypi.py +0 -0
  614. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_health_registry.py +0 -0
  615. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_health_timer_active.py +0 -0
  616. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_health_toolchain.py +0 -0
  617. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_health_unit_drift.py +0 -0
  618. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_health_unit_enablement.py +0 -0
  619. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_hooks.py +0 -0
  620. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_human_attended_437.py +0 -0
  621. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_init.py +0 -0
  622. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_integration.py +0 -0
  623. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_interactive_briefing_echo.py +0 -0
  624. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_interactive_prefill_state.py +0 -0
  625. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_interactive_session_relaunch.py +0 -0
  626. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_interactive_test_verdict_backstop.py +0 -0
  627. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_interactive_token_attribution.py +0 -0
  628. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_interactive_worktree.py +0 -0
  629. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_issue_store_seam.py +0 -0
  630. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_liveness_auditor.py +0 -0
  631. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_liveness_notify.py +0 -0
  632. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_machine_pause.py +0 -0
  633. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_merge_queue.py +0 -0
  634. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_merge_verify.py +0 -0
  635. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_milestone_chat.py +0 -0
  636. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_milestone_dispatch.py +0 -0
  637. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_milestone_gate.py +0 -0
  638. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_milestone_order.py +0 -0
  639. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_milestone_seam.py +0 -0
  640. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_mock_author.py +0 -0
  641. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_model_tiering.py +0 -0
  642. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_models.py +0 -0
  643. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_models_config_labels.py +0 -0
  644. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_needs_attention.py +0 -0
  645. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_network.py +0 -0
  646. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_new_issue_chat.py +0 -0
  647. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_next_release_tag.py +0 -0
  648. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_node_shim.py +0 -0
  649. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_notifier_baseline.py +0 -0
  650. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_notifier_cli.py +0 -0
  651. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_notifier_collect.py +0 -0
  652. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_notifier_config.py +0 -0
  653. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_notifier_drive_seam.py +0 -0
  654. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_notifier_isolation.py +0 -0
  655. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_notifier_predicate.py +0 -0
  656. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_notifier_quiet_hours.py +0 -0
  657. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_notifier_service.py +0 -0
  658. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_notify_drain.py +0 -0
  659. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_openapi.py +0 -0
  660. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_operational_defaults.py +0 -0
  661. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_overlap_fence.py +0 -0
  662. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_overlap_predict.py +0 -0
  663. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_packaged_deploy_units.py +0 -0
  664. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_parentage.py +0 -0
  665. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_paste_landed.py +0 -0
  666. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_pipeline.py +0 -0
  667. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_plan_followup_approve_plan_command.py +0 -0
  668. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_plan_followup_pr_command.py +0 -0
  669. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_plan_followup_review_command.py +0 -0
  670. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_plan_only.py +0 -0
  671. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_plan_parser.py +0 -0
  672. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_platform_paths.py +0 -0
  673. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_portal_bridge.py +0 -0
  674. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_portal_config.py +0 -0
  675. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_portal_store.py +0 -0
  676. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_portal_sync.py +0 -0
  677. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_pr_body_lint.py +0 -0
  678. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_prereqs.py +0 -0
  679. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_production_db_guard.py +0 -0
  680. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_progress.py +0 -0
  681. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_provider_seam.py +0 -0
  682. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_providers.py +0 -0
  683. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_providers_config_labels.py +0 -0
  684. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_providers_pty.py +0 -0
  685. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_quiet_hours.py +0 -0
  686. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_quiet_hours_store_2146.py +0 -0
  687. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_reap_merged_sessions.py +0 -0
  688. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_reap_stale_interactive_tick.py +0 -0
  689. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_reconcile.py +0 -0
  690. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_reconcile_branch.py +0 -0
  691. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_reconcile_completions.py +0 -0
  692. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_reconcile_merges.py +0 -0
  693. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_reconcile_tick.py +0 -0
  694. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_reconcile_usage_limit_done.py +0 -0
  695. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_refine_chat.py +0 -0
  696. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_release_cordon_2101.py +0 -0
  697. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  698. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_release_cordon_deadlock_2240.py +0 -0
  699. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_release_cordon_stuck_2490.py +0 -0
  700. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_release_propagate.py +0 -0
  701. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_release_unified_1242.py +0 -0
  702. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_release_verify.py +0 -0
  703. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_release_window.py +0 -0
  704. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_remote_auto_prune.py +0 -0
  705. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_remote_interactive_reaper.py +0 -0
  706. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_repo_edit_2220.py +0 -0
  707. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_repo_graph_fleet_2237.py +0 -0
  708. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_repo_onboard_2220.py +0 -0
  709. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_report_result_push.py +0 -0
  710. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_reports.py +0 -0
  711. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_retry.py +0 -0
  712. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_retry_advisory_1606.py +0 -0
  713. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_retry_type_1636.py +0 -0
  714. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_revalidate.py +0 -0
  715. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_review.py +0 -0
  716. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_review_end_review_without_verdict.py +0 -0
  717. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_review_parse_failure_diagnostic.py +0 -0
  718. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_review_reaffirm.py +0 -0
  719. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_review_state.py +0 -0
  720. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_review_verdict_backstop.py +0 -0
  721. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_review_verdict_override_audit.py +0 -0
  722. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_review_verdict_relay.py +0 -0
  723. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_review_zero_commits.py +0 -0
  724. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_scoped_review_wiring.py +0 -0
  725. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_scorecard.py +0 -0
  726. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_self_health.py +0 -0
  727. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_serve.py +0 -0
  728. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_serve_app_board_trim.py +0 -0
  729. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_session.py +0 -0
  730. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_slice_issue_attribution.py +0 -0
  731. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_smoke.py +0 -0
  732. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_smoke_live_checkout_restore.py +0 -0
  733. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_smoke_workflow.py +0 -0
  734. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_spend_ceiling.py +0 -0
  735. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_spend_ceiling_coordinator.py +0 -0
  736. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_split.py +0 -0
  737. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_split_work.py +0 -0
  738. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_stage_projection.py +0 -0
  739. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_stalled_pipeline.py +0 -0
  740. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_state.py +0 -0
  741. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_state_review_findings_daemon.py +0 -0
  742. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_status_fleet_footer.py +0 -0
  743. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_stop_1567.py +0 -0
  744. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_stuck.py +0 -0
  745. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_terminal_command.py +0 -0
  746. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_test_author.py +0 -0
  747. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_test_chat.py +0 -0
  748. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_test_orchestrator.py +0 -0
  749. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_test_report.py +0 -0
  750. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_test_verdict_parsing.py +0 -0
  751. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_test_verdict_transcript_floor.py +0 -0
  752. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_thin_client_board_audit.py +0 -0
  753. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_thin_client_config_load_1080.py +0 -0
  754. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_thin_client_daemon_routing_906.py +0 -0
  755. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_tmux_host.py +0 -0
  756. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_tmux_session.py +0 -0
  757. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_transcript_floor.py +0 -0
  758. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_usage.py +0 -0
  759. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_usage_limits.py +0 -0
  760. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_usage_rollup.py +0 -0
  761. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_venv_live_install_2121.py +0 -0
  762. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_version_single_source.py +0 -0
  763. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_watch.py +0 -0
  764. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  765. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_worker_events.py +0 -0
  766. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_worker_image_pin_sync.py +0 -0
  767. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_worker_safety.py +0 -0
  768. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_worker_test_scoping.py +0 -0
  769. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_worktree.py +0 -0
  770. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  771. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tui/Cargo.lock +0 -0
  772. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tui/Cargo.toml +0 -0
  773. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tui/cargo-config-local-quadraui.toml.example +0 -0
  774. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tui/src/app/approved.rs +0 -0
  775. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tui/src/app/audit.rs +0 -0
  776. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tui/src/app/chat.rs +0 -0
  777. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tui/src/app/data.rs +0 -0
  778. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tui/src/app/dialogs.rs +0 -0
  779. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tui/src/app/doc_tabs.rs +0 -0
  780. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tui/src/app/drive.rs +0 -0
  781. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tui/src/app/drive_queue.rs +0 -0
  782. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tui/src/app/escalation.rs +0 -0
  783. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tui/src/app/events.rs +0 -0
  784. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tui/src/app/fixtures.rs +0 -0
  785. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tui/src/app/fleet_health.rs +0 -0
  786. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tui/src/app/fleet_sessions.rs +0 -0
  787. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tui/src/app/fleet_terminals.rs +0 -0
  788. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tui/src/app/format.rs +0 -0
  789. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tui/src/app/milestone_dag.rs +0 -0
  790. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tui/src/app/mod.rs +0 -0
  791. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tui/src/app/msv.rs +0 -0
  792. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tui/src/app/pipeline.rs +0 -0
  793. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tui/src/app/plans.rs +0 -0
  794. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tui/src/app/render.rs +0 -0
  795. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tui/src/app/reports.rs +0 -0
  796. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tui/src/app/sessions.rs +0 -0
  797. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tui/src/app/settings_ui.rs +0 -0
  798. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tui/src/app/sidebar.rs +0 -0
  799. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tui/src/app/terminal.rs +0 -0
  800. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tui/src/app/tests.rs +0 -0
  801. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tui/src/app/types.rs +0 -0
  802. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tui/src/app/workspace.rs +0 -0
  803. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tui/src/bin/gtk.rs +0 -0
  804. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tui/src/commands.rs +0 -0
  805. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tui/src/lib.rs +0 -0
  806. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tui/src/main.rs +0 -0
  807. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tui/src/settings.rs +0 -0
  808. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tui/tests/acceptance.rs +0 -0
  809. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/tui/tests/cli.rs +0 -0
  810. {code_coordinator-0.5.224 → code_coordinator-0.5.226}/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.224
3
+ Version: 0.5.226
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.224
3
+ Version: 0.5.226
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.224",
2
+ "tag": "0.5.226",
3
3
  "distance": 0,
4
- "node": "gcb4f4b8b669bb9319880ac1b1b10496b1131b557",
4
+ "node": "g5d9d29d644034da774ad69d43b80e31f9a89bcfc",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-22"
@@ -333,6 +333,45 @@ class ConfirmationResult:
333
333
  return self.kind in INCONCLUSIVE_KINDS
334
334
 
335
335
 
336
+ def write_confirmation_output(assignment_id: str, result: ConfirmationResult) -> Path | None:
337
+ """Persist a confirmation run's captured output tail for the fix briefing (#2563).
338
+
339
+ ``coord fix`` (:mod:`coord.commands.plan_followup`) already prefers
340
+ ``COORD_DIR/test_output/<assignment_id>.txt`` over every other evidence
341
+ source when it composes an escalated fix worker's briefing — `coord test
342
+ --fail --output` (:mod:`coord.commands.test_gate`) has written it there
343
+ since #1337. Before this function existed, a #2464 refutation captured
344
+ ``result.output`` (already bounded to a tail by :func:`_tail` in
345
+ :func:`_classify_failure` / :func:`_timeout_output`) and then only ever
346
+ handed it to ``log.warning`` — the fix worker got a one-line reason and no
347
+ failing test names, no tracebacks, and had to re-derive the diagnosis the
348
+ daemon already held in memory.
349
+
350
+ *assignment_id* is the parent **work** row's id (the one the fix leg is
351
+ spawned from), not the confirming smoke transition's id — same key
352
+ :func:`coord.commands.plan_followup.fix` reads back by.
353
+
354
+ A no-op, returning ``None``, when there is nothing to write (``KIND_OK``
355
+ and ``KIND_SETUP`` both carry an empty ``.output`` — the former because
356
+ nothing failed, the latter because no command ever ran) or when the write
357
+ itself fails (a read-only ``COORD_DIR``, a full disk, ...); this must
358
+ never break verdict recording, which is why the caller in
359
+ :mod:`coord.notify` treats it as best-effort.
360
+ """
361
+ if not result.output:
362
+ return None
363
+ from coord.state import COORD_DIR # noqa: PLC0415
364
+
365
+ try:
366
+ test_output_dir = COORD_DIR / "test_output"
367
+ test_output_dir.mkdir(parents=True, exist_ok=True)
368
+ stored = test_output_dir / f"{assignment_id}.txt"
369
+ stored.write_text(result.output)
370
+ except OSError:
371
+ return None
372
+ return stored
373
+
374
+
336
375
  def confirmation_enabled(config=None) -> bool:
337
376
  """Whether Test-stage PASS claims get independently confirmed.
338
377
 
@@ -488,6 +527,29 @@ def unmet_confirmation_capabilities(
488
527
  return [cap for cap in match_rules(touched, rules) if cap not in have]
489
528
 
490
529
 
530
+ def _timeout_output(exc: subprocess.TimeoutExpired) -> str:
531
+ """Partial stdout/stderr captured before a confirmation command timed out.
532
+
533
+ ``subprocess.run(..., capture_output=True, timeout=...)`` fills ``.stdout``
534
+ / ``.stderr`` in on `TimeoutExpired` — the child had already written
535
+ *something* by the deadline — but the two `except subprocess.TimeoutExpired`
536
+ arms in :func:`confirm_branch` discarded it entirely, so a TIMEOUT verdict
537
+ carried strictly less evidence than BASELINE_RED/SIGNAL did even though the
538
+ same partial output was sitting right there on the exception (#2563).
539
+ Guards for ``None``/bytes since a test's stand-in *runner* seam may raise a
540
+ bare ``TimeoutExpired(cmd, timeout)`` with neither attribute set.
541
+ """
542
+ out = getattr(exc, "stdout", None) or ""
543
+ err = getattr(exc, "stderr", None) or ""
544
+ if isinstance(out, bytes):
545
+ out = out.decode("utf-8", errors="replace")
546
+ if isinstance(err, bytes):
547
+ err = err.decode("utf-8", errors="replace")
548
+ if not out and not err:
549
+ return ""
550
+ return _tail(out + "\n" + err)
551
+
552
+
491
553
  def _classify_failure(
492
554
  stage: str, returncode: int, output: str, worktree: Path, command: str,
493
555
  ) -> ConfirmationResult:
@@ -741,7 +803,7 @@ def confirm_branch(
741
803
  echo(f" confirming build: {build_command}")
742
804
  try:
743
805
  built = run_cmd(build_command, wt_path, _left())
744
- except subprocess.TimeoutExpired:
806
+ except subprocess.TimeoutExpired as exc:
745
807
  return ConfirmationResult(
746
808
  kind=KIND_TIMEOUT,
747
809
  reason=(
@@ -749,6 +811,7 @@ def confirm_branch(
749
811
  "suite that did not finish says nothing about the "
750
812
  "branch"
751
813
  ),
814
+ output=_timeout_output(exc),
752
815
  command=build_command,
753
816
  worktree=wt_path,
754
817
  )
@@ -780,13 +843,14 @@ def confirm_branch(
780
843
  echo(f" confirming tests: {test_command}")
781
844
  try:
782
845
  tested = run_cmd(test_command, wt_path, _left())
783
- except subprocess.TimeoutExpired:
846
+ except subprocess.TimeoutExpired as exc:
784
847
  return ConfirmationResult(
785
848
  kind=KIND_TIMEOUT,
786
849
  reason=(
787
850
  f"confirmation suite timed out after {timeout}s — a "
788
851
  "suite that did not finish says nothing about the branch"
789
852
  ),
853
+ output=_timeout_output(exc),
790
854
  command=test_command,
791
855
  worktree=wt_path,
792
856
  )
@@ -835,4 +899,5 @@ __all__ = [
835
899
  "notify_client_timeout_seconds",
836
900
  "spend_confirmation_budget",
837
901
  "unmet_confirmation_capabilities",
902
+ "write_confirmation_output",
838
903
  ]
@@ -2011,7 +2011,7 @@ def _run_pass_confirmation(transition: Transition, entry: dict):
2011
2011
 
2012
2012
 
2013
2013
  def _confirmed_pass_verdict(
2014
- transition: Transition, entry: dict, *, claim_reason: str,
2014
+ transition: Transition, entry: dict, parent_id: str, *, claim_reason: str,
2015
2015
  ) -> tuple[str, str]:
2016
2016
  """#2464: the ``(test_state, test_reason)`` to record for a *claimed* pass.
2017
2017
 
@@ -2033,7 +2033,19 @@ def _confirmed_pass_verdict(
2033
2033
  #2464, with ``UNCONFIRMED`` in the reason so the row says plainly that
2034
2034
  nobody checked. See :mod:`coord.confirm_test` on why a missing toolchain,
2035
2035
  a missing checkout or a timeout must never read as a failing branch.
2036
+
2037
+ #2563: whatever output the run captured — failing node ids, the
2038
+ assertion, tracebacks — is also persisted to *parent_id*'s
2039
+ ``test_output/<id>.txt`` (:func:`coord.confirm_test.write_confirmation_output`)
2040
+ before this returns, so the escalated fix worker's briefing
2041
+ (`coord/commands/plan_followup.py`, which already reads that file ahead of
2042
+ every other evidence source) quotes the real failure instead of the
2043
+ one-line *reason* alone. ``test_reason`` on the row stays exactly that
2044
+ one-line summary — #1337 deliberately keeps unbounded free text out of the
2045
+ board upsert, and this does not undo that; the file is the long form.
2036
2046
  """
2047
+ from coord.confirm_test import write_confirmation_output # noqa: PLC0415
2048
+
2037
2049
  result = _run_pass_confirmation(transition, entry)
2038
2050
 
2039
2051
  if result is None:
@@ -2044,6 +2056,24 @@ def _confirmed_pass_verdict(
2044
2056
  "(#2464).",
2045
2057
  )
2046
2058
 
2059
+ # Best-effort and unconditional on *kind*: REFUTED/BASELINE-RED/TIMEOUT/
2060
+ # INFRA/SIGNAL all carry a captured tail (`ConfirmationResult.output`) worth
2061
+ # keeping around; CONFIRMED and setup-stage inconclusives carry none, so
2062
+ # this is simply a no-op for them (`write_confirmation_output` checks
2063
+ # `.output` itself, and swallows `OSError`). Wrapped again here — this
2064
+ # runs inside the reap loop, and this whole module's standing rule is that
2065
+ # nothing in it may abandon a transition; a write failure must degrade to
2066
+ # "no file", never to a dropped verdict.
2067
+ try:
2068
+ write_confirmation_output(parent_id, result)
2069
+ except Exception as exc: # noqa: BLE001
2070
+ log.warning(
2071
+ "smoke %s: could not persist confirmation output for parent %s "
2072
+ "(%s) — the fix briefing will fall back to the one-line reason "
2073
+ "(#2563).",
2074
+ transition.assignment_id, parent_id, exc,
2075
+ )
2076
+
2047
2077
  if result.refuted:
2048
2078
  log.warning(
2049
2079
  "smoke %s: REFUTED the pass claim for %s — %s\n%s",
@@ -2153,7 +2183,7 @@ def _record_smoke_verdict(
2153
2183
  # claim would leave no trace it ever happened — including on the
2154
2184
  # next reap of the same already-passed parent.
2155
2185
  state, reason = _confirmed_pass_verdict(
2156
- transition, entry,
2186
+ transition, entry, parent_id,
2157
2187
  claim_reason="worker self-recorded via `coord test` (#2217)",
2158
2188
  )
2159
2189
  record_test_verdict(
@@ -2228,7 +2258,8 @@ def _record_smoke_verdict(
2228
2258
  # never finished polling (#2272/#2301). Confirm it against a real run
2229
2259
  # before it becomes a merge-gate-satisfying verdict.
2230
2260
  state, reason = _confirmed_pass_verdict(
2231
- transition, entry, claim_reason="headless smoke reported SMOKE: pass",
2261
+ transition, entry, parent_id,
2262
+ claim_reason="headless smoke reported SMOKE: pass",
2232
2263
  )
2233
2264
  record_test_verdict(
2234
2265
  assignment_id=parent_id,
@@ -203,6 +203,7 @@ def reconcile_completed_assignments(
203
203
  agent_status_fn=_query_agent,
204
204
  update_state_fn=None,
205
205
  capture_plan: bool = True,
206
+ commits_ahead_fn=None,
206
207
  ) -> list[dict]:
207
208
  """Dispatch-free passive completion reconcile (#625).
208
209
 
@@ -275,9 +276,22 @@ def reconcile_completed_assignments(
275
276
  The fix is a positive disproof: ``/status`` carries both ``active`` and
276
277
  ``completed``, and an id in NEITHER is a statement about the agent's state,
277
278
  not an inference from its silence. Those — and only those — are
278
- reconciled, to ``failed`` (never ``done``) with :data:`NO_AGENT_RECORD_
279
- REASON`. See :func:`agent_has_no_record` and
280
- :func:`_reconcile_no_agent_record`.
279
+ reconciled, never to ``done``, with :data:`NO_AGENT_RECORD_REASON`. See
280
+ :func:`agent_has_no_record` and :func:`_reconcile_no_agent_record`.
281
+
282
+ **#2553 — "the agent forgot" is not "the work is gone".** The arm above
283
+ used to record ``failed`` unconditionally, but "the agent has no record"
284
+ is evidence about the agent's memory, not about the work: a
285
+ :data:`~coord.models.WORK_LIKE_TYPES` row's own ``branch`` is the one
286
+ artifact in this path that survives an agent restart, a machine reboot,
287
+ and the 25-entry completion-history cap, and the board row already has
288
+ its name. :func:`_reconcile_no_agent_record` now consults it
289
+ (``commits_ahead_fn``, defaulting to :func:`coord.github_ops.
290
+ branch_commits_ahead_for_assignment`) before choosing ``failed`` — a
291
+ branch with real commits ahead of its base lands on ``advisory`` instead
292
+ (work exists, provenance unverified, needs a human or a verify pass),
293
+ naming the branch in the reason so an operator doesn't have to go
294
+ spelunking for it.
281
295
 
282
296
  Three guards, because **this arm reaps** and #1658 is what getting that
283
297
  wrong looks like in production:
@@ -301,6 +315,12 @@ def reconcile_completed_assignments(
301
315
  #1421's handler) — and there the workers really are gone, so reconciling
302
316
  every row on that machine is the correct answer rather than an accident.
303
317
 
318
+ ``commits_ahead_fn`` (#2553) is the injectable seam for the branch check
319
+ above — ``fn(assignment, config) -> int | None`` — defaulting to
320
+ :func:`coord.github_ops.branch_commits_ahead_for_assignment`. Tests stub
321
+ it to avoid a real ``gh`` call, exactly like ``agent_status_fn`` stubs the
322
+ real agent poll.
323
+
304
324
  Returns one dict per reconciled assignment (empty when nothing changed).
305
325
  """
306
326
  if update_state_fn is None:
@@ -308,6 +328,11 @@ def reconcile_completed_assignments(
308
328
 
309
329
  update_state_fn = _update_local_state
310
330
 
331
+ if commits_ahead_fn is None:
332
+ from coord import github_ops # noqa: PLC0415
333
+
334
+ commits_ahead_fn = github_ops.branch_commits_ahead_for_assignment
335
+
311
336
  if board is None:
312
337
  from coord.state import build_board # noqa: PLC0415
313
338
 
@@ -352,7 +377,10 @@ def reconcile_completed_assignments(
352
377
  and not is_attended_session(a)
353
378
  and _no_record_grace_elapsed(a)
354
379
  ):
355
- _reconcile_no_agent_record(a, aid, update_state_fn, reconciled)
380
+ _reconcile_no_agent_record(
381
+ a, aid, update_state_fn, reconciled,
382
+ config=config, commits_ahead_fn=commits_ahead_fn,
383
+ )
356
384
  continue
357
385
  # #1534: `effective_agent_status` refuses an agent-reported `done`
358
386
  # that also carries a usage-limit-kill reason — the daemon's passive
@@ -516,49 +544,123 @@ def reconcile_completed_assignments(
516
544
  return reconciled
517
545
 
518
546
 
547
+ def _no_agent_record_branch_reason(branch: str, ahead: int) -> str:
548
+ """#2553's operator-facing reason for the "work is on the branch" half.
549
+
550
+ Distinct from :data:`NO_AGENT_RECORD_REASON` (the "nothing was pushed"
551
+ half) precisely so the two are told apart at a glance — the acceptance
552
+ bar for #2553 is that the reason NAMES the branch rather than making an
553
+ operator go looking for it, since that branch is the whole point: it is
554
+ the one artifact of this leg that survived the agent's amnesia.
555
+ """
556
+ return (
557
+ "agent has no record of this assignment (present in neither its "
558
+ "/status `active` nor `completed` list), but its branch "
559
+ f"`{branch}` has {ahead} commit(s) ahead of its base — the worker "
560
+ "pushed real work before the agent's record of it was lost. "
561
+ "Provenance is unverified (no worker ever reported a verdict), so "
562
+ "this is recorded as advisory rather than failed: it needs a human "
563
+ "or a verify pass, not to be discarded (#2553)"
564
+ )
565
+
566
+
519
567
  def _reconcile_no_agent_record(
520
568
  a: Assignment,
521
569
  aid: str,
522
570
  update_state_fn,
523
571
  reconciled: list[dict],
572
+ *,
573
+ config: Config,
574
+ commits_ahead_fn,
524
575
  ) -> None:
525
- """#2275: flip a ``running`` row the agent has no record of to ``failed``.
576
+ """#2275: flip a ``running`` row the agent has no record of to a terminal
577
+ status — ``failed`` by default, or ``advisory`` when #2553's branch check
578
+ below finds the row's own branch outlived the agent's amnesia.
526
579
 
527
580
  Called from :func:`reconcile_completed_assignments` only, and only once
528
581
  all three guards there have passed (positive disproof, not attended, past
529
582
  the grace window).
530
583
 
531
- **``failed``, never ``done``.** This leg never reported a verdict, so the
532
- one thing that must not happen is a silent flip to ``done`` — that
533
- manufactures a pass and every downstream gate (review dispatch, the
534
- acceptance gate, the merge queue) then behaves as if a slice exists that
535
- nobody ever produced. A stall is bad; a manufactured pass is worse.
536
- ``failure_reason`` is the pinned :data:`NO_AGENT_RECORD_REASON`, so
537
- ``coord status``/the TUI/``coord drive`` all name the cause rather than
538
- showing a failure with no explanation.
539
-
540
- ``exit_code`` is deliberately left ``None``: there is no reap, so there is
541
- no exit code, and writing a fake one would be the same class of lie as
542
- writing ``done``.
584
+ **Never ``done``.** This leg never reported a verdict, so the one thing
585
+ that must not happen — regardless of which terminal status below fires —
586
+ is a silent flip to ``done``: that manufactures a pass and every
587
+ downstream gate (review dispatch, the acceptance gate, the merge queue)
588
+ then behaves as if a slice exists that nobody ever produced. A stall is
589
+ bad; a manufactured pass is worse.
590
+
591
+ **#2553 — "the agent forgot" is evidence about the agent, not the work.**
592
+ Before this, every row reaching here was unconditionally recorded
593
+ ``failed`` with :data:`NO_AGENT_RECORD_REASON`, even when the row's own
594
+ ``branch`` carried real, pushed commits — stranding that work with no
595
+ second chance (most visible on ``test-author``, whose sealed-path rule
596
+ means nothing else will ever pick the branch back up; see
597
+ claude-coordinator#2553, ``coord-portal``#129 assignment
598
+ ``c2120f7206ec``). The branch is the one artifact in this whole path
599
+ that survives an agent restart, a machine reboot, and the 25-entry
600
+ completion-history cap, and the board row already names it — so this now
601
+ asks it directly via ``commits_ahead_fn(a, config)`` before choosing:
602
+
603
+ * Only for :data:`~coord.models.WORK_LIKE_TYPES` (``work``,
604
+ ``mock-author``, ``test-author``) — the types whose ``a.branch`` holds
605
+ commits THIS row itself produced. A ``smoke``/``review`` row's
606
+ ``branch`` is inherited verbatim from the work it rides on (e.g.
607
+ ``coord.smoke.dispatch_pending_smoke`` stamps
608
+ ``branch=completed.branch``), so "commits ahead of base" there would
609
+ just be re-discovering the PARENT's diff, not anything this leg
610
+ produced — checking it would misfire the #2208 smoke path (a dead Test
611
+ leg on an already-green branch) into ``advisory`` instead of the
612
+ environmental clear it needs.
613
+ * A positive, known commit count (``ahead`` a plain ``int > 0``) is the
614
+ only thing that moves the needle, to ``advisory`` with
615
+ :func:`_no_agent_record_branch_reason` (which names the branch).
616
+ Anything else — no branch, a non-``WORK_LIKE_TYPES`` row, ``ahead ==
617
+ 0``, or ``ahead is None`` (unknown: the repo isn't in ``config``, the
618
+ remote call failed, ...) — keeps the pre-#2553 behaviour: ``failed``
619
+ with :data:`NO_AGENT_RECORD_REASON`. Unknown fails CLOSED toward
620
+ ``failed`` rather than guessing ``advisory``, matching this arm's
621
+ existing polarity: a stall is recoverable, a manufactured verdict of
622
+ either kind is not the thing to guess at.
623
+ * ``commits_ahead_fn`` is called defensively — a network hiccup querying
624
+ the remote must not crash the passive daemon tick any more than an
625
+ unreachable agent does elsewhere in this module.
626
+
627
+ ``exit_code`` is deliberately left ``None`` in both cases: there is no
628
+ reap, so there is no exit code, and writing a fake one would be the same
629
+ class of lie as writing ``done``.
543
630
 
544
631
  Kept passive, per this module's #1616 contract — it writes state through
545
- the same ``update_state_fn`` seam and dispatches nothing. The ONE thing
546
- it does beyond the write is the #1605 Test-stage propagation, which is not
547
- a new side effect: it is the same call the ordinary ``terminal ==
548
- "failed"`` path already makes, and skipping it would leave the parent
549
- work row's ``test_state="running"`` forever — i.e. it would fix half of
550
- #2208 and leave the other half stranded.
632
+ the same ``update_state_fn`` seam and dispatches nothing. The commits-
633
+ ahead check is a read, not a mutation, and it decides between two
634
+ non-dispatching terminal states — it does not advance the pipeline any
635
+ more than the write itself does. The #1605 Test-stage propagation below
636
+ is not a new side effect either: it is the same call the ordinary
637
+ ``terminal == "failed"`` path already makes, and skipping it would leave
638
+ the parent work row's ``test_state="running"`` forever — i.e. it would
639
+ fix half of #2208 and leave the other half stranded.
551
640
  """
641
+ terminal_status = "failed"
642
+ reason = NO_AGENT_RECORD_REASON
643
+ branch = (a.branch or "").strip()
644
+
645
+ if branch and a.type in WORK_LIKE_TYPES:
646
+ try:
647
+ ahead = commits_ahead_fn(a, config)
648
+ except Exception: # noqa: BLE001 — best-effort; unknown → failed below
649
+ ahead = None
650
+ if isinstance(ahead, int) and not isinstance(ahead, bool) and ahead > 0:
651
+ terminal_status = "advisory"
652
+ reason = _no_agent_record_branch_reason(branch, ahead)
653
+
552
654
  update_state_fn(
553
655
  assignment_id=aid,
554
- terminal_status="failed",
656
+ terminal_status=terminal_status,
555
657
  branch=a.branch,
556
658
  review_state=None,
557
- failure_reason=NO_AGENT_RECORD_REASON,
659
+ failure_reason=reason,
558
660
  exit_code=None,
559
661
  )
560
662
 
561
- if a.type == "smoke":
663
+ if a.type == "smoke" and terminal_status == "failed":
562
664
  # #2275: environmental by construction, so state it rather than
563
665
  # letting `classify_failure` guess. `NO_AGENT_RECORD_REASON` is
564
666
  # coordinator-authored prose with no wire token in it, so the
@@ -569,9 +671,12 @@ def _reconcile_no_agent_record(
569
671
  # vanished worker is the machine's fault, not the work's; clearing
570
672
  # the verdict lets `dispatch_pending_smoke` re-run the Test stage on
571
673
  # its next tick, which is exactly what a human did in 14 minutes.
674
+ # (`terminal_status` is always "failed" for `smoke` in practice — the
675
+ # branch check above only ever fires for WORK_LIKE_TYPES — but the
676
+ # guard keeps this correct even if that scoping ever changes.)
572
677
  propagate_smoke_terminal_failure(
573
678
  parent_assignment_id=a.review_of_assignment_id,
574
- failure_reason=NO_AGENT_RECORD_REASON,
679
+ failure_reason=reason,
575
680
  environmental=True,
576
681
  )
577
682
 
@@ -581,9 +686,9 @@ def _reconcile_no_agent_record(
581
686
  "issue_number": a.issue_number,
582
687
  "repo": a.repo_name,
583
688
  "type": a.type,
584
- "to_status": "failed",
689
+ "to_status": terminal_status,
585
690
  "plan_captured": False,
586
- "reason": NO_AGENT_RECORD_REASON,
691
+ "reason": reason,
587
692
  }
588
693
  )
589
694
 
@@ -299,6 +299,30 @@ class TestConfirmBranch:
299
299
  assert result.refuted is False
300
300
  assert result.inconclusive is True
301
301
 
302
+ def test_timeout_captures_the_partial_output_before_the_kill(
303
+ self, checkout: Path
304
+ ) -> None:
305
+ """#2563: a timed-out suite still says SOMETHING — whatever it had
306
+ printed by the deadline. `subprocess.run(capture_output=True,
307
+ timeout=...)` fills `TimeoutExpired.stdout`/`.stderr` in on the way
308
+ out; before this, `confirm_branch` discarded both and a TIMEOUT
309
+ verdict carried strictly less evidence than a real failure did.
310
+ """
311
+ runner = _ScriptedRunner(
312
+ default=subprocess.TimeoutExpired(
313
+ cmd="run-the-suite", timeout=1,
314
+ output="tests/test_x.py::test_a PASSED\ntests/test_x.py::test_b ",
315
+ stderr="Traceback (hung mid-test)",
316
+ )
317
+ )
318
+ result = ct.confirm_branch(
319
+ "api", BRANCH, _StubConfig(repo_path=str(checkout)), runner=runner,
320
+ )
321
+
322
+ assert result.kind == KIND_TIMEOUT, result.reason
323
+ assert "test_a PASSED" in result.output
324
+ assert "Traceback (hung mid-test)" in result.output
325
+
302
326
  def test_signal_killed_suite_is_inconclusive_not_a_refutation(
303
327
  self, checkout: Path
304
328
  ) -> None:
@@ -592,6 +616,54 @@ class TestConfirmationEnabled:
592
616
  assert ct.confirmation_enabled(object()) is True
593
617
 
594
618
 
619
+ class TestWriteConfirmationOutput:
620
+ """#2563: the missing write — a confirmation's captured tail must reach
621
+ ``COORD_DIR/test_output/<assignment_id>.txt``, the same file `coord fix`
622
+ (`coord/commands/plan_followup.py`) already prefers over every other
623
+ evidence source when composing an escalated fix worker's briefing.
624
+ """
625
+
626
+ def test_writes_the_output_tail_keyed_by_assignment_id(
627
+ self, isolated_coord_dir: Path
628
+ ) -> None:
629
+ result = ct.ConfirmationResult(
630
+ kind=KIND_SUITE,
631
+ reason="the independently-run suite command FAILED (exit 1)",
632
+ output="tests/test_x.py::test_a FAILED\nE assert 0 == 1",
633
+ returncode=1,
634
+ )
635
+
636
+ stored = ct.write_confirmation_output("work-1", result)
637
+
638
+ expected = isolated_coord_dir / "test_output" / "work-1.txt"
639
+ assert stored == expected
640
+ assert expected.read_text() == result.output
641
+
642
+ def test_no_op_when_the_result_carries_no_output(
643
+ self, isolated_coord_dir: Path
644
+ ) -> None:
645
+ """`KIND_OK` (confirmed) and setup-stage inconclusives carry an empty
646
+ `.output` — nothing to persist, and nothing should be written."""
647
+ result = ct.ConfirmationResult(kind=KIND_OK, reason="passed", output="")
648
+
649
+ stored = ct.write_confirmation_output("work-1", result)
650
+
651
+ assert stored is None
652
+ assert not (isolated_coord_dir / "test_output").exists()
653
+
654
+ def test_a_write_failure_returns_none_rather_than_raising(
655
+ self, isolated_coord_dir: Path
656
+ ) -> None:
657
+ """This runs inside the reap path (`coord.notify`) — a read-only
658
+ `COORD_DIR`, a full disk, or any other `OSError` must degrade to "no
659
+ file", never abandon the verdict it is attached to."""
660
+ # A file sitting where the directory needs to go makes `mkdir` raise.
661
+ (isolated_coord_dir / "test_output").write_text("not a directory")
662
+ result = ct.ConfirmationResult(kind=KIND_SUITE, reason="x", output="boom")
663
+
664
+ assert ct.write_confirmation_output("work-1", result) is None
665
+
666
+
595
667
  # ── the wiring: end to end through post_transition ───────────────────────────
596
668
 
597
669
 
@@ -714,6 +786,51 @@ class TestSmokeVerdictIsConfirmed:
714
786
  f"guessing: {row['test_reason']!r}"
715
787
  )
716
788
 
789
+ def test_refutation_leaves_the_captured_tail_for_the_fix_briefing(
790
+ self, coord_db, tmp_path: Path, isolated_coord_dir: Path
791
+ ) -> None:
792
+ """#2563: before this, `result.output` reached `log.warning` and
793
+ nowhere else — the escalated fix worker got a one-line reason and no
794
+ failing test names, no tracebacks. `coord fix`
795
+ (`coord/commands/plan_followup.py:962`) reads
796
+ `COORD_DIR/test_output/<parent_work_id>.txt` ahead of every other
797
+ evidence source, so that is where the captured tail must land — keyed
798
+ by the WORK row's id (`work-1`), not the confirming smoke
799
+ transition's (`smoke-1`), since that is the assignment a fix leg is
800
+ spawned from.
801
+ """
802
+ self._record_work()
803
+ self._record_smoke()
804
+ transition, record, entry = self._transition(tmp_path, "SMOKE: pass")
805
+ captured_output = (
806
+ "tests/test_drive.py::test_a_dead_end_exit_code_reaches_the_"
807
+ "drive_exited_audit_row FAILED\n"
808
+ "tests/test_drive.py:2581: in "
809
+ "test_a_dead_end_exit_code_reaches_the_drive_exited_audit_row\n"
810
+ " assert len(escalations) == 1\n"
811
+ "E assert 0 == 1"
812
+ )
813
+
814
+ self._reap(
815
+ transition, record, entry,
816
+ ct.ConfirmationResult(
817
+ kind=KIND_SUITE,
818
+ reason="the independently-run suite command FAILED (exit 1)",
819
+ output=captured_output,
820
+ returncode=1,
821
+ ),
822
+ )
823
+
824
+ stored = isolated_coord_dir / "test_output" / "work-1.txt"
825
+ assert stored.exists(), (
826
+ "a refuted pass claim must leave the captured tail at "
827
+ f"{stored} for `coord fix` to read"
828
+ )
829
+ assert stored.read_text() == captured_output
830
+ # And nothing lands under the smoke leg's OWN id — `coord fix` is
831
+ # dispatched against the work row, not the smoke transition.
832
+ assert not (isolated_coord_dir / "test_output" / "smoke-1.txt").exists()
833
+
717
834
  def test_self_recorded_pass_is_overturned_by_a_failing_real_run(
718
835
  self, coord_db, tmp_path: Path
719
836
  ) -> None:
@@ -850,9 +967,14 @@ class TestSmokeVerdictIsConfirmed:
850
967
  )
851
968
 
852
969
  def test_baseline_red_confirmation_records_skipped(
853
- self, coord_db, tmp_path: Path
970
+ self, coord_db, tmp_path: Path, isolated_coord_dir: Path
854
971
  ) -> None:
855
- """#2170's convention: not the branch's fault, so no fix round burns."""
972
+ """#2170's convention: not the branch's fault, so no fix round burns.
973
+
974
+ #2563: a `skipped` verdict whose evidence is unreadable is only
975
+ marginally better than a bare one — the baseline-red tail gets the
976
+ same test_output-file treatment as a REFUTED one.
977
+ """
856
978
  self._record_work()
857
979
  self._record_smoke()
858
980
  transition, record, entry = self._transition(tmp_path, "SMOKE: pass")
@@ -860,7 +982,9 @@ class TestSmokeVerdictIsConfirmed:
860
982
  self._reap(
861
983
  transition, record, entry,
862
984
  ct.ConfirmationResult(
863
- kind=KIND_BASELINE_RED, reason="every failure reproduces on the base",
985
+ kind=KIND_BASELINE_RED,
986
+ reason="every failure reproduces on the base",
987
+ output="tests/test_x.py::test_a FAILED (also red on main)",
864
988
  ),
865
989
  )
866
990
 
@@ -868,6 +992,8 @@ class TestSmokeVerdictIsConfirmed:
868
992
  assert row["test_state"] == "skipped", (
869
993
  f"expected 'skipped' for a red baseline, got {row['test_state']!r}"
870
994
  )
995
+ stored = isolated_coord_dir / "test_output" / "work-1.txt"
996
+ assert stored.read_text() == "tests/test_x.py::test_a FAILED (also red on main)"
871
997
 
872
998
  def test_a_fail_marker_does_not_spend_a_confirmation_run(
873
999
  self, coord_db, tmp_path: Path
@@ -2557,6 +2557,12 @@ def test_a_dead_end_exit_code_reaches_the_drive_exited_audit_row(
2557
2557
  monkeypatch.setattr(
2558
2558
  "coord.drive.Driver._post_escalation_comment", lambda *a, **kw: None
2559
2559
  )
2560
+ # Pin `coord_argv()`'s prefix to a single element so the `c[1:3]` slice
2561
+ # below is decided by the code under test, not by whether `coord` is on
2562
+ # the *host's* $PATH (#2564) — off-PATH, `coord_argv()`'s documented
2563
+ # fallback is `[sys.executable, "-m", "coord.cli"]`, three elements, which
2564
+ # shifts every recorded argv's ["escalate", "record"] out of [1:3].
2565
+ monkeypatch.setenv("COORD_DRIVE_COORD_BIN", "coord")
2560
2566
  payload = board(status="done", test_state="passed")
2561
2567
  payload["assignments"].append({
2562
2568
  "repo_name": REPO,
@@ -2689,7 +2689,7 @@ class TestConfirmedPassVerdictSignalKill:
2689
2689
  "coord.notify._run_pass_confirmation", return_value=killed,
2690
2690
  ):
2691
2691
  state, reason = _confirmed_pass_verdict(
2692
- self._transition(), entry, claim_reason="SMOKE: pass",
2692
+ self._transition(), entry, "work-1", claim_reason="SMOKE: pass",
2693
2693
  )
2694
2694
 
2695
2695
  assert state == "passed", (