code-coordinator 0.5.279__tar.gz → 0.5.281__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 (884) hide show
  1. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/code_coordinator.egg-info/scm_version.json +2 -2
  4. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/agent.py +5 -1
  5. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/commands/portal.py +15 -3
  6. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/decomposition_chat.py +100 -9
  7. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/portal_sync.py +26 -3
  8. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_decomposition_chat.py +131 -13
  9. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_portal_sync.py +46 -5
  10. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/.claude/commands/board.md +0 -0
  11. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/.claude/commands/complete-session.md +0 -0
  12. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/.claude/commands/coordinator.md +0 -0
  13. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/.githooks/_lib.sh +0 -0
  14. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/.githooks/post-checkout +0 -0
  15. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/.githooks/post-commit +0 -0
  16. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/.githooks/post-merge +0 -0
  17. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  18. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/.github/coord-ci-acceptance.yml +0 -0
  19. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/.github/workflows/auto-release.yml +0 -0
  20. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/.github/workflows/cargo-test.yml +0 -0
  21. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/.github/workflows/publish.yml +0 -0
  22. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/.github/workflows/test.yml +0 -0
  23. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/.gitignore +0 -0
  24. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/CLAUDE.md +0 -0
  25. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/GOAL.md +0 -0
  26. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/LICENSE +0 -0
  27. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/MANIFEST.in +0 -0
  28. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/README.md +0 -0
  29. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/code_coordinator.egg-info/SOURCES.txt +0 -0
  30. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/code_coordinator.egg-info/dependency_links.txt +0 -0
  31. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/code_coordinator.egg-info/entry_points.txt +0 -0
  32. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/code_coordinator.egg-info/requires.txt +0 -0
  33. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/code_coordinator.egg-info/scm_file_list.json +0 -0
  34. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/code_coordinator.egg-info/top_level.txt +0 -0
  35. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/__init__.py +0 -0
  36. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/_board_mapping.py +0 -0
  37. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/acceptance.py +0 -0
  38. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/acceptance_drivers.py +0 -0
  39. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/agent_app.py +0 -0
  40. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/agent_update.py +0 -0
  41. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/agents/opencode/.gitignore +0 -0
  42. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/agents/opencode/agents/work.md +0 -0
  43. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/agents/opencode/routing.jsonc +0 -0
  44. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/approved_work.py +0 -0
  45. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/audit.py +0 -0
  46. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/auto_loop.py +0 -0
  47. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/block_log.py +0 -0
  48. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/board_bool_guard.py +0 -0
  49. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/board_schema.py +0 -0
  50. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/board_service.py +0 -0
  51. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/board_wire.py +0 -0
  52. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/brain.py +0 -0
  53. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/branch_model.py +0 -0
  54. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/bug_intake.py +0 -0
  55. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/cargo_cache.py +0 -0
  56. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/ci_fix.py +0 -0
  57. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/ci_github.py +0 -0
  58. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/ci_gitlab.py +0 -0
  59. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/ci_store.py +0 -0
  60. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/claim.py +0 -0
  61. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/cli.py +0 -0
  62. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/client.py +0 -0
  63. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/commands/__init__.py +0 -0
  64. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/commands/_common.py +0 -0
  65. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/commands/acceptance.py +0 -0
  66. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/commands/agent_ops.py +0 -0
  67. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/commands/audit.py +0 -0
  68. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/commands/chat.py +0 -0
  69. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/commands/dispatch.py +0 -0
  70. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/commands/dispatch_workers.py +0 -0
  71. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/commands/drive.py +0 -0
  72. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/commands/drive_queue.py +0 -0
  73. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/commands/gate_a.py +0 -0
  74. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/commands/gates.py +0 -0
  75. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/commands/issues.py +0 -0
  76. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/commands/lifecycle.py +0 -0
  77. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/commands/merge.py +0 -0
  78. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/commands/milestone.py +0 -0
  79. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/commands/plan_followup.py +0 -0
  80. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/commands/plans.py +0 -0
  81. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/commands/pr.py +0 -0
  82. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/commands/release.py +0 -0
  83. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/commands/repo.py +0 -0
  84. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/commands/report.py +0 -0
  85. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/commands/review.py +0 -0
  86. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/commands/scorecard.py +0 -0
  87. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/commands/sessions.py +0 -0
  88. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/commands/setup.py +0 -0
  89. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/commands/status.py +0 -0
  90. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/commands/store_migrate.py +0 -0
  91. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/commands/terminal.py +0 -0
  92. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/commands/test_gate.py +0 -0
  93. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/commands/tui.py +0 -0
  94. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/comments.py +0 -0
  95. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/config.py +0 -0
  96. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/config_reload.py +0 -0
  97. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/confirm_test.py +0 -0
  98. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/conflict_fix.py +0 -0
  99. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/dao.py +0 -0
  100. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/dashboard/__init__.py +0 -0
  101. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/dashboard/fixture.py +0 -0
  102. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/dashboard/index.html +0 -0
  103. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/dashboard/server.py +0 -0
  104. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/dashboard/terminal.py +0 -0
  105. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/db.py +0 -0
  106. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/dead_end.py +0 -0
  107. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/deploy/README.md +0 -0
  108. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/deploy/coord-agent.service +0 -0
  109. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/deploy/coord-db-backup.service +0 -0
  110. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/deploy/coord-db-backup.sh +0 -0
  111. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/deploy/coord-db-backup.timer +0 -0
  112. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/deploy/coord-drive-queue.service +0 -0
  113. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/deploy/coord-drive-queue.timer +0 -0
  114. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/deploy/coord-failure-notify.service +0 -0
  115. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/deploy/coord-fleet-watchdog.service +0 -0
  116. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/deploy/coord-fleet-watchdog.timer +0 -0
  117. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/deploy/coord-notify.service +0 -0
  118. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/deploy/coord-notify.timer +0 -0
  119. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/deploy/coord-release-propagate.service +0 -0
  120. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/deploy/coord-release-propagate.timer +0 -0
  121. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/deploy/coord-release-window.service +0 -0
  122. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/deploy/coord-release-window.timer +0 -0
  123. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/deploy/coord-serve.service +0 -0
  124. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/deploy/coord-web-dist-build.service +0 -0
  125. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/deploy/coord-web-dist-build.timer +0 -0
  126. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/deploy/coord-web.service +0 -0
  127. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/deploy_manifest.py +0 -0
  128. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/deploy_units.py +0 -0
  129. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/deps.py +0 -0
  130. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/diagnose.py +0 -0
  131. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/dispatch.py +0 -0
  132. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/dist_name.py +0 -0
  133. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/drive.py +0 -0
  134. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/drive_queue.py +0 -0
  135. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/drive_state.py +0 -0
  136. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/events.py +0 -0
  137. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/failure_class.py +0 -0
  138. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/filelock.py +0 -0
  139. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/fleet_config_health.py +0 -0
  140. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/forge_availability.py +0 -0
  141. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/freshness.py +0 -0
  142. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/gate_a.py +0 -0
  143. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/gate_b.py +0 -0
  144. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/gate_snapshot.py +0 -0
  145. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/gates.py +0 -0
  146. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/github_ops.py +0 -0
  147. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/github_throttle.py +0 -0
  148. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/goal.py +0 -0
  149. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/graph_health.py +0 -0
  150. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/health/__init__.py +0 -0
  151. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/health/aggregate.py +0 -0
  152. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/health/checks/__init__.py +0 -0
  153. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/health/checks/agent_install.py +0 -0
  154. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/health/checks/cargo_targets.py +0 -0
  155. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/health/checks/claude_binary.py +0 -0
  156. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/health/checks/coord_web_ci_pin.py +0 -0
  157. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/health/checks/deploy_lane_facts.py +0 -0
  158. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/health/checks/disk.py +0 -0
  159. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/health/checks/fleet_board.py +0 -0
  160. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  161. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/health/checks/fleet_phantom.py +0 -0
  162. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/health/checks/fleet_unit_drift.py +0 -0
  163. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/health/checks/graph.py +0 -0
  164. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/health/checks/graphify_cli.py +0 -0
  165. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/health/checks/index_lock.py +0 -0
  166. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/health/checks/issues_sync_staleness.py +0 -0
  167. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/health/checks/plan_usage.py +0 -0
  168. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/health/checks/release_cordon.py +0 -0
  169. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/health/checks/repo_state.py +0 -0
  170. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/health/checks/spawned_coord.py +0 -0
  171. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/health/checks/stalled_pipeline.py +0 -0
  172. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/health/checks/timer_active.py +0 -0
  173. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/health/checks/toolchain.py +0 -0
  174. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/health/checks/unit_drift.py +0 -0
  175. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/health/checks/unit_enablement.py +0 -0
  176. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/health/checks/worktrees.py +0 -0
  177. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/health/cli.py +0 -0
  178. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/health/context.py +0 -0
  179. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/health/fleet_snapshot.py +0 -0
  180. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/health/models.py +0 -0
  181. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/health/pypi.py +0 -0
  182. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/health/registry.py +0 -0
  183. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/health/render.py +0 -0
  184. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/health/units.py +0 -0
  185. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/hooks.py +0 -0
  186. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/housekeeping.py +0 -0
  187. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/interactive.py +0 -0
  188. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/issue_store.py +0 -0
  189. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/issues_sync_status.py +0 -0
  190. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/liveness_auditor.py +0 -0
  191. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/machine_pause.py +0 -0
  192. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/merge_queue.py +0 -0
  193. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/milestone_chat.py +0 -0
  194. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/milestone_dispatch.py +0 -0
  195. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/milestone_gate.py +0 -0
  196. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/milestone_order.py +0 -0
  197. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/mock_author.py +0 -0
  198. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/models.py +0 -0
  199. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/network.py +0 -0
  200. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/new_issue_chat.py +0 -0
  201. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/notifier/__init__.py +0 -0
  202. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/notifier/baseline.py +0 -0
  203. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/notifier/cli.py +0 -0
  204. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/notifier/collect.py +0 -0
  205. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/notifier/digest.py +0 -0
  206. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/notifier/models.py +0 -0
  207. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/notifier/predicate.py +0 -0
  208. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/notifier/service.py +0 -0
  209. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/notifier/store.py +0 -0
  210. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/notifier/transport.py +0 -0
  211. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/notify.py +0 -0
  212. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/openapi.py +0 -0
  213. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/overlap_fence.py +0 -0
  214. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/overlap_predict.py +0 -0
  215. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/parentage.py +0 -0
  216. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/parentage_github.py +0 -0
  217. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/pipeline.py +0 -0
  218. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/plan_parser.py +0 -0
  219. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/plans.py +0 -0
  220. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/platform_paths.py +0 -0
  221. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/portal_bridge.py +0 -0
  222. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/portal_store.py +0 -0
  223. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/pr_body_lint.py +0 -0
  224. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/prereqs.py +0 -0
  225. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/progress.py +0 -0
  226. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/providers/__init__.py +0 -0
  227. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/providers/base.py +0 -0
  228. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/providers/claude.py +0 -0
  229. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/providers/claude_pty.py +0 -0
  230. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/providers/opencode.py +0 -0
  231. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/queue_diagnose.py +0 -0
  232. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/reconcile.py +0 -0
  233. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/reconcile_tick.py +0 -0
  234. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/refine_chat.py +0 -0
  235. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/release_cordon.py +0 -0
  236. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/release_propagate.py +0 -0
  237. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/release_verify.py +0 -0
  238. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/release_window.py +0 -0
  239. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/repo_edit.py +0 -0
  240. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/repo_onboard.py +0 -0
  241. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/reports.py +0 -0
  242. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/rest_schema.py +0 -0
  243. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/revalidate.py +0 -0
  244. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/review.py +0 -0
  245. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/scorecard.py +0 -0
  246. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/self_health.py +0 -0
  247. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/serve_app.py +0 -0
  248. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  249. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  250. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  251. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  252. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  253. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/skills/portal-followup/SKILL.md +0 -0
  254. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/skills/release-now/SKILL.md +0 -0
  255. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  256. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  257. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/skills/update-issue/SKILL.md +0 -0
  258. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/smoke.py +0 -0
  259. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/spend_ceiling.py +0 -0
  260. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/split_work.py +0 -0
  261. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/sql.py +0 -0
  262. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/stage_projection.py +0 -0
  263. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/state.py +0 -0
  264. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/store_migrate.py +0 -0
  265. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/test_author.py +0 -0
  266. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/test_chat.py +0 -0
  267. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/test_orchestrator.py +0 -0
  268. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/test_report.py +0 -0
  269. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/tui_release.py +0 -0
  270. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/usage.py +0 -0
  271. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/usage_limits.py +0 -0
  272. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/usage_rollup.py +0 -0
  273. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coord/worker_events.py +0 -0
  274. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/coordinator.example.yml +0 -0
  275. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/deploy/coord-agent.service +0 -0
  276. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/deploy/coord-db-backup.service +0 -0
  277. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/deploy/coord-db-backup.sh +0 -0
  278. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/deploy/coord-db-backup.timer +0 -0
  279. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/deploy/coord-drive-queue.service +0 -0
  280. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/deploy/coord-drive-queue.timer +0 -0
  281. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/deploy/coord-failure-notify.service +0 -0
  282. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/deploy/coord-failure-notify.sh +0 -0
  283. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/deploy/coord-fleet-watchdog.service +0 -0
  284. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/deploy/coord-fleet-watchdog.timer +0 -0
  285. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/deploy/coord-notify.service +0 -0
  286. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/deploy/coord-notify.timer +0 -0
  287. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/deploy/coord-release-propagate.service +0 -0
  288. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/deploy/coord-release-propagate.timer +0 -0
  289. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/deploy/coord-release-window.service +0 -0
  290. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/deploy/coord-release-window.timer +0 -0
  291. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/deploy/coord-serve.service +0 -0
  292. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/deploy/coord-web-dist-build.service +0 -0
  293. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/deploy/coord-web-dist-build.sh +0 -0
  294. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/deploy/coord-web-dist-build.timer +0 -0
  295. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/deploy/coord-web-rollback.sh +0 -0
  296. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/deploy/coord-web.service +0 -0
  297. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/deploy/node-shim.sh +0 -0
  298. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  299. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/docs/ADR_COORD_WEB_CI.md +0 -0
  300. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/docs/ADR_COORD_WEB_DIST.md +0 -0
  301. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/docs/AGENT_OPERATIONS.md +0 -0
  302. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/docs/ARCHITECTURE.md +0 -0
  303. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/docs/ARCH_SECURITY_GATES.md +0 -0
  304. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/docs/COCKPIT.md +0 -0
  305. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/docs/CONTROL_CENTER.md +0 -0
  306. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/docs/COST_DISCIPLINE.md +0 -0
  307. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/docs/CROSS_PLATFORM.md +0 -0
  308. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/docs/CUSTOMER_FACING_APPS.md +0 -0
  309. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/docs/CUSTOMER_PORTAL.md +0 -0
  310. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/docs/DRIVE_QUEUE.md +0 -0
  311. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/docs/EPHEMERAL_WORKERS.md +0 -0
  312. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/docs/FORGE_MIGRATION.md +0 -0
  313. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/docs/GRAPHIFY_SETUP.md +0 -0
  314. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/docs/ISSUE_GUIDANCE.md +0 -0
  315. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/docs/MAC_MINI.md +0 -0
  316. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  317. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/docs/NOTIFIER.md +0 -0
  318. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/docs/OPENCODE_VERIFICATION.md +0 -0
  319. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/docs/OPERATING_GOTCHAS.md +0 -0
  320. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/docs/OPERATOR_GUIDES.md +0 -0
  321. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/docs/ORACLE_LOOP.md +0 -0
  322. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/docs/PHONE_WEBAPP.md +0 -0
  323. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/docs/PIPELINE_V2.md +0 -0
  324. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/docs/PLATFORM_EVOLUTION.md +0 -0
  325. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/docs/SECOND_BACKEND.md +0 -0
  326. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/docs/STORE_SERVICE.md +0 -0
  327. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  328. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/docs/WEB_CONTROL_CENTER.md +0 -0
  329. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/docs/WSL_WINDOWS_WORKER.md +0 -0
  330. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/docs/mocks/web/README.md +0 -0
  331. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/docs/mocks/web/_tokens.css +0 -0
  332. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/docs/mocks/web/issue-detail.html +0 -0
  333. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/docs/mocks/web/pipeline-narrow.html +0 -0
  334. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/docs/mocks/web/pipeline-wide.html +0 -0
  335. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/graphify-out/.gitignore +0 -0
  336. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/install-agent.sh +0 -0
  337. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/pyproject.toml +0 -0
  338. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/scripts/audit_review_verdict_overrides.py +0 -0
  339. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  340. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/scripts/azure-workers/build-worker-image.sh +0 -0
  341. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/scripts/azure-workers/coordinator-machine.py +0 -0
  342. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/scripts/azure-workers/epic-down.sh +0 -0
  343. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/scripts/azure-workers/epic-up.sh +0 -0
  344. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/scripts/azure-workers/preflight.sh +0 -0
  345. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/scripts/azure-workers/provision-worker.sh +0 -0
  346. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  347. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  348. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/scripts/azure-workers/verify-github-token.sh +0 -0
  349. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/scripts/check_gh_argv_containment.py +0 -0
  350. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/scripts/codegen.py +0 -0
  351. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/scripts/coord-test-runner.sh +0 -0
  352. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/scripts/coord-venv-rollback.sh +0 -0
  353. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/scripts/drive-batch.sh +0 -0
  354. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/scripts/fleet_watchdog.py +0 -0
  355. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/scripts/gen_board_fixture.py +0 -0
  356. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/scripts/gen_mock_index.py +0 -0
  357. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/scripts/next_release_tag.py +0 -0
  358. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/scripts/run_tests_in_populated_home.sh +0 -0
  359. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/scripts/run_tests_without_gh.sh +0 -0
  360. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/scripts/smoke_437_interactive.py +0 -0
  361. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/scripts/verify_878_review_capture.py +0 -0
  362. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/scripts/verify_release_published.py +0 -0
  363. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/scripts/verify_release_wheel.py +0 -0
  364. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/setup.cfg +0 -0
  365. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/SMOKE_SET.md +0 -0
  366. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/__init__.py +0 -0
  367. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/acceptance/ms-37/conftest.py +0 -0
  368. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/acceptance/ms-37/contract.md +0 -0
  369. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/acceptance/ms-37/manifest.yml +0 -0
  370. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  371. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  372. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/acceptance/ms-51/contract.md +0 -0
  373. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  374. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  375. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/acceptance/ms-51/manifest.yml +0 -0
  376. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  377. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/acceptance/ms-51/tsconfig.json +0 -0
  378. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  379. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/backends.py +0 -0
  380. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/conftest.py +0 -0
  381. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/fixtures/board-pipeline-basic.json +0 -0
  382. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  383. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  384. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  385. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  386. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/fixtures/playwright/all_pass.json +0 -0
  387. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  388. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/fixtures/playwright/mixed_fail.json +0 -0
  389. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  390. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  391. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/fixtures/playwright/skip.json +0 -0
  392. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/fixtures/playwright/truncated.json +0 -0
  393. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  394. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  395. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  396. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  397. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  398. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  399. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  400. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  401. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_acceptance.py +0 -0
  402. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_acceptance_drivers.py +0 -0
  403. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_agent.py +0 -0
  404. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_agent_api_error.py +0 -0
  405. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_agent_app.py +0 -0
  406. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_agent_branch_base.py +0 -0
  407. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_agent_branch_capture.py +0 -0
  408. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_agent_config_free_1712.py +0 -0
  409. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_agent_deploy_units_endpoint.py +0 -0
  410. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_agent_dirty_worktree.py +0 -0
  411. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  412. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_agent_graph_self_heal.py +0 -0
  413. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_agent_health_h3.py +0 -0
  414. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_agent_idle_restart.py +0 -0
  415. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_agent_push_failure.py +0 -0
  416. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_agent_reap.py +0 -0
  417. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_agent_repos_and_pull.py +0 -0
  418. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_agent_restart_services_endpoint.py +0 -0
  419. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_agent_skills_self_heal.py +0 -0
  420. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_agent_startup_diagnostics.py +0 -0
  421. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_agent_update.py +0 -0
  422. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_agent_update_bluegreen.py +0 -0
  423. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_agent_usage_limit.py +0 -0
  424. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_agent_zero_commit.py +0 -0
  425. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_ambient_home_isolation.py +0 -0
  426. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_approve_dependency_busy_2804.py +0 -0
  427. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_approve_reject_plan.py +0 -0
  428. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_approve_usage_gate.py +0 -0
  429. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_approved_work_2532.py +0 -0
  430. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_assignment_already_recorded_daemon.py +0 -0
  431. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_audit_log.py +0 -0
  432. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_audit_outcome.py +0 -0
  433. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_audit_query.py +0 -0
  434. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_auto_loop.py +0 -0
  435. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_auto_release_publish_2035.py +0 -0
  436. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_backend_selection.py +0 -0
  437. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_base_checkout_restore.py +0 -0
  438. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_block_log.py +0 -0
  439. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_board_cap_762.py +0 -0
  440. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_board_fixture.py +0 -0
  441. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_board_read_path.py +0 -0
  442. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_board_schema.py +0 -0
  443. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_board_service.py +0 -0
  444. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_board_state.py +0 -0
  445. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_board_wire.py +0 -0
  446. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_brain.py +0 -0
  447. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_branch_model.py +0 -0
  448. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_bug_intake.py +0 -0
  449. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_build_worker_image_env_update.py +0 -0
  450. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_cargo_cache.py +0 -0
  451. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_check_gh_argv_containment.py +0 -0
  452. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_ci_acceptance_gate_1950.py +0 -0
  453. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_ci_fix.py +0 -0
  454. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_ci_gitlab.py +0 -0
  455. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_ci_parity_2091.py +0 -0
  456. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_ci_store.py +0 -0
  457. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_claim.py +0 -0
  458. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_claude_md_budget.py +0 -0
  459. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_cli_acceptance.py +0 -0
  460. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_cli_assign.py +0 -0
  461. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  462. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_cli_assign_interactive_remote.py +0 -0
  463. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_cli_assign_provider.py +0 -0
  464. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  465. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_cli_audit.py +0 -0
  466. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_cli_chat_continue.py +0 -0
  467. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_cli_decide.py +0 -0
  468. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_cli_diagnose_config_provenance.py +0 -0
  469. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_cli_diagnose_forge_availability.py +0 -0
  470. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_cli_diagnose_graph.py +0 -0
  471. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_cli_diagnose_self.py +0 -0
  472. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_cli_doctor.py +0 -0
  473. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_cli_doctor_config_free_1801.py +0 -0
  474. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  475. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_cli_drive.py +0 -0
  476. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_cli_drive_queue.py +0 -0
  477. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_cli_escalate.py +0 -0
  478. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_cli_fix_headless_review.py +0 -0
  479. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_cli_gate_a.py +0 -0
  480. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_cli_install_drift.py +0 -0
  481. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_cli_install_skills.py +0 -0
  482. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_cli_issue_comment.py +0 -0
  483. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_cli_issue_create_label.py +0 -0
  484. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_cli_issue_reopen.py +0 -0
  485. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_cli_issue_view_list.py +0 -0
  486. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_cli_merge.py +0 -0
  487. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_cli_milestone_assign.py +0 -0
  488. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_cli_milestone_capture.py +0 -0
  489. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_cli_milestone_chat_add_child.py +0 -0
  490. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_cli_milestone_dispatch.py +0 -0
  491. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_cli_milestone_gate_b.py +0 -0
  492. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_cli_milestone_gate_c.py +0 -0
  493. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_cli_milestone_order.py +0 -0
  494. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  495. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_cli_milestone_ship.py +0 -0
  496. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_cli_network.py +0 -0
  497. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_cli_new_issue_chat.py +0 -0
  498. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_cli_plans.py +0 -0
  499. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_cli_portal.py +0 -0
  500. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_cli_pr.py +0 -0
  501. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_cli_pull_artifact.py +0 -0
  502. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_cli_queue.py +0 -0
  503. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_cli_reattach_sessions.py +0 -0
  504. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_cli_refine_board.py +0 -0
  505. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_cli_release_preflight.py +0 -0
  506. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_cli_release_propagate.py +0 -0
  507. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_cli_release_window.py +0 -0
  508. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_cli_repo_2220.py +0 -0
  509. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
  510. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_cli_scorecard.py +0 -0
  511. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_cli_set_review_findings.py +0 -0
  512. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_cli_status_advisory_terminal.py +0 -0
  513. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_cli_status_contested_tag.py +0 -0
  514. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_cli_status_merge_queue.py +0 -0
  515. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_cli_status_provider.py +0 -0
  516. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_cli_status_review_finalizing.py +0 -0
  517. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_cli_status_test_failed_tag.py +0 -0
  518. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_cli_status_usage_limit.py +0 -0
  519. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_cli_sync_comments_873.py +0 -0
  520. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_cli_test_plan.py +0 -0
  521. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_cli_track.py +0 -0
  522. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_cli_tui_update.py +0 -0
  523. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_cli_wait.py +0 -0
  524. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_client_base_install.py +0 -0
  525. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_commands_common.py +0 -0
  526. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_comments.py +0 -0
  527. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_completion_summary.py +0 -0
  528. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_config.py +0 -0
  529. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_config_acceptance.py +0 -0
  530. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_config_audit.py +0 -0
  531. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_config_pricing.py +0 -0
  532. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  533. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_config_usage_gate.py +0 -0
  534. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_confirm_test.py +0 -0
  535. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_conflict_fix.py +0 -0
  536. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_conflict_fix_semantic.py +0 -0
  537. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
  538. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_coord_test.py +0 -0
  539. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_coord_test_runner_baseline.py +0 -0
  540. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_coord_test_runner_populated_home.py +0 -0
  541. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_coord_test_runner_routing.py +0 -0
  542. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_coord_test_runner_toolchain.py +0 -0
  543. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_coord_uat.py +0 -0
  544. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_coord_web_sse_restart_live.py +0 -0
  545. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_coordinator_machine.py +0 -0
  546. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_cross_platform_imports.py +0 -0
  547. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_dao.py +0 -0
  548. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_dashboard.py +0 -0
  549. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_dashboard_fixture.py +0 -0
  550. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_dashboard_terminal.py +0 -0
  551. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_dashboard_terminal_live.py +0 -0
  552. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_db.py +0 -0
  553. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_dead_end.py +0 -0
  554. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_deploy_coord_db_backup.py +0 -0
  555. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_deploy_coord_web_dist.py +0 -0
  556. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_deploy_coord_web_rollback.py +0 -0
  557. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_deploy_drive_queue_unit.py +0 -0
  558. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_deploy_failure_notify_unit.py +0 -0
  559. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_deploy_manifest.py +0 -0
  560. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_deploy_notify_unit.py +0 -0
  561. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_deploy_units_lane.py +0 -0
  562. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_deploy_web_unit.py +0 -0
  563. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_deps.py +0 -0
  564. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_diagnose.py +0 -0
  565. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_dispatch.py +0 -0
  566. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_dispatch_target_validation.py +0 -0
  567. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_dist_name.py +0 -0
  568. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_done_housekeeping.py +0 -0
  569. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_drive.py +0 -0
  570. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_drive_queue.py +0 -0
  571. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_drive_queue_blocked_rendering.py +0 -0
  572. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_drive_queue_launch_argv.py +0 -0
  573. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
  574. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_drive_queue_roll_pending.py +0 -0
  575. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
  576. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_drive_state.py +0 -0
  577. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_drive_tmux.py +0 -0
  578. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_epic_up_capability_detection.py +0 -0
  579. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  580. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_epic_up_image_provenance.py +0 -0
  581. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_errors.py +0 -0
  582. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_events.py +0 -0
  583. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_failure_class.py +0 -0
  584. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_filelock.py +0 -0
  585. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  586. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_fix_of_force_override.py +0 -0
  587. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_fleet_config_health.py +0 -0
  588. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_fleet_health_probes.py +0 -0
  589. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_fleet_health_snapshot.py +0 -0
  590. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_fleet_watchdog.py +0 -0
  591. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_forge_availability.py +0 -0
  592. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_freshness.py +0 -0
  593. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_gate_a.py +0 -0
  594. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_gate_b.py +0 -0
  595. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_gate_snapshot_staleness.py +0 -0
  596. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_gates.py +0 -0
  597. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  598. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_gen_mock_index.py +0 -0
  599. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_generated_rust_fixture.py +0 -0
  600. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_generated_types_fixture.py +0 -0
  601. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_github_ops.py +0 -0
  602. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_github_throttle.py +0 -0
  603. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_goal.py +0 -0
  604. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_graph_health.py +0 -0
  605. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_graph_selfheal_absent_2237.py +0 -0
  606. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_handoff.py +0 -0
  607. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_health_checks.py +0 -0
  608. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_health_cli.py +0 -0
  609. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_health_cli_graph.py +0 -0
  610. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_health_config.py +0 -0
  611. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_health_context.py +0 -0
  612. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_health_coord_web_ci_pin.py +0 -0
  613. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_health_deploy_lane_facts.py +0 -0
  614. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_health_fix.py +0 -0
  615. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_health_incident_regression.py +0 -0
  616. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_health_issues_sync_staleness.py +0 -0
  617. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_health_pypi.py +0 -0
  618. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_health_registry.py +0 -0
  619. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_health_release_cordon_probe.py +0 -0
  620. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_health_timer_active.py +0 -0
  621. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_health_toolchain.py +0 -0
  622. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_health_unit_drift.py +0 -0
  623. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_health_unit_enablement.py +0 -0
  624. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_hooks.py +0 -0
  625. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_human_attended_437.py +0 -0
  626. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_init.py +0 -0
  627. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_integration.py +0 -0
  628. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_interactive_briefing_echo.py +0 -0
  629. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_interactive_pane_log_2541.py +0 -0
  630. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_interactive_prefill_state.py +0 -0
  631. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_interactive_session_relaunch.py +0 -0
  632. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_interactive_test_verdict_backstop.py +0 -0
  633. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_interactive_token_attribution.py +0 -0
  634. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_interactive_worktree.py +0 -0
  635. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_issue_store_seam.py +0 -0
  636. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_issues_sync_status.py +0 -0
  637. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_liveness_auditor.py +0 -0
  638. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_liveness_notify.py +0 -0
  639. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_lock_contention_ratchet.py +0 -0
  640. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_machine_pause.py +0 -0
  641. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_merge_queue.py +0 -0
  642. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_merge_verify.py +0 -0
  643. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_milestone_chat.py +0 -0
  644. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_milestone_dispatch.py +0 -0
  645. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_milestone_gate.py +0 -0
  646. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_milestone_order.py +0 -0
  647. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_milestone_seam.py +0 -0
  648. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_mock_author.py +0 -0
  649. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_model_tiering.py +0 -0
  650. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_models.py +0 -0
  651. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_models_config_labels.py +0 -0
  652. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_needs_attention.py +0 -0
  653. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_network.py +0 -0
  654. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_new_issue_chat.py +0 -0
  655. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_next_release_tag.py +0 -0
  656. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_node_shim.py +0 -0
  657. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_notifier_baseline.py +0 -0
  658. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_notifier_cli.py +0 -0
  659. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_notifier_collect.py +0 -0
  660. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_notifier_config.py +0 -0
  661. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_notifier_drive_seam.py +0 -0
  662. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_notifier_isolation.py +0 -0
  663. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_notifier_predicate.py +0 -0
  664. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_notifier_quiet_hours.py +0 -0
  665. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_notifier_service.py +0 -0
  666. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_notify.py +0 -0
  667. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_notify_drain.py +0 -0
  668. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_openapi.py +0 -0
  669. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_operational_defaults.py +0 -0
  670. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_overlap_fence.py +0 -0
  671. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_overlap_predict.py +0 -0
  672. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_packaged_deploy_units.py +0 -0
  673. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_parentage.py +0 -0
  674. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_paste_landed.py +0 -0
  675. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
  676. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_pipeline.py +0 -0
  677. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_plan_followup_approve_plan_command.py +0 -0
  678. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_plan_followup_pr_command.py +0 -0
  679. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_plan_followup_review_command.py +0 -0
  680. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_plan_only.py +0 -0
  681. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_plan_parser.py +0 -0
  682. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_platform_paths.py +0 -0
  683. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_portal_bridge.py +0 -0
  684. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_portal_config.py +0 -0
  685. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_portal_store.py +0 -0
  686. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_pr_body_lint.py +0 -0
  687. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_prereqs.py +0 -0
  688. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_production_db_guard.py +0 -0
  689. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_progress.py +0 -0
  690. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_provider_seam.py +0 -0
  691. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_providers.py +0 -0
  692. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_providers_config_labels.py +0 -0
  693. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_providers_pty.py +0 -0
  694. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_quiet_hours.py +0 -0
  695. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_quiet_hours_store_2146.py +0 -0
  696. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_reap_merged_sessions.py +0 -0
  697. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_reap_stale_interactive_tick.py +0 -0
  698. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_reconcile.py +0 -0
  699. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_reconcile_branch.py +0 -0
  700. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_reconcile_completions.py +0 -0
  701. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
  702. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_reconcile_merges.py +0 -0
  703. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_reconcile_no_agent_record.py +0 -0
  704. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_reconcile_tick.py +0 -0
  705. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_reconcile_usage_limit_done.py +0 -0
  706. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_refine_chat.py +0 -0
  707. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_release_cordon_2101.py +0 -0
  708. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  709. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_release_cordon_deadlock_2240.py +0 -0
  710. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_release_cordon_stuck_2490.py +0 -0
  711. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_release_propagate.py +0 -0
  712. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_release_propagate_threshold.py +0 -0
  713. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_release_roll_between_legs_2854.py +0 -0
  714. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_release_roll_window_handoff.py +0 -0
  715. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_release_unified_1242.py +0 -0
  716. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_release_verify.py +0 -0
  717. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_release_window.py +0 -0
  718. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_remote_auto_prune.py +0 -0
  719. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_remote_interactive_reaper.py +0 -0
  720. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_repo_add.py +0 -0
  721. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_repo_edit_2220.py +0 -0
  722. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_repo_graph_fleet_2237.py +0 -0
  723. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_repo_onboard_2220.py +0 -0
  724. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_report_result_push.py +0 -0
  725. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_reports.py +0 -0
  726. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_retry.py +0 -0
  727. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_retry_advisory_1606.py +0 -0
  728. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_retry_type_1636.py +0 -0
  729. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_revalidate.py +0 -0
  730. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_review.py +0 -0
  731. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_review_end_review_without_verdict.py +0 -0
  732. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_review_parse_failure_diagnostic.py +0 -0
  733. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_review_reaffirm.py +0 -0
  734. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_review_state.py +0 -0
  735. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_review_verdict_backstop.py +0 -0
  736. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_review_verdict_override_audit.py +0 -0
  737. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_review_verdict_relay.py +0 -0
  738. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_review_zero_commits.py +0 -0
  739. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_scoped_review_wiring.py +0 -0
  740. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_scorecard.py +0 -0
  741. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_self_health.py +0 -0
  742. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_serve.py +0 -0
  743. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_serve_app_board_trim.py +0 -0
  744. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_serve_rest_routes.py +0 -0
  745. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_session.py +0 -0
  746. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_slice_issue_attribution.py +0 -0
  747. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_smoke.py +0 -0
  748. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_smoke_live_checkout_restore.py +0 -0
  749. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_smoke_workflow.py +0 -0
  750. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_spend_ceiling.py +0 -0
  751. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_spend_ceiling_coordinator.py +0 -0
  752. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_split.py +0 -0
  753. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_split_work.py +0 -0
  754. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_sql_dialect.py +0 -0
  755. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_sqlite_connect_ratchet.py +0 -0
  756. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_stage_projection.py +0 -0
  757. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_stale_busy_reviewer_697.py +0 -0
  758. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_stalled_pipeline.py +0 -0
  759. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_state.py +0 -0
  760. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_state_review_findings_daemon.py +0 -0
  761. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_status_fleet_footer.py +0 -0
  762. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_stop_1567.py +0 -0
  763. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_store_contract.py +0 -0
  764. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_store_migrate.py +0 -0
  765. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_stuck.py +0 -0
  766. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
  767. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_terminal_command.py +0 -0
  768. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_test_author.py +0 -0
  769. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_test_chat.py +0 -0
  770. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_test_orchestrator.py +0 -0
  771. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_test_report.py +0 -0
  772. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_test_verdict_parsing.py +0 -0
  773. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_test_verdict_transcript_floor.py +0 -0
  774. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_text_io_encoding_audit.py +0 -0
  775. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_thin_client_board_audit.py +0 -0
  776. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_thin_client_config_load_1080.py +0 -0
  777. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_thin_client_daemon_routing_906.py +0 -0
  778. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_tmux_host.py +0 -0
  779. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_tmux_session.py +0 -0
  780. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_transcript_floor.py +0 -0
  781. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_usage.py +0 -0
  782. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_usage_limits.py +0 -0
  783. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_usage_rollup.py +0 -0
  784. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_venv_live_install_2121.py +0 -0
  785. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_version_single_source.py +0 -0
  786. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_watch.py +0 -0
  787. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  788. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_worker_env_venv_isolation.py +0 -0
  789. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_worker_events.py +0 -0
  790. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_worker_image_pin_sync.py +0 -0
  791. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_worker_safety.py +0 -0
  792. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_worker_test_scoping.py +0 -0
  793. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_worktree.py +0 -0
  794. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  795. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/test_write_parity.py +0 -0
  796. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tests/write_parity.py +0 -0
  797. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/.github/workflows/release-tui.yml +0 -0
  798. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/Cargo.lock +0 -0
  799. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/Cargo.toml +0 -0
  800. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/cargo-config-local-quadraui.toml.example +0 -0
  801. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/src/app/approved.rs +0 -0
  802. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/src/app/audit.rs +0 -0
  803. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/src/app/chat.rs +0 -0
  804. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/src/app/data.rs +0 -0
  805. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/src/app/dialogs.rs +0 -0
  806. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/src/app/doc_tabs.rs +0 -0
  807. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/src/app/drive.rs +0 -0
  808. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/src/app/drive_queue.rs +0 -0
  809. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/src/app/escalation.rs +0 -0
  810. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/src/app/events.rs +0 -0
  811. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/src/app/fixtures.rs +0 -0
  812. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/src/app/fleet_health.rs +0 -0
  813. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/src/app/fleet_sessions.rs +0 -0
  814. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/src/app/fleet_terminals.rs +0 -0
  815. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/src/app/format.rs +0 -0
  816. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/src/app/milestone_dag.rs +0 -0
  817. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/src/app/mod.rs +0 -0
  818. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/src/app/msv.rs +0 -0
  819. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/src/app/pipeline.rs +0 -0
  820. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/src/app/plans.rs +0 -0
  821. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/src/app/render.rs +0 -0
  822. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/src/app/reports.rs +0 -0
  823. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/src/app/sessions.rs +0 -0
  824. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/src/app/settings_ui.rs +0 -0
  825. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/src/app/sidebar.rs +0 -0
  826. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/src/app/terminal.rs +0 -0
  827. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/src/app/tests.rs +0 -0
  828. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/src/app/types/generated.rs +0 -0
  829. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/src/app/types.rs +0 -0
  830. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/src/app/workspace.rs +0 -0
  831. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/src/bin/gtk.rs +0 -0
  832. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/src/commands.rs +0 -0
  833. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/src/lib.rs +0 -0
  834. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/src/main.rs +0 -0
  835. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/src/settings.rs +0 -0
  836. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/tests/acceptance/ms-33/audit_1039.rs +0 -0
  837. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/tests/acceptance/ms-33/contract.md +0 -0
  838. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/tests/acceptance/ms-33/manifest.yml +0 -0
  839. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  840. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  841. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  842. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  843. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/tests/acceptance/ms-38/contract.md +0 -0
  844. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/tests/acceptance/ms-38/manifest.yml +0 -0
  845. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  846. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  847. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  848. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  849. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  850. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  851. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  852. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  853. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  854. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  855. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/tests/acceptance/ms-65/board_split_2288.rs +0 -0
  856. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
  857. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
  858. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/tests/acceptance/ms-65/contract.md +0 -0
  859. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
  860. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/tests/acceptance/ms-65/manifest.yml +0 -0
  861. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
  862. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
  863. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
  864. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
  865. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
  866. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
  867. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
  868. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
  869. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
  870. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
  871. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/tests/acceptance/ms-65/tabs_persistence_2286.rs +0 -0
  872. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/tests/acceptance/ms-67/approved_items_2532.rs +0 -0
  873. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/tests/acceptance/ms-67/contract.md +0 -0
  874. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/tests/acceptance/ms-67/manifest.d/2533.yml +0 -0
  875. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/tests/acceptance/ms-67/manifest.yml +0 -0
  876. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/tests/acceptance/ms-67/mocks/approved-items-chat-opened.screen +0 -0
  877. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/tests/acceptance/ms-67/mocks/approved-items-context-menu.screen +0 -0
  878. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/tests/acceptance/ms-67/mocks/approved-items-detail.screen +0 -0
  879. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/tests/acceptance/ms-67/mocks/approved-items-empty.screen +0 -0
  880. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/tests/acceptance/ms-67/mocks/approved-items-populated.screen +0 -0
  881. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/tests/acceptance/ms-67/pull_decomposition_2533.rs +0 -0
  882. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/tests/acceptance.rs +0 -0
  883. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/tui/tests/cli.rs +0 -0
  884. {code_coordinator-0.5.279 → code_coordinator-0.5.281}/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.279
3
+ Version: 0.5.281
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.279
3
+ Version: 0.5.281
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.279",
2
+ "tag": "0.5.281",
3
3
  "distance": 0,
4
- "node": "gf2877e7edfb86e0b3534e2057b35ccf50bac3307",
4
+ "node": "g62c2200a45c988353a9ede462609c649a368b11d",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-29"
@@ -4067,7 +4067,11 @@ composer on the client's side pauses on the most recent question only, so \
4067
4067
  a scattershot list gets a partial answer at best. Then:
4068
4068
 
4069
4069
  coord portal enqueue-question <submission_id> "<question>"
4070
- coord portal enqueue-status <submission_id> needs-input
4070
+
4071
+ This one command queues the question AND announces it to the customer \
4072
+ (#2901) — `enqueue-question` queues its own `needs-input` status right \
4073
+ behind the question, so there is no separate announcement step to remember \
4074
+ or forget.
4071
4075
 
4072
4076
  and STOP — end your final turn summarizing the question and why, and run \
4073
4077
  nothing else this iteration (no filing, no decisions). IL-3's consumer \
@@ -1351,18 +1351,30 @@ def portal_enqueue_preview(submission_id: str, preview_url: str) -> None:
1351
1351
  @click.argument("submission_id")
1352
1352
  @click.argument("question")
1353
1353
  def portal_enqueue_question(submission_id: str, question: str) -> None:
1354
- """Queue an open question for SUBMISSION_ID (sent on the next sync)."""
1354
+ """Queue an open question for SUBMISSION_ID (sent on the next sync).
1355
+
1356
+ Also queues the `needs-input` status that announces it (#2901) — a
1357
+ question with no status row behind it sends no email, so this command
1358
+ always queues both rows in one call rather than leaving the second one
1359
+ to a caller who might forget it.
1360
+ """
1355
1361
  _refuse_if_thin_client("enqueue-question")
1356
1362
 
1357
1363
  from coord.portal_sync import PortalSyncError, enqueue_question # noqa: PLC0415
1358
1364
 
1359
1365
  try:
1360
- row = enqueue_question(submission_id, question)
1366
+ question_row, status_row = enqueue_question(submission_id, question)
1361
1367
  except PortalSyncError as exc:
1362
1368
  click.secho(str(exc), fg="red")
1363
1369
  raise SystemExit(1) from exc
1364
1370
  click.secho(
1365
- f"queued: {row.submission_id} seq={row.seq} rev={row.revision} question",
1371
+ f"queued: {question_row.submission_id} seq={question_row.seq} "
1372
+ f"rev={question_row.revision} question",
1373
+ fg="green",
1374
+ )
1375
+ click.secho(
1376
+ f"queued: {status_row.submission_id} seq={status_row.seq} "
1377
+ f"rev={status_row.revision} status=needs-input",
1366
1378
  fg="green",
1367
1379
  )
1368
1380
 
@@ -68,17 +68,104 @@ NOT_CAPTURED_SENTINEL = "Not captured at first contact"
68
68
 
69
69
  def _field_missing(value: Any) -> bool:
70
70
  """True when *value* carries no real content — absent, blank, or the
71
- portal's own "not captured at first contact" placeholder (#2750)."""
71
+ portal's own "not captured at first contact" placeholder (#2750).
72
+
73
+ #2864: the portal never sends the bare sentinel — it's the leading
74
+ clause of a longer sentence (e.g. ``"Not captured at first contact —
75
+ this came in through the contact form, so it still needs to be agreed
76
+ with the customer."``, em dash and all), so this matches the sentinel
77
+ as a **prefix**, casefolded and whitespace-normalised, rather than by
78
+ exact equality. A prefix match still leaves real content that merely
79
+ *mentions* the phrase mid-sentence reading as present, since the
80
+ sentinel then isn't at the start.
81
+ """
72
82
  if not isinstance(value, str):
73
83
  return True
74
- text = value.strip()
75
- return not text or text == NOT_CAPTURED_SENTINEL
84
+ text = " ".join(value.split())
85
+ if not text:
86
+ return True
87
+ sentinel = " ".join(NOT_CAPTURED_SENTINEL.split())
88
+ return text.casefold().startswith(sentinel.casefold())
89
+
90
+
91
+ #: Files `coord repo create` seeds into a brand-new repo as its first
92
+ #: commit(s) (#2747): `README.md` from `create_repo`'s own `--add-readme`,
93
+ #: plus `CLAUDE.md`, a CI workflow, and the ported `.githooks/*` from its
94
+ #: own seed commit (`coord.commands.repo._seed_files`). Kept here rather
95
+ #: than imported from `coord.commands.repo` — this module's briefing scopes
96
+ #: it to `coord/decomposition_chat.py` alone, and the set is small and
97
+ #: unlikely to drift silently (a drift only ever costs one extra spurious
98
+ #: DISCUSS round, never a false FILE).
99
+ _SEEDED_ROOT_FILES = frozenset({"README.md", "CLAUDE.md"})
100
+ _SEEDED_ROOT_DIRS = frozenset({".github", ".githooks"})
101
+ _SEEDED_GITHUB_WORKFLOW_FILES = frozenset({"ci.yml"})
102
+ _SEEDED_GITHOOKS_FILES = frozenset(
103
+ {"_lib.sh", "post-checkout", "post-commit", "post-merge"}
104
+ )
105
+
106
+
107
+ def _dir_entries(repo: str, path: str, branch: str) -> tuple[list[str], list[str]]:
108
+ """``(files, dirs)`` directly under *path* on *branch* — ``([], [])``
109
+ when *path* doesn't exist there at all (e.g. a repo that never got
110
+ `.githooks/` seeded) rather than raising, mirroring `github_ops.
111
+ repo_file_exists`'s own not-found handling. Any failure that isn't a
112
+ clean 404 propagates, same reasoning: a caller here must not read
113
+ "couldn't check" as "empty directory".
114
+ """
115
+ from coord import github_ops # noqa: PLC0415
116
+
117
+ try:
118
+ files = github_ops.list_repo_dir(repo, path, branch)
119
+ dirs = github_ops.list_repo_subdirs(repo, path, branch)
120
+ except RuntimeError as exc:
121
+ msg = str(exc).lower()
122
+ if "not found" in msg or "404" in msg:
123
+ return [], []
124
+ raise
125
+ return files, dirs
126
+
127
+
128
+ def _repo_has_only_seeded_files(repo: str, branch: str) -> bool:
129
+ """True when every tracked file on *branch* of *repo* is one that
130
+ `coord repo create` itself seeds (#2864 bug 2) — walks the small, fixed
131
+ set of directories seeding can ever touch (root, `.github/`,
132
+ `.github/workflows/`, `.githooks/`); any file or directory outside that
133
+ set is real product history.
134
+ """
135
+ files, dirs = _dir_entries(repo, "", branch)
136
+ if not set(files) <= _SEEDED_ROOT_FILES:
137
+ return False
138
+ if not set(dirs) <= _SEEDED_ROOT_DIRS:
139
+ return False
140
+
141
+ if ".github" in dirs:
142
+ gh_files, gh_dirs = _dir_entries(repo, ".github", branch)
143
+ if gh_files or set(gh_dirs) - {"workflows"}:
144
+ return False
145
+ if "workflows" in gh_dirs:
146
+ wf_files, wf_dirs = _dir_entries(repo, ".github/workflows", branch)
147
+ if not set(wf_files) <= _SEEDED_GITHUB_WORKFLOW_FILES or wf_dirs:
148
+ return False
149
+
150
+ if ".githooks" in dirs:
151
+ hook_files, hook_dirs = _dir_entries(repo, ".githooks", branch)
152
+ if not set(hook_files) <= _SEEDED_GITHOOKS_FILES or hook_dirs:
153
+ return False
154
+
155
+ return True
76
156
 
77
157
 
78
158
  def _repo_is_greenfield(cfg: "Config", repo_name: str) -> bool:
79
159
  """Mechanical "nothing to decompose against yet" signal for *repo_name*
80
160
  (#2750's second mode-selection trigger): no commits on its default
81
- branch, or no `CLAUDE.md` there.
161
+ branch, or every tracked file there is one `coord repo create` itself
162
+ seeds (:func:`_repo_has_only_seeded_files`).
163
+
164
+ #2864: used to be "no `CLAUDE.md` there", which `coord repo create`
165
+ (#2747) broke — it seeds `CLAUDE.md` as part of a brand-new repo's
166
+ first commit, so a repo created through the intake lane's own genesis
167
+ command could never be detected as greenfield by the intake lane's own
168
+ mode selector.
82
169
 
83
170
  Fails safe toward ``True`` (i.e. toward MODE: DISCUSS) on an unmapped
84
171
  repo or any lookup failure — a false positive here costs one extra
@@ -98,7 +185,10 @@ def _repo_is_greenfield(cfg: "Config", repo_name: str) -> bool:
98
185
  sha = github_ops.get_branch_sha(repo_cfg.github, branch)
99
186
  if sha is None:
100
187
  return True
101
- return not github_ops.repo_file_exists(repo_cfg.github, "CLAUDE.md", branch)
188
+ try:
189
+ return _repo_has_only_seeded_files(repo_cfg.github, branch)
190
+ except RuntimeError:
191
+ return True
102
192
 
103
193
 
104
194
  def select_discuss_mode(
@@ -117,8 +207,9 @@ def select_discuss_mode(
117
207
 
118
208
  * `done_definition` / `audience` missing, blank, or the portal's own
119
209
  "not captured at first contact" sentinel;
120
- * any mapped repo with no commits on its default branch or no
121
- `CLAUDE.md` there (:func:`_repo_is_greenfield`).
210
+ * any mapped repo with no commits on its default branch, or whose
211
+ tracked files are only what `coord repo create` itself seeds
212
+ (:func:`_repo_is_greenfield`).
122
213
 
123
214
  Returns ``(discuss, reason)`` — *reason* is always non-empty and is
124
215
  meant to be the first thing the operator reads (#2750: "a session that
@@ -140,8 +231,8 @@ def select_discuss_mode(
140
231
  greenfield = [r for r in repos if _repo_is_greenfield(cfg, r)]
141
232
  if greenfield:
142
233
  reasons.append(
143
- f"mapped repo(s) {', '.join(greenfield)} have no commits or no "
144
- "CLAUDE.md yet — nothing to decompose against"
234
+ f"mapped repo(s) {', '.join(greenfield)} have no commits or only "
235
+ "coord repo create's seed files — nothing to decompose against yet"
145
236
  )
146
237
 
147
238
  if reasons:
@@ -356,13 +356,36 @@ def enqueue_preview(
356
356
 
357
357
  def enqueue_question(
358
358
  submission_id: str, question: str, *, now: float | None = None
359
- ) -> portal_store.OutboxRow:
360
- """Queue an open question for the customer."""
359
+ ) -> tuple[portal_store.OutboxRow, portal_store.OutboxRow]:
360
+ """Queue an open question for the customer, plus the announcement of it.
361
+
362
+ Queuing the question alone sends no email — the portal only mails the
363
+ customer off a push that actually names ``status``
364
+ (coord-portal's `src/bridge/updates.ts`) — so a caller that asked a
365
+ question and forgot the follow-up `enqueue_status(..., "needs-input")`
366
+ left the customer never told (#2901, SUB-1EA1D3: exactly this happened
367
+ to a real submission). Folding the announcement in here, in the same
368
+ call, immediately after the question row, makes that omission
369
+ impossible rather than merely documented: the existing
370
+ `ANNOUNCING_STATUSES`/`ordering_block_reason` guard then holds the
371
+ status row until this question is confirmed applied, for free, because
372
+ it is seq N+1 behind the question's seq N.
373
+
374
+ A second question on a submission already at `needs-input` still gets
375
+ its own status row here — coord-portal deliberately does not coalesce
376
+ a repeat `needs-input` (`src/notifications.ts`), on the grounds that a
377
+ second question is plausibly real news, so re-announcing is intended,
378
+ not churn to suppress.
379
+
380
+ Returns ``(question_row, status_row)`` in that seq order.
381
+ """
361
382
  if not question or not question.strip():
362
383
  raise PortalSyncError("question must be non-empty")
363
- return portal_store.enqueue(
384
+ question_row = portal_store.enqueue(
364
385
  submission_id, KIND_QUESTION, {"question": question}, now=now
365
386
  )
387
+ status_row = enqueue_status(submission_id, "needs-input", now=now)
388
+ return question_row, status_row
366
389
 
367
390
 
368
391
  def enqueue_status(
@@ -27,14 +27,19 @@ def _stub_external_io(monkeypatch):
27
27
  ledger (`fetch_running_context`, a real local `coord.db` read). Neither
28
28
  is hermetic, and neither is what most of the tests below are
29
29
  exercising — stub the low-level `github_ops` calls to a fixed "repo has
30
- history and a CLAUDE.md" answer (so `_repo_is_greenfield` itself still
31
- runs its real logic, just network-free) and the ledger fetch to "no
32
- ledger yet", so most tests stay fast and deterministic. Tests that
33
- specifically exercise `_repo_is_greenfield`/`select_discuss_mode`/the
34
- ledger render override these locally.
30
+ real product history beyond what `coord repo create` seeds" answer (so
31
+ `_repo_is_greenfield` itself still runs its real logic, just
32
+ network-free) and the ledger fetch to "no ledger yet", so most tests
33
+ stay fast and deterministic. Tests that specifically exercise
34
+ `_repo_is_greenfield`/`select_discuss_mode`/the ledger render override
35
+ these locally.
35
36
  """
36
37
  monkeypatch.setattr("coord.github_ops.get_branch_sha", lambda repo, branch: "deadbeef")
37
- monkeypatch.setattr("coord.github_ops.repo_file_exists", lambda repo, path, branch: True)
38
+ monkeypatch.setattr(
39
+ "coord.github_ops.list_repo_dir",
40
+ lambda repo, path, branch: ["README.md", "CLAUDE.md", "app.py"] if path == "" else [],
41
+ )
42
+ monkeypatch.setattr("coord.github_ops.list_repo_subdirs", lambda repo, path, branch: [])
38
43
  monkeypatch.setattr(decomposition_chat, "fetch_running_context", lambda submission_id: {})
39
44
 
40
45
 
@@ -201,10 +206,37 @@ def test_field_missing_true_for_none_empty_and_sentinel():
201
206
  assert decomposition_chat._field_missing(f" {decomposition_chat.NOT_CAPTURED_SENTINEL} ") is True
202
207
 
203
208
 
209
+ def test_field_missing_true_for_portal_real_full_sentinel_string():
210
+ """#2864 bug 1: the portal never sends the bare sentinel — it's the
211
+ leading clause of a longer sentence, em dash and all. This is the
212
+ verbatim string the live portal sent for SUB-1EA1D3's `done_definition`
213
+ and `audience`."""
214
+ real = (
215
+ "Not captured at first contact — this came in through the contact "
216
+ "form, so it still needs to be agreed with the customer."
217
+ )
218
+ assert decomposition_chat._field_missing(real) is True
219
+
220
+
221
+ def test_field_missing_true_for_case_and_whitespace_variants():
222
+ assert decomposition_chat._field_missing(" not CAPTURED at First Contact ") is True
223
+ assert decomposition_chat._field_missing("NOT CAPTURED AT FIRST CONTACT — extra tail") is True
224
+
225
+
204
226
  def test_field_missing_false_for_real_content():
205
227
  assert decomposition_chat._field_missing("Existing subscription customers") is False
206
228
 
207
229
 
230
+ def test_field_missing_false_when_sentinel_only_mentioned_mid_sentence():
231
+ """A prefix match must not fire when the phrase merely appears somewhere
232
+ inside otherwise-real content — only a leading match means "missing"."""
233
+ mid_sentence = (
234
+ "The client said this was Not captured at first contact previously, "
235
+ "but confirmed today: existing subscription customers only."
236
+ )
237
+ assert decomposition_chat._field_missing(mid_sentence) is False
238
+
239
+
208
240
  def test_repo_is_greenfield_true_when_unmapped():
209
241
  cfg = Config(repos=[], machines=[])
210
242
  assert decomposition_chat._repo_is_greenfield(cfg, "nope") is True
@@ -219,16 +251,45 @@ def test_repo_is_greenfield_true_when_no_commits():
219
251
  def test_repo_is_greenfield_true_when_commits_but_no_claude_md():
220
252
  cfg = Config(repos=[_repo("api")], machines=[])
221
253
  with patch("coord.github_ops.get_branch_sha", return_value="deadbeef"), patch(
222
- "coord.github_ops.repo_file_exists", return_value=False
223
- ):
254
+ "coord.github_ops.list_repo_dir", return_value=["README.md"]
255
+ ), patch("coord.github_ops.list_repo_subdirs", return_value=[]):
256
+ assert decomposition_chat._repo_is_greenfield(cfg, "api") is True
257
+
258
+
259
+ def test_repo_is_greenfield_true_when_only_seeded_files():
260
+ """#2864 bug 2: a repo whose default branch contains only what `coord
261
+ repo create` itself seeds (README.md, CLAUDE.md, the CI workflow,
262
+ .githooks/*) must still read as greenfield — `coord repo create`'s own
263
+ genesis commit must never defeat the mode selector it's supposed to
264
+ feed into."""
265
+ cfg = Config(repos=[_repo("api")], machines=[])
266
+
267
+ def _list_dir(repo, path, branch):
268
+ return {
269
+ "": ["README.md", "CLAUDE.md"],
270
+ ".github": [],
271
+ ".github/workflows": ["ci.yml"],
272
+ ".githooks": ["_lib.sh", "post-checkout", "post-commit", "post-merge"],
273
+ }.get(path, [])
274
+
275
+ def _list_subdirs(repo, path, branch):
276
+ return {
277
+ "": [".github", ".githooks"],
278
+ ".github": ["workflows"],
279
+ }.get(path, [])
280
+
281
+ with patch("coord.github_ops.get_branch_sha", return_value="deadbeef"), patch(
282
+ "coord.github_ops.list_repo_dir", side_effect=_list_dir
283
+ ), patch("coord.github_ops.list_repo_subdirs", side_effect=_list_subdirs):
224
284
  assert decomposition_chat._repo_is_greenfield(cfg, "api") is True
225
285
 
226
286
 
227
287
  def test_repo_is_greenfield_false_when_commits_and_claude_md():
228
288
  cfg = Config(repos=[_repo("api")], machines=[])
229
289
  with patch("coord.github_ops.get_branch_sha", return_value="deadbeef"), patch(
230
- "coord.github_ops.repo_file_exists", return_value=True
231
- ):
290
+ "coord.github_ops.list_repo_dir",
291
+ return_value=["README.md", "CLAUDE.md", "app.py"],
292
+ ), patch("coord.github_ops.list_repo_subdirs", return_value=[]):
232
293
  assert decomposition_chat._repo_is_greenfield(cfg, "api") is False
233
294
 
234
295
 
@@ -279,7 +340,7 @@ def test_select_discuss_mode_auto_true_when_repo_greenfield(monkeypatch):
279
340
  discuss, reason = decomposition_chat.select_discuss_mode(cfg, SUBMISSION)
280
341
  assert discuss is True
281
342
  assert "api" in reason
282
- assert "no commits or no CLAUDE.md" in reason
343
+ assert "coord repo create's seed files" in reason
283
344
 
284
345
 
285
346
  def test_select_discuss_mode_auto_false_when_well_specified(monkeypatch):
@@ -290,6 +351,55 @@ def test_select_discuss_mode_auto_false_when_well_specified(monkeypatch):
290
351
  assert "captured" in reason
291
352
 
292
353
 
354
+ def test_select_discuss_mode_true_for_sub_1ea1d3_live_payload(monkeypatch):
355
+ """Regression test for #2864: SUB-1EA1D3, the greenfield grocery-list
356
+ submission #2746 was written around, verbatim as captured off the live
357
+ fleet on 2026-08-28. Before the fix both mechanical triggers failed
358
+ independently (the sentinel matched by equality, not prefix; the
359
+ seeded-only `grocery-list` repo read as non-greenfield because
360
+ `coord repo create` had itself seeded `CLAUDE.md`) and the session
361
+ picked MODE: FILE. Both must now fire, and the reason must name at
362
+ least one of them.
363
+ """
364
+ live_sentinel_tail = (
365
+ "Not captured at first contact — this came in through the contact "
366
+ "form, so it still needs to be agreed with the customer."
367
+ )
368
+ sub_1ea1d3 = {
369
+ "submission_id": "SUB-1EA1D3",
370
+ "client": "grocery-list customer",
371
+ "outcome": "A working grocery-list app for the customer's household.",
372
+ "audience": live_sentinel_tail,
373
+ "done_definition": live_sentinel_tail,
374
+ "constraints": "",
375
+ "repos": ["grocery-list"],
376
+ "signoff_status": "approved",
377
+ }
378
+
379
+ def _list_dir(repo, path, branch):
380
+ return {
381
+ "": ["README.md", "CLAUDE.md"],
382
+ ".github": [],
383
+ ".github/workflows": ["ci.yml"],
384
+ ".githooks": ["_lib.sh", "post-checkout", "post-commit", "post-merge"],
385
+ }.get(path, [])
386
+
387
+ def _list_subdirs(repo, path, branch):
388
+ return {
389
+ "": [".github", ".githooks"],
390
+ ".github": ["workflows"],
391
+ }.get(path, [])
392
+
393
+ cfg = Config(repos=[_repo("grocery-list")], machines=[])
394
+ with patch("coord.github_ops.get_branch_sha", return_value="deadbeef"), patch(
395
+ "coord.github_ops.list_repo_dir", side_effect=_list_dir
396
+ ), patch("coord.github_ops.list_repo_subdirs", side_effect=_list_subdirs):
397
+ discuss, reason = decomposition_chat.select_discuss_mode(cfg, sub_1ea1d3)
398
+
399
+ assert discuss is True
400
+ assert "done_definition" in reason or "audience" in reason or "grocery-list" in reason
401
+
402
+
293
403
  # ── #2750 (IL-4): render_running_context_section ────────────────────────────
294
404
 
295
405
 
@@ -579,10 +689,18 @@ def test_system_prompt_describes_both_modes():
579
689
  assert "MODE: FILE" in DECOMPOSITION_CHAT_SYSTEM_PROMPT
580
690
 
581
691
 
582
- def test_system_prompt_ask_terminal_move_uses_enqueue_commands():
692
+ def test_system_prompt_ask_terminal_move_uses_enqueue_question_only():
693
+ """#2901: `enqueue_question` now queues its own `needs-input`
694
+ announcement, so the ASK move's own step list must not tell the session
695
+ to run a second `enqueue-status` command — that was the exact
696
+ forgettable two-step sequence #2901 folded away (SUB-1EA1D3)."""
583
697
  assert "coord portal enqueue-question" in DECOMPOSITION_CHAT_SYSTEM_PROMPT
584
- assert "coord portal enqueue-status" in DECOMPOSITION_CHAT_SYSTEM_PROMPT
585
698
  assert "needs-input" in DECOMPOSITION_CHAT_SYSTEM_PROMPT
699
+ ask_section = DECOMPOSITION_CHAT_SYSTEM_PROMPT.split("1. ASK")[1].split(
700
+ "2. PROPOSE"
701
+ )[0]
702
+ assert "enqueue-status" not in ask_section
703
+ assert "queues its own" in ask_section
586
704
 
587
705
 
588
706
  def test_system_prompt_propose_terminal_move_uses_decision_commands():
@@ -21,6 +21,7 @@ from coord.portal_sync import (
21
21
  enqueue_preview,
22
22
  enqueue_question,
23
23
  enqueue_status,
24
+ ordering_block_reason,
24
25
  sync_tick,
25
26
  )
26
27
 
@@ -222,12 +223,12 @@ def test_reallocation_converges_and_then_the_announcement_goes():
222
223
 
223
224
 
224
225
  def test_second_question_cannot_ride_on_the_first_questions_confirmation():
226
+ # enqueue_question (#2901) queues its own needs-input status right
227
+ # behind the question — no separate enqueue_status call needed here.
225
228
  enqueue_question(SUB, "which colour?")
226
- enqueue_status(SUB, "needs-input")
227
229
  sync_tick(client=FakeClient()) # round 1 lands cleanly
228
230
 
229
231
  enqueue_question(SUB, "which font?")
230
- enqueue_status(SUB, "needs-input")
231
232
  # The second question fails to send; its announcement must not overtake it.
232
233
  client = FakeClient(push_error=PortalBridgeError("boom"))
233
234
  sync_tick(client=client)
@@ -238,6 +239,46 @@ def test_second_question_cannot_ride_on_the_first_questions_confirmation():
238
239
  assert client2.pushed_kinds == ["question", "status"]
239
240
 
240
241
 
242
+ def test_enqueue_question_queues_its_own_announcement():
243
+ """#2901: a question pushed without a status row behind it sends no
244
+ email (coord-portal's own rule — a push only mails the customer when it
245
+ actually names ``status``). `enqueue_question` must queue that status
246
+ itself, in the same call, so the announcement cannot be forgotten."""
247
+ question_row, status_row = enqueue_question(SUB, "which colour?")
248
+
249
+ assert question_row.kind == portal_sync.KIND_QUESTION
250
+ assert status_row.kind == portal_sync.KIND_STATUS
251
+ assert status_row.announces == "needs-input"
252
+ assert status_row.requires_kind == portal_sync.KIND_QUESTION
253
+ # The announcement is seq N+1 right behind its question — the ordering
254
+ # guard (`ANNOUNCING_STATUSES`/`ordering_block_reason`) keys off exactly
255
+ # this adjacency.
256
+ assert status_row.seq == question_row.seq + 1
257
+
258
+
259
+ def test_enqueue_question_reproduces_sub_1ea1d3_second_question_also_announced():
260
+ """Regression for #2901 / SUB-1EA1D3: question (applied) -> status
261
+ (applied) -> a second question with NO status row behind it — the real
262
+ outbox shape that shipped with no email. With the fold, the second
263
+ `enqueue_question` call must also queue its own status, so the drain
264
+ sends question -> status -> question -> status in order, never a bare
265
+ trailing question."""
266
+ enqueue_question(SUB, "Two things to help us scope...")
267
+ sync_tick(client=FakeClient()) # first question + its announcement land
268
+
269
+ enqueue_question(SUB, "Thanks -- that covers who...")
270
+ client = FakeClient()
271
+ sync_tick(client=client)
272
+
273
+ assert client.pushed_kinds == ["question", "status"]
274
+ rows = portal_store.outbox_for_submission(SUB)
275
+ assert [r.kind for r in rows] == ["question", "status", "question", "status"]
276
+ assert [r.state for r in rows] == [portal_store.STATE_APPLIED] * 4
277
+ # The second question's announcement never sent ahead of its own
278
+ # question being confirmed applied.
279
+ assert ordering_block_reason(rows[3]) is None
280
+
281
+
241
282
  def test_a_stalled_submission_does_not_stall_another_customers():
242
283
  enqueue_design_round(SUB, _design())
243
284
  enqueue_status(SUB, "awaiting-signoff")
@@ -1875,9 +1916,9 @@ def _push_and_apply_question(question: str = "Offline-first, yes or no?"):
1875
1916
  path `mark_applied`'s `kind == "question"` branch runs for real once
1876
1917
  `_push` gets a 200 back, which is what writes the `question_pushed`
1877
1918
  ledger entry `_consume_questions` later pairs an answer against."""
1878
- row = enqueue_question(SUB, question)
1879
- portal_store.mark_applied(row)
1880
- return row
1919
+ question_row, _status_row = enqueue_question(SUB, question)
1920
+ portal_store.mark_applied(question_row)
1921
+ return question_row
1881
1922
 
1882
1923
 
1883
1924
  class TestQuestionAnswerFields: