code-coordinator 0.5.289__tar.gz → 0.5.291__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 (890) hide show
  1. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/.github/workflows/test.yml +36 -10
  2. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/PKG-INFO +1 -1
  3. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/code_coordinator.egg-info/PKG-INFO +1 -1
  4. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/code_coordinator.egg-info/SOURCES.txt +1 -1
  5. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/code_coordinator.egg-info/scm_file_list.json +1 -1
  6. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/code_coordinator.egg-info/scm_version.json +2 -2
  7. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/agent.py +76 -0
  8. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/board_schema.py +6 -4
  9. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/board_wire.py +2 -1
  10. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/commands/portal.py +62 -8
  11. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/decomposition_chat.py +21 -0
  12. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/portal_store.py +133 -1
  13. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/serve_app.py +90 -0
  14. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/usage.py +3 -3
  15. code_coordinator-0.5.291/docs/ADR_COORD_TUI_CI.md +217 -0
  16. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/scripts/codegen.py +124 -45
  17. code_coordinator-0.5.291/tests/test_board_fixture.py +82 -0
  18. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_board_wire.py +2 -1
  19. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_cli_portal.py +121 -0
  20. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_decomposition_chat.py +149 -0
  21. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_dist_name.py +33 -0
  22. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_generated_rust_fixture.py +78 -63
  23. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_portal_store.py +212 -0
  24. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_sqlite_connect_ratchet.py +13 -3
  25. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/src/app/types/generated.rs +12 -8
  26. code_coordinator-0.5.289/coord/board_bool_guard.py +0 -83
  27. code_coordinator-0.5.289/tests/test_board_fixture.py +0 -172
  28. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/.claude/commands/board.md +0 -0
  29. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/.claude/commands/complete-session.md +0 -0
  30. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/.claude/commands/coordinator.md +0 -0
  31. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/.githooks/_lib.sh +0 -0
  32. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/.githooks/post-checkout +0 -0
  33. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/.githooks/post-commit +0 -0
  34. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/.githooks/post-merge +0 -0
  35. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  36. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/.github/coord-ci-acceptance.yml +0 -0
  37. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/.github/workflows/auto-release.yml +0 -0
  38. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/.github/workflows/cargo-test.yml +0 -0
  39. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/.github/workflows/publish.yml +0 -0
  40. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/.gitignore +0 -0
  41. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/CLAUDE.md +0 -0
  42. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/GOAL.md +0 -0
  43. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/LICENSE +0 -0
  44. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/MANIFEST.in +0 -0
  45. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/README.md +0 -0
  46. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/code_coordinator.egg-info/dependency_links.txt +0 -0
  47. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/code_coordinator.egg-info/entry_points.txt +0 -0
  48. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/code_coordinator.egg-info/requires.txt +0 -0
  49. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/code_coordinator.egg-info/top_level.txt +0 -0
  50. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/__init__.py +0 -0
  51. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/_board_mapping.py +0 -0
  52. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/acceptance.py +0 -0
  53. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/acceptance_drivers.py +0 -0
  54. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/agent_app.py +0 -0
  55. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/agent_update.py +0 -0
  56. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/agents/opencode/.gitignore +0 -0
  57. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/agents/opencode/agents/work.md +0 -0
  58. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/agents/opencode/routing.jsonc +0 -0
  59. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/approved_work.py +0 -0
  60. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/audit.py +0 -0
  61. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/auto_loop.py +0 -0
  62. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/block_log.py +0 -0
  63. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/board_service.py +0 -0
  64. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/brain.py +0 -0
  65. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/branch_model.py +0 -0
  66. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/bug_intake.py +0 -0
  67. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/cargo_cache.py +0 -0
  68. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/ci_fix.py +0 -0
  69. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/ci_github.py +0 -0
  70. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/ci_gitlab.py +0 -0
  71. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/ci_store.py +0 -0
  72. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/claim.py +0 -0
  73. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/cli.py +0 -0
  74. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/client.py +0 -0
  75. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/commands/__init__.py +0 -0
  76. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/commands/_common.py +0 -0
  77. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/commands/acceptance.py +0 -0
  78. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/commands/agent_ops.py +0 -0
  79. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/commands/audit.py +0 -0
  80. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/commands/chat.py +0 -0
  81. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/commands/dispatch.py +0 -0
  82. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/commands/dispatch_workers.py +0 -0
  83. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/commands/drive.py +0 -0
  84. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/commands/drive_queue.py +0 -0
  85. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/commands/gate_a.py +0 -0
  86. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/commands/gates.py +0 -0
  87. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/commands/issues.py +0 -0
  88. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/commands/lifecycle.py +0 -0
  89. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/commands/machine.py +0 -0
  90. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/commands/merge.py +0 -0
  91. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/commands/milestone.py +0 -0
  92. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/commands/plan_followup.py +0 -0
  93. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/commands/plans.py +0 -0
  94. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/commands/pr.py +0 -0
  95. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/commands/release.py +0 -0
  96. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/commands/repo.py +0 -0
  97. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/commands/report.py +0 -0
  98. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/commands/review.py +0 -0
  99. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/commands/scorecard.py +0 -0
  100. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/commands/sessions.py +0 -0
  101. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/commands/setup.py +0 -0
  102. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/commands/status.py +0 -0
  103. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/commands/store_migrate.py +0 -0
  104. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/commands/terminal.py +0 -0
  105. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/commands/test_gate.py +0 -0
  106. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/commands/tui.py +0 -0
  107. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/comments.py +0 -0
  108. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/config.py +0 -0
  109. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/config_reload.py +0 -0
  110. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/confirm_test.py +0 -0
  111. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/conflict_fix.py +0 -0
  112. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/dao.py +0 -0
  113. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/dashboard/__init__.py +0 -0
  114. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/dashboard/fixture.py +0 -0
  115. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/dashboard/index.html +0 -0
  116. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/dashboard/server.py +0 -0
  117. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/dashboard/terminal.py +0 -0
  118. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/db.py +0 -0
  119. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/dead_end.py +0 -0
  120. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/deploy/README.md +0 -0
  121. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/deploy/coord-agent.service +0 -0
  122. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/deploy/coord-db-backup.service +0 -0
  123. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/deploy/coord-db-backup.sh +0 -0
  124. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/deploy/coord-db-backup.timer +0 -0
  125. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/deploy/coord-drive-queue.service +0 -0
  126. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/deploy/coord-drive-queue.timer +0 -0
  127. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/deploy/coord-failure-notify.service +0 -0
  128. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/deploy/coord-fleet-watchdog.service +0 -0
  129. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/deploy/coord-fleet-watchdog.timer +0 -0
  130. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/deploy/coord-notify.service +0 -0
  131. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/deploy/coord-notify.timer +0 -0
  132. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/deploy/coord-release-propagate.service +0 -0
  133. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/deploy/coord-release-propagate.timer +0 -0
  134. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/deploy/coord-release-window.service +0 -0
  135. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/deploy/coord-release-window.timer +0 -0
  136. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/deploy/coord-serve.service +0 -0
  137. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/deploy/coord-web-dist-build.service +0 -0
  138. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/deploy/coord-web-dist-build.timer +0 -0
  139. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/deploy/coord-web.service +0 -0
  140. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/deploy_manifest.py +0 -0
  141. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/deploy_units.py +0 -0
  142. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/deps.py +0 -0
  143. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/diagnose.py +0 -0
  144. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/dispatch.py +0 -0
  145. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/dist_name.py +0 -0
  146. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/drive.py +0 -0
  147. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/drive_queue.py +0 -0
  148. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/drive_state.py +0 -0
  149. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/events.py +0 -0
  150. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/failure_class.py +0 -0
  151. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/filelock.py +0 -0
  152. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/fleet_config_health.py +0 -0
  153. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/forge_availability.py +0 -0
  154. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/freshness.py +0 -0
  155. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/gate_a.py +0 -0
  156. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/gate_b.py +0 -0
  157. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/gate_snapshot.py +0 -0
  158. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/gates.py +0 -0
  159. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/github_ops.py +0 -0
  160. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/github_throttle.py +0 -0
  161. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/goal.py +0 -0
  162. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/graph_health.py +0 -0
  163. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/health/__init__.py +0 -0
  164. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/health/aggregate.py +0 -0
  165. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/health/checks/__init__.py +0 -0
  166. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/health/checks/agent_install.py +0 -0
  167. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/health/checks/cargo_targets.py +0 -0
  168. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/health/checks/claude_binary.py +0 -0
  169. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/health/checks/coord_web_ci_pin.py +0 -0
  170. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/health/checks/deploy_lane_facts.py +0 -0
  171. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/health/checks/disk.py +0 -0
  172. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/health/checks/fleet_board.py +0 -0
  173. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  174. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/health/checks/fleet_phantom.py +0 -0
  175. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/health/checks/fleet_unit_drift.py +0 -0
  176. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/health/checks/graph.py +0 -0
  177. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/health/checks/graphify_cli.py +0 -0
  178. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/health/checks/index_lock.py +0 -0
  179. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/health/checks/issues_sync_staleness.py +0 -0
  180. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/health/checks/plan_usage.py +0 -0
  181. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/health/checks/release_cordon.py +0 -0
  182. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/health/checks/repo_state.py +0 -0
  183. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/health/checks/spawned_coord.py +0 -0
  184. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/health/checks/stalled_pipeline.py +0 -0
  185. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/health/checks/timer_active.py +0 -0
  186. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/health/checks/toolchain.py +0 -0
  187. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/health/checks/unit_drift.py +0 -0
  188. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/health/checks/unit_enablement.py +0 -0
  189. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/health/checks/worktrees.py +0 -0
  190. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/health/cli.py +0 -0
  191. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/health/context.py +0 -0
  192. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/health/fleet_snapshot.py +0 -0
  193. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/health/models.py +0 -0
  194. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/health/pypi.py +0 -0
  195. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/health/registry.py +0 -0
  196. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/health/render.py +0 -0
  197. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/health/units.py +0 -0
  198. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/hooks.py +0 -0
  199. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/housekeeping.py +0 -0
  200. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/interactive.py +0 -0
  201. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/issue_store.py +0 -0
  202. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/issues_sync_status.py +0 -0
  203. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/liveness_auditor.py +0 -0
  204. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/machine_onboard.py +0 -0
  205. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/machine_pause.py +0 -0
  206. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/merge_queue.py +0 -0
  207. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/milestone_chat.py +0 -0
  208. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/milestone_dispatch.py +0 -0
  209. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/milestone_gate.py +0 -0
  210. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/milestone_order.py +0 -0
  211. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/mock_author.py +0 -0
  212. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/models.py +0 -0
  213. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/network.py +0 -0
  214. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/new_issue_chat.py +0 -0
  215. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/notifier/__init__.py +0 -0
  216. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/notifier/baseline.py +0 -0
  217. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/notifier/cli.py +0 -0
  218. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/notifier/collect.py +0 -0
  219. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/notifier/digest.py +0 -0
  220. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/notifier/models.py +0 -0
  221. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/notifier/predicate.py +0 -0
  222. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/notifier/service.py +0 -0
  223. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/notifier/store.py +0 -0
  224. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/notifier/transport.py +0 -0
  225. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/notify.py +0 -0
  226. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/openapi.py +0 -0
  227. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/overlap_fence.py +0 -0
  228. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/overlap_predict.py +0 -0
  229. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/parentage.py +0 -0
  230. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/parentage_github.py +0 -0
  231. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/pipeline.py +0 -0
  232. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/plan_parser.py +0 -0
  233. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/plans.py +0 -0
  234. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/platform_paths.py +0 -0
  235. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/portal_bridge.py +0 -0
  236. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/portal_sync.py +0 -0
  237. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/pr_body_lint.py +0 -0
  238. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/prereqs.py +0 -0
  239. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/progress.py +0 -0
  240. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/providers/__init__.py +0 -0
  241. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/providers/base.py +0 -0
  242. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/providers/claude.py +0 -0
  243. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/providers/claude_pty.py +0 -0
  244. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/providers/opencode.py +0 -0
  245. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/queue_diagnose.py +0 -0
  246. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/reconcile.py +0 -0
  247. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/reconcile_tick.py +0 -0
  248. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/refine_chat.py +0 -0
  249. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/release_cordon.py +0 -0
  250. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/release_propagate.py +0 -0
  251. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/release_verify.py +0 -0
  252. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/release_window.py +0 -0
  253. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/repo_edit.py +0 -0
  254. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/repo_onboard.py +0 -0
  255. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/reports.py +0 -0
  256. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/rest_schema.py +0 -0
  257. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/revalidate.py +0 -0
  258. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/review.py +0 -0
  259. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/scorecard.py +0 -0
  260. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/self_health.py +0 -0
  261. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  262. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  263. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  264. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  265. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  266. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/skills/portal-followup/SKILL.md +0 -0
  267. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/skills/release-now/SKILL.md +0 -0
  268. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  269. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  270. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/skills/update-issue/SKILL.md +0 -0
  271. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/smoke.py +0 -0
  272. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/spend_ceiling.py +0 -0
  273. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/split_work.py +0 -0
  274. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/sql.py +0 -0
  275. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/stage_projection.py +0 -0
  276. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/state.py +0 -0
  277. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/store_migrate.py +0 -0
  278. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/test_author.py +0 -0
  279. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/test_chat.py +0 -0
  280. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/test_orchestrator.py +0 -0
  281. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/test_report.py +0 -0
  282. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/tui_release.py +0 -0
  283. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/usage_limits.py +0 -0
  284. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/usage_rollup.py +0 -0
  285. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coord/worker_events.py +0 -0
  286. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/coordinator.example.yml +0 -0
  287. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/deploy/coord-agent.service +0 -0
  288. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/deploy/coord-db-backup.service +0 -0
  289. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/deploy/coord-db-backup.sh +0 -0
  290. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/deploy/coord-db-backup.timer +0 -0
  291. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/deploy/coord-drive-queue.service +0 -0
  292. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/deploy/coord-drive-queue.timer +0 -0
  293. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/deploy/coord-failure-notify.service +0 -0
  294. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/deploy/coord-failure-notify.sh +0 -0
  295. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/deploy/coord-fleet-watchdog.service +0 -0
  296. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/deploy/coord-fleet-watchdog.timer +0 -0
  297. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/deploy/coord-notify.service +0 -0
  298. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/deploy/coord-notify.timer +0 -0
  299. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/deploy/coord-release-propagate.service +0 -0
  300. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/deploy/coord-release-propagate.timer +0 -0
  301. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/deploy/coord-release-window.service +0 -0
  302. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/deploy/coord-release-window.timer +0 -0
  303. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/deploy/coord-serve.service +0 -0
  304. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/deploy/coord-web-dist-build.service +0 -0
  305. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/deploy/coord-web-dist-build.sh +0 -0
  306. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/deploy/coord-web-dist-build.timer +0 -0
  307. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/deploy/coord-web-rollback.sh +0 -0
  308. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/deploy/coord-web.service +0 -0
  309. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/deploy/node-shim.sh +0 -0
  310. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  311. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/docs/ADR_COORD_WEB_CI.md +0 -0
  312. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/docs/ADR_COORD_WEB_DIST.md +0 -0
  313. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/docs/AGENT_OPERATIONS.md +0 -0
  314. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/docs/ARCHITECTURE.md +0 -0
  315. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/docs/ARCH_SECURITY_GATES.md +0 -0
  316. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/docs/COCKPIT.md +0 -0
  317. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/docs/CONTROL_CENTER.md +0 -0
  318. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/docs/COST_DISCIPLINE.md +0 -0
  319. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/docs/CROSS_PLATFORM.md +0 -0
  320. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/docs/CUSTOMER_FACING_APPS.md +0 -0
  321. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/docs/CUSTOMER_PORTAL.md +0 -0
  322. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/docs/DRIVE_QUEUE.md +0 -0
  323. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/docs/EPHEMERAL_WORKERS.md +0 -0
  324. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/docs/FORGE_MIGRATION.md +0 -0
  325. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/docs/GRAPHIFY_SETUP.md +0 -0
  326. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/docs/ISSUE_GUIDANCE.md +0 -0
  327. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/docs/MAC_MINI.md +0 -0
  328. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  329. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/docs/NOTIFIER.md +0 -0
  330. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/docs/OPENCODE_VERIFICATION.md +0 -0
  331. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/docs/OPERATING_GOTCHAS.md +0 -0
  332. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/docs/OPERATOR_GUIDES.md +0 -0
  333. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/docs/ORACLE_LOOP.md +0 -0
  334. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/docs/PHONE_WEBAPP.md +0 -0
  335. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/docs/PIPELINE_V2.md +0 -0
  336. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/docs/PLATFORM_EVOLUTION.md +0 -0
  337. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/docs/SECOND_BACKEND.md +0 -0
  338. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/docs/STORE_SERVICE.md +0 -0
  339. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  340. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/docs/WEB_CONTROL_CENTER.md +0 -0
  341. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/docs/WSL_WINDOWS_WORKER.md +0 -0
  342. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/docs/mocks/web/README.md +0 -0
  343. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/docs/mocks/web/_tokens.css +0 -0
  344. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/docs/mocks/web/issue-detail.html +0 -0
  345. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/docs/mocks/web/pipeline-narrow.html +0 -0
  346. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/docs/mocks/web/pipeline-wide.html +0 -0
  347. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/graphify-out/.gitignore +0 -0
  348. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/install-agent.sh +0 -0
  349. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/pyproject.toml +0 -0
  350. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/scripts/audit_review_verdict_overrides.py +0 -0
  351. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  352. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/scripts/azure-workers/build-worker-image.sh +0 -0
  353. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/scripts/azure-workers/coordinator-machine.py +0 -0
  354. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/scripts/azure-workers/epic-down.sh +0 -0
  355. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/scripts/azure-workers/epic-up.sh +0 -0
  356. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/scripts/azure-workers/preflight.sh +0 -0
  357. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/scripts/azure-workers/provision-worker.sh +0 -0
  358. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  359. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  360. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/scripts/azure-workers/verify-github-token.sh +0 -0
  361. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/scripts/check_gh_argv_containment.py +0 -0
  362. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/scripts/coord-test-runner.sh +0 -0
  363. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/scripts/coord-venv-rollback.sh +0 -0
  364. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/scripts/drive-batch.sh +0 -0
  365. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/scripts/fleet_watchdog.py +0 -0
  366. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/scripts/gen_board_fixture.py +0 -0
  367. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/scripts/gen_mock_index.py +0 -0
  368. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/scripts/next_release_tag.py +0 -0
  369. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/scripts/run_tests_in_populated_home.sh +0 -0
  370. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/scripts/run_tests_without_gh.sh +0 -0
  371. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/scripts/smoke_437_interactive.py +0 -0
  372. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/scripts/verify_878_review_capture.py +0 -0
  373. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/scripts/verify_release_published.py +0 -0
  374. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/scripts/verify_release_wheel.py +0 -0
  375. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/setup.cfg +0 -0
  376. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/SMOKE_SET.md +0 -0
  377. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/__init__.py +0 -0
  378. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/acceptance/ms-37/conftest.py +0 -0
  379. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/acceptance/ms-37/contract.md +0 -0
  380. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/acceptance/ms-37/manifest.yml +0 -0
  381. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  382. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  383. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/acceptance/ms-51/contract.md +0 -0
  384. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  385. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  386. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/acceptance/ms-51/manifest.yml +0 -0
  387. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  388. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/acceptance/ms-51/tsconfig.json +0 -0
  389. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  390. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/backends.py +0 -0
  391. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/conftest.py +0 -0
  392. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/fixtures/board-pipeline-basic.json +0 -0
  393. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  394. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  395. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  396. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  397. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/fixtures/playwright/all_pass.json +0 -0
  398. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  399. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/fixtures/playwright/mixed_fail.json +0 -0
  400. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  401. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  402. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/fixtures/playwright/skip.json +0 -0
  403. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/fixtures/playwright/truncated.json +0 -0
  404. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  405. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  406. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  407. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  408. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  409. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  410. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  411. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  412. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_acceptance.py +0 -0
  413. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_acceptance_drivers.py +0 -0
  414. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_agent.py +0 -0
  415. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_agent_api_error.py +0 -0
  416. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_agent_app.py +0 -0
  417. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_agent_branch_base.py +0 -0
  418. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_agent_branch_capture.py +0 -0
  419. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_agent_config_free_1712.py +0 -0
  420. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_agent_deploy_units_endpoint.py +0 -0
  421. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_agent_dirty_worktree.py +0 -0
  422. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  423. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_agent_graph_self_heal.py +0 -0
  424. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_agent_health_h3.py +0 -0
  425. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_agent_idle_restart.py +0 -0
  426. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_agent_push_failure.py +0 -0
  427. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_agent_reap.py +0 -0
  428. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_agent_repos_and_pull.py +0 -0
  429. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_agent_restart_services_endpoint.py +0 -0
  430. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_agent_skills_self_heal.py +0 -0
  431. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_agent_startup_diagnostics.py +0 -0
  432. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_agent_update.py +0 -0
  433. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_agent_update_bluegreen.py +0 -0
  434. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_agent_usage_limit.py +0 -0
  435. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_agent_zero_commit.py +0 -0
  436. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_ambient_home_isolation.py +0 -0
  437. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_approve_dependency_busy_2804.py +0 -0
  438. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_approve_reject_plan.py +0 -0
  439. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_approve_usage_gate.py +0 -0
  440. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_approved_work_2532.py +0 -0
  441. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_assignment_already_recorded_daemon.py +0 -0
  442. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_audit_log.py +0 -0
  443. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_audit_outcome.py +0 -0
  444. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_audit_query.py +0 -0
  445. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_auto_loop.py +0 -0
  446. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_auto_release_publish_2035.py +0 -0
  447. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_backend_selection.py +0 -0
  448. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_base_checkout_restore.py +0 -0
  449. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_block_log.py +0 -0
  450. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_board_cap_762.py +0 -0
  451. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_board_read_path.py +0 -0
  452. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_board_schema.py +0 -0
  453. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_board_service.py +0 -0
  454. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_board_state.py +0 -0
  455. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_brain.py +0 -0
  456. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_branch_model.py +0 -0
  457. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_bug_intake.py +0 -0
  458. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_build_worker_image_env_update.py +0 -0
  459. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_cargo_cache.py +0 -0
  460. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_check_gh_argv_containment.py +0 -0
  461. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_ci_acceptance_gate_1950.py +0 -0
  462. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_ci_fix.py +0 -0
  463. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_ci_gitlab.py +0 -0
  464. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_ci_parity_2091.py +0 -0
  465. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_ci_store.py +0 -0
  466. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_claim.py +0 -0
  467. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_claude_md_budget.py +0 -0
  468. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_cli_acceptance.py +0 -0
  469. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_cli_assign.py +0 -0
  470. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  471. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_cli_assign_interactive_remote.py +0 -0
  472. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_cli_assign_provider.py +0 -0
  473. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  474. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_cli_audit.py +0 -0
  475. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_cli_chat_continue.py +0 -0
  476. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_cli_decide.py +0 -0
  477. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_cli_diagnose_config_provenance.py +0 -0
  478. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_cli_diagnose_forge_availability.py +0 -0
  479. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_cli_diagnose_graph.py +0 -0
  480. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_cli_diagnose_self.py +0 -0
  481. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_cli_doctor.py +0 -0
  482. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_cli_doctor_config_free_1801.py +0 -0
  483. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  484. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_cli_drive.py +0 -0
  485. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_cli_drive_queue.py +0 -0
  486. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_cli_escalate.py +0 -0
  487. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_cli_fix_headless_review.py +0 -0
  488. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_cli_gate_a.py +0 -0
  489. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_cli_install_drift.py +0 -0
  490. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_cli_install_skills.py +0 -0
  491. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_cli_issue_comment.py +0 -0
  492. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_cli_issue_create_label.py +0 -0
  493. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_cli_issue_reopen.py +0 -0
  494. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_cli_issue_view_list.py +0 -0
  495. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_cli_merge.py +0 -0
  496. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_cli_milestone_assign.py +0 -0
  497. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_cli_milestone_capture.py +0 -0
  498. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_cli_milestone_chat_add_child.py +0 -0
  499. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_cli_milestone_dispatch.py +0 -0
  500. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_cli_milestone_gate_b.py +0 -0
  501. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_cli_milestone_gate_c.py +0 -0
  502. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_cli_milestone_order.py +0 -0
  503. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  504. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_cli_milestone_ship.py +0 -0
  505. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_cli_network.py +0 -0
  506. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_cli_new_issue_chat.py +0 -0
  507. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_cli_plans.py +0 -0
  508. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_cli_pr.py +0 -0
  509. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_cli_pull_artifact.py +0 -0
  510. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_cli_queue.py +0 -0
  511. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_cli_reattach_sessions.py +0 -0
  512. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_cli_refine_board.py +0 -0
  513. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_cli_release_preflight.py +0 -0
  514. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_cli_release_propagate.py +0 -0
  515. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_cli_release_window.py +0 -0
  516. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_cli_repo_2220.py +0 -0
  517. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
  518. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_cli_scorecard.py +0 -0
  519. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_cli_set_review_findings.py +0 -0
  520. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_cli_status_advisory_terminal.py +0 -0
  521. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_cli_status_contested_tag.py +0 -0
  522. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_cli_status_merge_queue.py +0 -0
  523. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_cli_status_provider.py +0 -0
  524. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_cli_status_review_finalizing.py +0 -0
  525. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_cli_status_test_failed_tag.py +0 -0
  526. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_cli_status_usage_limit.py +0 -0
  527. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_cli_sync_comments_873.py +0 -0
  528. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_cli_test_plan.py +0 -0
  529. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_cli_track.py +0 -0
  530. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_cli_tui_update.py +0 -0
  531. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_cli_wait.py +0 -0
  532. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_client_base_install.py +0 -0
  533. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_commands_common.py +0 -0
  534. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_comments.py +0 -0
  535. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_completion_summary.py +0 -0
  536. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_config.py +0 -0
  537. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_config_acceptance.py +0 -0
  538. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_config_audit.py +0 -0
  539. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_config_pricing.py +0 -0
  540. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  541. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_config_usage_gate.py +0 -0
  542. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_confirm_test.py +0 -0
  543. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_conflict_fix.py +0 -0
  544. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_conflict_fix_semantic.py +0 -0
  545. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
  546. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_coord_test.py +0 -0
  547. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_coord_test_runner_baseline.py +0 -0
  548. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_coord_test_runner_populated_home.py +0 -0
  549. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_coord_test_runner_routing.py +0 -0
  550. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_coord_test_runner_toolchain.py +0 -0
  551. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_coord_uat.py +0 -0
  552. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_coord_web_sse_restart_live.py +0 -0
  553. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_coordinator_machine.py +0 -0
  554. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_cross_platform_imports.py +0 -0
  555. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_dao.py +0 -0
  556. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_dashboard.py +0 -0
  557. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_dashboard_fixture.py +0 -0
  558. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_dashboard_terminal.py +0 -0
  559. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_dashboard_terminal_live.py +0 -0
  560. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_db.py +0 -0
  561. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_dead_end.py +0 -0
  562. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_deploy_coord_db_backup.py +0 -0
  563. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_deploy_coord_web_dist.py +0 -0
  564. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_deploy_coord_web_rollback.py +0 -0
  565. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_deploy_drive_queue_unit.py +0 -0
  566. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_deploy_failure_notify_unit.py +0 -0
  567. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_deploy_manifest.py +0 -0
  568. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_deploy_notify_unit.py +0 -0
  569. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_deploy_units_lane.py +0 -0
  570. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_deploy_web_unit.py +0 -0
  571. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_deps.py +0 -0
  572. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_diagnose.py +0 -0
  573. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_dispatch.py +0 -0
  574. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_dispatch_target_validation.py +0 -0
  575. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_done_housekeeping.py +0 -0
  576. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_drive.py +0 -0
  577. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_drive_queue.py +0 -0
  578. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_drive_queue_blocked_rendering.py +0 -0
  579. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_drive_queue_launch_argv.py +0 -0
  580. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
  581. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_drive_queue_roll_pending.py +0 -0
  582. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
  583. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_drive_state.py +0 -0
  584. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_drive_tmux.py +0 -0
  585. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_epic_up_capability_detection.py +0 -0
  586. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  587. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_epic_up_image_provenance.py +0 -0
  588. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_errors.py +0 -0
  589. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_events.py +0 -0
  590. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_failure_class.py +0 -0
  591. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_filelock.py +0 -0
  592. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  593. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_fix_of_force_override.py +0 -0
  594. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_fleet_config_health.py +0 -0
  595. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_fleet_health_probes.py +0 -0
  596. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_fleet_health_snapshot.py +0 -0
  597. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_fleet_watchdog.py +0 -0
  598. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_forge_availability.py +0 -0
  599. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_freshness.py +0 -0
  600. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_gate_a.py +0 -0
  601. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_gate_b.py +0 -0
  602. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_gate_snapshot_staleness.py +0 -0
  603. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_gates.py +0 -0
  604. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  605. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_gen_mock_index.py +0 -0
  606. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_generated_types_fixture.py +0 -0
  607. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_github_ops.py +0 -0
  608. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_github_throttle.py +0 -0
  609. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_goal.py +0 -0
  610. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_graph_health.py +0 -0
  611. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_graph_selfheal_absent_2237.py +0 -0
  612. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_handoff.py +0 -0
  613. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_health_checks.py +0 -0
  614. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_health_cli.py +0 -0
  615. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_health_cli_graph.py +0 -0
  616. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_health_config.py +0 -0
  617. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_health_context.py +0 -0
  618. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_health_coord_web_ci_pin.py +0 -0
  619. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_health_deploy_lane_facts.py +0 -0
  620. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_health_fix.py +0 -0
  621. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_health_incident_regression.py +0 -0
  622. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_health_issues_sync_staleness.py +0 -0
  623. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_health_pypi.py +0 -0
  624. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_health_registry.py +0 -0
  625. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_health_release_cordon_probe.py +0 -0
  626. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_health_timer_active.py +0 -0
  627. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_health_toolchain.py +0 -0
  628. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_health_unit_drift.py +0 -0
  629. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_health_unit_enablement.py +0 -0
  630. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_hooks.py +0 -0
  631. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_human_attended_437.py +0 -0
  632. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_init.py +0 -0
  633. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_install_agent_venv_2911.py +0 -0
  634. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_integration.py +0 -0
  635. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_interactive_briefing_echo.py +0 -0
  636. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_interactive_pane_log_2541.py +0 -0
  637. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_interactive_prefill_state.py +0 -0
  638. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_interactive_session_relaunch.py +0 -0
  639. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_interactive_test_verdict_backstop.py +0 -0
  640. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_interactive_token_attribution.py +0 -0
  641. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_interactive_worktree.py +0 -0
  642. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_issue_store_seam.py +0 -0
  643. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_issues_sync_status.py +0 -0
  644. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_liveness_auditor.py +0 -0
  645. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_liveness_notify.py +0 -0
  646. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_lock_contention_ratchet.py +0 -0
  647. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_machine_onboard.py +0 -0
  648. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_machine_pause.py +0 -0
  649. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_merge_queue.py +0 -0
  650. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_merge_verify.py +0 -0
  651. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_milestone_chat.py +0 -0
  652. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_milestone_dispatch.py +0 -0
  653. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_milestone_gate.py +0 -0
  654. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_milestone_order.py +0 -0
  655. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_milestone_seam.py +0 -0
  656. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_mock_author.py +0 -0
  657. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_model_tiering.py +0 -0
  658. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_models.py +0 -0
  659. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_models_config_labels.py +0 -0
  660. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_needs_attention.py +0 -0
  661. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_network.py +0 -0
  662. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_new_issue_chat.py +0 -0
  663. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_next_release_tag.py +0 -0
  664. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_node_shim.py +0 -0
  665. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_notifier_baseline.py +0 -0
  666. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_notifier_cli.py +0 -0
  667. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_notifier_collect.py +0 -0
  668. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_notifier_config.py +0 -0
  669. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_notifier_drive_seam.py +0 -0
  670. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_notifier_isolation.py +0 -0
  671. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_notifier_predicate.py +0 -0
  672. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_notifier_quiet_hours.py +0 -0
  673. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_notifier_service.py +0 -0
  674. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_notify.py +0 -0
  675. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_notify_drain.py +0 -0
  676. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_openapi.py +0 -0
  677. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_operational_defaults.py +0 -0
  678. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_overlap_fence.py +0 -0
  679. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_overlap_predict.py +0 -0
  680. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_packaged_deploy_units.py +0 -0
  681. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_parentage.py +0 -0
  682. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_paste_landed.py +0 -0
  683. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
  684. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_pipeline.py +0 -0
  685. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_plan_followup_approve_plan_command.py +0 -0
  686. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_plan_followup_pr_command.py +0 -0
  687. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_plan_followup_review_command.py +0 -0
  688. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_plan_only.py +0 -0
  689. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_plan_parser.py +0 -0
  690. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_platform_paths.py +0 -0
  691. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_portal_bridge.py +0 -0
  692. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_portal_config.py +0 -0
  693. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_portal_sync.py +0 -0
  694. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_pr_body_lint.py +0 -0
  695. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_prereqs.py +0 -0
  696. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_production_db_guard.py +0 -0
  697. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_progress.py +0 -0
  698. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_provider_seam.py +0 -0
  699. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_providers.py +0 -0
  700. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_providers_config_labels.py +0 -0
  701. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_providers_pty.py +0 -0
  702. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_quiet_hours.py +0 -0
  703. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_quiet_hours_store_2146.py +0 -0
  704. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_reap_merged_sessions.py +0 -0
  705. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_reap_stale_interactive_tick.py +0 -0
  706. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_reconcile.py +0 -0
  707. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_reconcile_branch.py +0 -0
  708. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_reconcile_completions.py +0 -0
  709. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
  710. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_reconcile_merges.py +0 -0
  711. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_reconcile_no_agent_record.py +0 -0
  712. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_reconcile_tick.py +0 -0
  713. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_reconcile_usage_limit_done.py +0 -0
  714. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_refine_chat.py +0 -0
  715. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_release_cordon_2101.py +0 -0
  716. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  717. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_release_cordon_deadlock_2240.py +0 -0
  718. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_release_cordon_stuck_2490.py +0 -0
  719. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_release_propagate.py +0 -0
  720. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_release_propagate_threshold.py +0 -0
  721. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_release_roll_between_legs_2854.py +0 -0
  722. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_release_roll_window_handoff.py +0 -0
  723. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_release_unified_1242.py +0 -0
  724. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_release_verify.py +0 -0
  725. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_release_window.py +0 -0
  726. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_remote_auto_prune.py +0 -0
  727. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_remote_interactive_reaper.py +0 -0
  728. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_repo_add.py +0 -0
  729. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_repo_edit_2220.py +0 -0
  730. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_repo_graph_fleet_2237.py +0 -0
  731. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_repo_onboard_2220.py +0 -0
  732. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_report_result_push.py +0 -0
  733. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_reports.py +0 -0
  734. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_retry.py +0 -0
  735. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_retry_advisory_1606.py +0 -0
  736. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_retry_type_1636.py +0 -0
  737. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_revalidate.py +0 -0
  738. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_review.py +0 -0
  739. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_review_end_review_without_verdict.py +0 -0
  740. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_review_parse_failure_diagnostic.py +0 -0
  741. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_review_reaffirm.py +0 -0
  742. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_review_state.py +0 -0
  743. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_review_verdict_backstop.py +0 -0
  744. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_review_verdict_override_audit.py +0 -0
  745. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_review_verdict_relay.py +0 -0
  746. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_review_zero_commits.py +0 -0
  747. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_scoped_review_wiring.py +0 -0
  748. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_scorecard.py +0 -0
  749. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_self_health.py +0 -0
  750. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_serve.py +0 -0
  751. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_serve_app_board_trim.py +0 -0
  752. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_serve_rest_routes.py +0 -0
  753. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_session.py +0 -0
  754. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_slice_issue_attribution.py +0 -0
  755. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_smoke.py +0 -0
  756. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_smoke_live_checkout_restore.py +0 -0
  757. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_smoke_workflow.py +0 -0
  758. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_spend_ceiling.py +0 -0
  759. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_spend_ceiling_coordinator.py +0 -0
  760. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_split.py +0 -0
  761. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_split_work.py +0 -0
  762. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_sql_dialect.py +0 -0
  763. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_stage_projection.py +0 -0
  764. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_stale_busy_reviewer_697.py +0 -0
  765. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_stalled_pipeline.py +0 -0
  766. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_state.py +0 -0
  767. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_state_review_findings_daemon.py +0 -0
  768. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_status_fleet_footer.py +0 -0
  769. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_stop_1567.py +0 -0
  770. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_store_contract.py +0 -0
  771. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_store_migrate.py +0 -0
  772. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_stuck.py +0 -0
  773. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
  774. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_terminal_command.py +0 -0
  775. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_test_author.py +0 -0
  776. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_test_chat.py +0 -0
  777. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_test_orchestrator.py +0 -0
  778. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_test_report.py +0 -0
  779. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_test_verdict_parsing.py +0 -0
  780. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_test_verdict_transcript_floor.py +0 -0
  781. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_text_io_encoding_audit.py +0 -0
  782. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_thin_client_board_audit.py +0 -0
  783. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_thin_client_config_load_1080.py +0 -0
  784. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_thin_client_daemon_routing_906.py +0 -0
  785. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_tmux_host.py +0 -0
  786. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_tmux_session.py +0 -0
  787. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_transcript_floor.py +0 -0
  788. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_usage.py +0 -0
  789. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_usage_limits.py +0 -0
  790. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_usage_rollup.py +0 -0
  791. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_venv_live_install_2121.py +0 -0
  792. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_version_single_source.py +0 -0
  793. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_watch.py +0 -0
  794. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  795. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_worker_env_venv_isolation.py +0 -0
  796. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_worker_events.py +0 -0
  797. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_worker_image_pin_sync.py +0 -0
  798. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_worker_safety.py +0 -0
  799. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_worker_test_scoping.py +0 -0
  800. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_worktree.py +0 -0
  801. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  802. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/test_write_parity.py +0 -0
  803. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tests/write_parity.py +0 -0
  804. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/.github/workflows/release-tui.yml +0 -0
  805. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/Cargo.lock +0 -0
  806. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/Cargo.toml +0 -0
  807. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/cargo-config-local-quadraui.toml.example +0 -0
  808. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/src/app/approved.rs +0 -0
  809. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/src/app/audit.rs +0 -0
  810. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/src/app/chat.rs +0 -0
  811. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/src/app/data.rs +0 -0
  812. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/src/app/dialogs.rs +0 -0
  813. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/src/app/doc_tabs.rs +0 -0
  814. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/src/app/drive.rs +0 -0
  815. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/src/app/drive_queue.rs +0 -0
  816. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/src/app/escalation.rs +0 -0
  817. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/src/app/events.rs +0 -0
  818. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/src/app/fixtures.rs +0 -0
  819. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/src/app/fleet_health.rs +0 -0
  820. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/src/app/fleet_sessions.rs +0 -0
  821. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/src/app/fleet_terminals.rs +0 -0
  822. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/src/app/format.rs +0 -0
  823. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/src/app/milestone_dag.rs +0 -0
  824. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/src/app/mod.rs +0 -0
  825. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/src/app/msv.rs +0 -0
  826. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/src/app/pipeline.rs +0 -0
  827. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/src/app/plans.rs +0 -0
  828. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/src/app/render.rs +0 -0
  829. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/src/app/reports.rs +0 -0
  830. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/src/app/sessions.rs +0 -0
  831. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/src/app/settings_ui.rs +0 -0
  832. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/src/app/sidebar.rs +0 -0
  833. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/src/app/terminal.rs +0 -0
  834. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/src/app/tests.rs +0 -0
  835. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/src/app/types.rs +0 -0
  836. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/src/app/workspace.rs +0 -0
  837. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/src/bin/gtk.rs +0 -0
  838. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/src/commands.rs +0 -0
  839. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/src/lib.rs +0 -0
  840. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/src/main.rs +0 -0
  841. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/src/settings.rs +0 -0
  842. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-33/audit_1039.rs +0 -0
  843. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-33/contract.md +0 -0
  844. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-33/manifest.yml +0 -0
  845. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  846. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  847. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  848. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  849. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-38/contract.md +0 -0
  850. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-38/manifest.yml +0 -0
  851. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  852. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  853. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  854. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  855. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  856. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  857. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  858. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  859. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  860. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  861. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-65/board_split_2288.rs +0 -0
  862. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
  863. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
  864. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-65/contract.md +0 -0
  865. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
  866. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-65/manifest.yml +0 -0
  867. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
  868. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
  869. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
  870. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
  871. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
  872. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
  873. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
  874. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
  875. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
  876. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
  877. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-65/tabs_persistence_2286.rs +0 -0
  878. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-67/approved_items_2532.rs +0 -0
  879. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-67/contract.md +0 -0
  880. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-67/manifest.d/2533.yml +0 -0
  881. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-67/manifest.yml +0 -0
  882. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-67/mocks/approved-items-chat-opened.screen +0 -0
  883. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-67/mocks/approved-items-context-menu.screen +0 -0
  884. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-67/mocks/approved-items-detail.screen +0 -0
  885. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-67/mocks/approved-items-empty.screen +0 -0
  886. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-67/mocks/approved-items-populated.screen +0 -0
  887. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/tests/acceptance/ms-67/pull_decomposition_2533.rs +0 -0
  888. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/tests/acceptance.rs +0 -0
  889. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/tests/cli.rs +0 -0
  890. {code_coordinator-0.5.289 → code_coordinator-0.5.291}/tui/tests/fixtures/board_sample.json +0 -0
@@ -31,6 +31,17 @@ jobs:
31
31
  # testpaths=["tests"]) was the one accidental gap. (ms-51 — Playwright,
32
32
  # never .py either — left this repo entirely with the webapp, #2009.)
33
33
  - run: pytest --ignore=tests/acceptance
34
+ # #2897: the Rust drift gate `tests/test_generated_rust_fixture.py`
35
+ # no longer byte-compares the committed `tui/src/app/types/generated.rs`
36
+ # (see docs/ADR_COORD_TUI_CI.md and the header comment further down
37
+ # this file) — this explicit step stands in for that comparison while
38
+ # `tui/` still lives here. `$COORD_TUI_SRC=.` names this checkout as
39
+ # the coord-tui root (`RUST_OUTPUT_RELPATH` keeps the `tui/` prefix for
40
+ # exactly this reason). One matrix leg only: the generator's output
41
+ # depends on `coord.serve_app.openapi_spec()`, not the Python version.
42
+ - name: python scripts/codegen.py --rust --check
43
+ if: matrix.python-version == '3.12'
44
+ run: COORD_TUI_SRC=. python scripts/codegen.py --rust --check
34
45
  # #2180: the cli-pytest sealed route (acceptance.drivers routes
35
46
  # "coord/**" -> cli-pytest -> tests/acceptance/ms-37) run through the
36
47
  # #2164 CI wrapper instead of a raw `pytest tests/acceptance` call, so
@@ -310,16 +321,31 @@ jobs:
310
321
  # for it to run against, and a job that installs Node to build nothing is
311
322
  # how the previous `acceptance`-on-every-push waste (#2389) started.
312
323
  #
313
- # #1941: `scripts/codegen.py` also generates coord-tui's RUST wire types
314
- # (`--rust`), and unlike the TS half above, `tui/` never left this repo —
315
- # so that drift gate needs no separate job or `coord-web` checkout at all.
316
- # It rides the ordinary `pytest --ignore=tests/acceptance` runs above, as
317
- # `tests/test_generated_rust_fixture.py::
318
- # test_committed_generated_rs_matches_generator_output`, the same way the
319
- # TS-side `tests/test_generated_types_fixture.py` already rides them for
320
- # the half of that check this repo can still make (the generator runs and
321
- # covers every schema; the coord-web byte-comparison itself is that repo's
322
- # own CI, per the paragraph above).
324
+ # #1941/#2897: `scripts/codegen.py` also generates coord-tui's RUST wire
325
+ # types (`--rust`). #2897 gave that half the SAME cross-repo shape as the
326
+ # TS half above (`--out PATH` / `$COORD_TUI_SRC`, no fallback default,
327
+ # docs/ADR_COORD_TUI_CI.md) — but `tui/` has not actually moved out of
328
+ # this repo yet, so unlike the TS byte-comparison (which is now
329
+ # exclusively `coord-web`'s CI job), the Rust byte-comparison has nowhere
330
+ # else to run yet and stays HERE, as an explicit step below rather than a
331
+ # pytest test:
332
+ #
333
+ # COORD_TUI_SRC=. python scripts/codegen.py --rust --check
334
+ #
335
+ # `tests/test_generated_rust_fixture.py` itself is narrowed to what one
336
+ # checkout can prove — the generator runs and covers every schema — same
337
+ # as `tests/test_generated_types_fixture.py`; it no longer byte-compares
338
+ # the committed `tui/src/app/types/generated.rs`. The day coord-tui gets
339
+ # its own checkout + CI, delete the step below (its replacement lives in
340
+ # that CI, installing `code-coordinator[server]` from PyPI exactly as
341
+ # `coord-web`'s does) — no pytest file to un-narrow.
342
+ #
343
+ # The consumer-side INTEGER-backed-bool text-scraping guard
344
+ # (`coord/board_bool_guard.py`) that used to also read Rust source text
345
+ # here is RETIRED as of #2897, not moved — see docs/ADR_COORD_TUI_CI.md:
346
+ # #2895 (Phase 1 of #2894) deleted coord-tui's last direct SQL reader, so
347
+ # `tests/test_board_schema.py`'s DTO-level assertions are now the sole
348
+ # guard against that class.
323
349
 
324
350
  # #2886: a real Postgres 16 service, so `coord/sql.py`'s Postgres branches
325
351
  # (paramstyle translation, upsert idioms, `information_schema`
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-coordinator
3
- Version: 0.5.289
3
+ Version: 0.5.291
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.289
3
+ Version: 0.5.291
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
@@ -39,7 +39,6 @@ coord/approved_work.py
39
39
  coord/audit.py
40
40
  coord/auto_loop.py
41
41
  coord/block_log.py
42
- coord/board_bool_guard.py
43
42
  coord/board_schema.py
44
43
  coord/board_service.py
45
44
  coord/board_wire.py
@@ -296,6 +295,7 @@ deploy/coord-web-dist-build.timer
296
295
  deploy/coord-web-rollback.sh
297
296
  deploy/coord-web.service
298
297
  deploy/node-shim.sh
298
+ docs/ADR_COORD_TUI_CI.md
299
299
  docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md
300
300
  docs/ADR_COORD_WEB_CI.md
301
301
  docs/ADR_COORD_WEB_DIST.md
@@ -33,7 +33,6 @@
33
33
  "coord/audit.py",
34
34
  "coord/auto_loop.py",
35
35
  "coord/block_log.py",
36
- "coord/board_bool_guard.py",
37
36
  "coord/board_schema.py",
38
37
  "coord/board_service.py",
39
38
  "coord/board_wire.py",
@@ -288,6 +287,7 @@
288
287
  "deploy/coord-web-rollback.sh",
289
288
  "deploy/coord-web.service",
290
289
  "deploy/node-shim.sh",
290
+ "docs/ADR_COORD_TUI_CI.md",
291
291
  "docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md",
292
292
  "docs/ADR_COORD_WEB_CI.md",
293
293
  "docs/ADR_COORD_WEB_DIST.md",
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "0.5.289",
2
+ "tag": "0.5.291",
3
3
  "distance": 0,
4
- "node": "ga013df1e45f8ba2ece0ba26be923f8a107dbe654",
4
+ "node": "g408957bf4d2de2370d4e9df055a80c1680a697a2",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-29"
@@ -4139,6 +4139,82 @@ and report back what you asked/proposed/filed/queued/linked (and any gap) \
4139
4139
  when done.\
4140
4140
  """
4141
4141
 
4142
+ # #2867: the ATTENDED posture. Appended to (never merged into)
4143
+ # DECOMPOSITION_CHAT_SYSTEM_PROMPT by `coord portal decompose-chat
4144
+ # --interactive` only — the headless dispatch
4145
+ # (`default_worker_command`'s `spec.type == "decomposition-chat"` branch)
4146
+ # must keep receiving the base prompt byte-for-byte, because it genuinely
4147
+ # has nobody to ask and its one-turn fire-and-forget shape is correct there.
4148
+ #
4149
+ # WHY this exists at all: #2750 shipped `--interactive` reusing the headless
4150
+ # prompt verbatim, so the attended session was written for an agent with
4151
+ # nobody to ask ("THIS iteration ends in EXACTLY ONE of three terminal
4152
+ # moves", each a command to run) and duly read the ledger, chose ASK, and
4153
+ # ran `enqueue-question` in the SAME turn — its whole output to the human
4154
+ # sitting there was a report of what it had already done. On a paid client
4155
+ # engagement where a round-trip takes days, that spent a day on questions
4156
+ # the operator may already have had answers to. The base prompt's
4157
+ # "summarize your plan before writing anything" was not enough: nothing
4158
+ # made it a STOP, and without a turn boundary a compliant session still
4159
+ # writes.
4160
+ DECOMPOSITION_CHAT_ATTENDED_ADDENDUM = """\
4161
+
4162
+ ── ATTENDED SESSION (`--interactive`) — OVERRIDES THE ABOVE ──
4163
+
4164
+ An operator is sitting at this terminal RIGHT NOW, watching you type. That \
4165
+ changes the shape of this iteration, and where this section conflicts with \
4166
+ anything above, THIS SECTION WINS.
4167
+
4168
+ **YOUR FIRST TURN WRITES NOTHING.** Not `coord portal enqueue-question`, not \
4169
+ `coord portal enqueue-status`, not `coord portal decision propose/reject/\
4170
+ supersede`, not `coord issue create`, not `coord milestone create`, not \
4171
+ `coord drive-queue add`, not `coord portal link`, not `coord issue edit`. \
4172
+ Read-only commands (`coord portal ledger`, `gh issue view`, reading files) \
4173
+ are fine and expected. The "EXACTLY ONE of three terminal moves" rule above \
4174
+ still decides WHICH exit this iteration takes — it just does not get to \
4175
+ happen until the operator has answered you.
4176
+
4177
+ So your first turn is:
4178
+
4179
+ 1. State your READ — the MODE line verbatim (as always), then what RUNNING \
4180
+ CONTEXT already tells you, explicitly including any operator-supplied \
4181
+ background recorded there.
4182
+ 2. State your PROPOSED EXIT — which of Ask / Propose / Decompose you intend, \
4183
+ the exact command(s) you would run (question text, decision text, issue \
4184
+ titles), and WHY that exit and not the other two.
4185
+ 3. State what you are ASSUMING or MISSING — above all, anything you were \
4186
+ about to ask the CLIENT that the OPERATOR may simply know. The operator may \
4187
+ have spoken to the client since the last iteration; a client round-trip \
4188
+ costs days and an operator answer costs one line, so ask the human in front \
4189
+ of you FIRST.
4190
+ 4. END YOUR TURN AND WAIT. Do not narrate a plan and then execute it in the \
4191
+ same turn — the turn boundary IS the confirmation.
4192
+
4193
+ Then act on what the operator says: carry out the exit as proposed, or the \
4194
+ revised one they steer you to. If they confirm with no changes, run the \
4195
+ commands exactly as you stated them and report back. If they redirect you \
4196
+ into a different exit, take that one — it is still exactly one terminal \
4197
+ move per iteration.
4198
+
4199
+ **Recording what the operator tells you.** Background the operator relays \
4200
+ ("I spoke to her — it's just the two of them, and the calendar is a \
4201
+ nice-to-have") is durable, ledger-class context that every FUTURE session on \
4202
+ every machine should see. It is not a decision, so do NOT push it through \
4203
+ `coord portal decision propose`. Record it verbatim with:
4204
+
4205
+ coord portal note <submission_id> "<what the operator told you>"
4206
+
4207
+ This is an ADDITIONAL write path you are permitted, on top of the ones the \
4208
+ Rules section above enumerates — and, being a write, it is also subject to \
4209
+ the first-turn rule: offer it, then record it once the operator agrees. \
4210
+ OFFER IT PROACTIVELY: the operator should not have to know this command \
4211
+ exists. Any time the operator gives you a substantive fact about the \
4212
+ client, the users, or the scope, say back what you would record and ask \
4213
+ whether to record it. Keep the wording theirs, not your paraphrase — the \
4214
+ ledger is verbatim by design, and the narrative (which is regenerable) is \
4215
+ where summarizing belongs.\
4216
+ """
4217
+
4142
4218
  # Deny list applied to decomposition-chat workers (#2533; extended #2750
4143
4219
  # IL-4 for the ask/propose/decompose intake loop). Unlike milestone-chat,
4144
4220
  # this type's WHOLE job is to write (issue create / issue edit / milestone
@@ -287,10 +287,12 @@ BOARD_PROJECTIONS: dict[str, type] = {
287
287
  #: therefore ship as ``0``/``1``. Their DTO fields are annotated ``int`` on
288
288
  #: purpose; ``tests/test_board_schema.py`` asserts the generated JSON Schema
289
289
  #: types them ``integer`` and never ``boolean``, so the wire shape survives a
290
- #: storage-engine swap (Postgres would make these real ``BOOLEAN``s). This is
291
- #: the DTO-level counterpart of ``coord/board_bool_guard.py``'s consumer-side
292
- #: check against the real Rust wire structs (``tui/src/app/types.rs`` and,
293
- #: since #1941, its generated ``types/generated.rs`` sibling).
290
+ #: storage-engine swap (Postgres would make these real ``BOOLEAN``s). This
291
+ #: WAS the DTO-level counterpart of ``coord/board_bool_guard.py``'s consumer-
292
+ #: side check against the real Rust wire structs (``tui/src/app/types.rs``
293
+ #: and its generated ``types/generated.rs`` sibling, #1941); that
294
+ #: text-scraping check is retired as of #2897 (docs/ADR_COORD_TUI_CI.md) —
295
+ #: this assertion is now the sole remaining guard.
294
296
  INTEGER_BACKED_BOOLEANS: frozenset[str] = frozenset(
295
297
  {"is_interactive", "review_scoped", "hold_after", "no_acceptance"}
296
298
  )
@@ -113,7 +113,8 @@ TRUNCATION_NOTICE = "\n… [truncated on the /board wire — full text: detail e
113
113
  # two: `coord/**` and `tui/**`). Lines carrying it survive the body cut; see
114
114
  # `_machine_readable_residue`. Kept in sync with the Rust side by
115
115
  # tests/test_board_wire.py::test_allowed_glob_marker_matches_the_rust_parser,
116
- # the same cross-language guard posture as coord/board_bool_guard.py.
116
+ # the same cross-language-guard posture the now-retired coord/board_bool_
117
+ # guard.py used (#2897, docs/ADR_COORD_TUI_CI.md).
117
118
  #
118
119
  # Measured cost of the retention: ZERO on today's live board — 0 of 781
119
120
  # issue bodies carry the marker (the house `## Files` convention is a bare
@@ -596,6 +596,7 @@ def _run_decompose_chat_interactive(
596
596
 
597
597
  from coord.agent import ( # noqa: PLC0415
598
598
  AssignmentSpec as _AssignmentSpecDc,
599
+ DECOMPOSITION_CHAT_ATTENDED_ADDENDUM,
599
600
  DECOMPOSITION_CHAT_DENY_COMMANDS,
600
601
  DECOMPOSITION_CHAT_SYSTEM_PROMPT,
601
602
  build_deny_prompt,
@@ -664,7 +665,8 @@ def _run_decompose_chat_interactive(
664
665
  if _board_service.resolve() is not None:
665
666
  click.secho(
666
667
  "note: this machine is a thin client — `coord portal decision`/"
667
- "`ledger`/`link` route through the daemon (#2751), but `coord "
668
+ "`ledger`/`link`/`note` route through the daemon (#2751/#2867), "
669
+ "but `coord "
668
670
  "portal enqueue-question`/`enqueue-status` (the Ask move) do "
669
671
  "not yet and will refuse loudly if this iteration needs them. "
670
672
  "ssh to the daemon host for that case (#2750's own stated "
@@ -699,7 +701,9 @@ def _run_decompose_chat_interactive(
699
701
  f"Intake session for portal submission {submission_id} "
700
702
  f"(MODE: {mode_word} — {discuss_reason}): read the full context at "
701
703
  f"{brief_path} (submission fields, repo topology, and the running-"
702
- "context ledger so far) and let's work through it."
704
+ "context ledger so far) and let's work through it. This is an "
705
+ "ATTENDED session: state your read and your PROPOSED exit, then stop "
706
+ "and wait for me — write nothing until I answer (#2867)."
703
707
  )
704
708
 
705
709
  spec = _AssignmentSpecDc(
@@ -719,15 +723,22 @@ def _run_decompose_chat_interactive(
719
723
  # internal branch table has no `"decomposition-chat"` case, so leaving
720
724
  # it implicit would silently fall through to the generic work-shaped
721
725
  # branch (full WORKER_SYSTEM_PROMPT + Edit/Write/Monitor), which is
722
- # wrong for a no-worktree chat type. Passing these explicitly keeps
723
- # this session byte-identical, on the system prompt, to the headless
724
- # dispatch path (`coord.agent.default_worker_command`'s own
725
- # `spec.type == "decomposition-chat"` branch).
726
+ # wrong for a no-worktree chat type.
727
+ #
728
+ # #2867: the attended addendum is appended HERE and only here — the
729
+ # headless dispatch path (`coord.agent.default_worker_command`'s own
730
+ # `spec.type == "decomposition-chat"` branch) keeps the base prompt
731
+ # byte-for-byte, so its one-turn fire-and-forget behaviour is unchanged.
732
+ # This session, by contrast, has a human in the pane: the addendum makes
733
+ # its first turn confirm-then-write (#2742's absorbed half, which #2750
734
+ # only ever wired into mode SELECTION, never into the posture itself).
726
735
  argv = provider.build_command(
727
736
  spec,
728
737
  resolved_model=resolved_model,
729
- system_prompt=DECOMPOSITION_CHAT_SYSTEM_PROMPT + build_deny_prompt(
730
- DECOMPOSITION_CHAT_DENY_COMMANDS
738
+ system_prompt=(
739
+ DECOMPOSITION_CHAT_SYSTEM_PROMPT
740
+ + DECOMPOSITION_CHAT_ATTENDED_ADDENDUM
741
+ + build_deny_prompt(DECOMPOSITION_CHAT_DENY_COMMANDS)
731
742
  ),
732
743
  allowed_tools="Read,Bash",
733
744
  )
@@ -1805,6 +1816,16 @@ def _render_ledger_text(payload: dict) -> str:
1805
1816
  f"{a['text']} (by {a['actor'] or 'customer'})"
1806
1817
  )
1807
1818
 
1819
+ # #2867: verbatim, attributed, in ledger seq order — its own heading so
1820
+ # a later session can tell operator-relayed background from something
1821
+ # the client actually wrote on the portal. `.get` (not `[...]`) because
1822
+ # a thin client may be talking to a daemon that predates this key.
1823
+ notes = payload.get("operator_notes") or []
1824
+ if notes:
1825
+ lines += ["", "## Operator notes"]
1826
+ for n in notes:
1827
+ lines.append(f"- [{n['seq']}] {n['text']} (by {n['actor'] or 'operator'})")
1828
+
1808
1829
  lines += ["", "## Decisions"]
1809
1830
  current = payload["decisions"]
1810
1831
  if not current:
@@ -1861,6 +1882,39 @@ def portal_ledger(submission_id: str, as_json: bool) -> None:
1861
1882
  click.echo(_render_ledger_text(payload))
1862
1883
 
1863
1884
 
1885
+ @portal_group.command("note")
1886
+ @click.argument("submission_id")
1887
+ @click.argument("text")
1888
+ def portal_note(submission_id: str, text: str) -> None:
1889
+ """Record operator-supplied background about SUBMISSION_ID (#2867).
1890
+
1891
+ The ledger layer that holds what the OPERATOR knows — "spoke to the
1892
+ client: household of two, no logins needed" — which before this had
1893
+ nowhere durable to live and died with the tmux pane it was typed into.
1894
+ Stored verbatim on the ledger, attributed to you, and rendered into
1895
+ every future session's RUNNING CONTEXT on any machine.
1896
+
1897
+ Deliberately NOT `coord portal decision propose`: a relayed fact is not
1898
+ a judgment call, has no proposed/confirmed lifecycle, and does not
1899
+ belong in the decision archive.
1900
+
1901
+ Like `decision` and `link` (#2751) this is not thin-client-refused — it
1902
+ routes through the daemon's `/portal-note` seam when `board_service` is
1903
+ configured, so it works from wherever the operator happens to be.
1904
+ """
1905
+ from coord import portal_store # noqa: PLC0415
1906
+
1907
+ try:
1908
+ entry = portal_store.append_operator_note(submission_id, text, actor=_actor())
1909
+ except ValueError as exc:
1910
+ click.secho(f"error: {exc}", fg="red")
1911
+ raise SystemExit(2) from exc
1912
+ click.secho(
1913
+ f"noted: {submission_id} #{entry.seq} (by {entry.actor}) — {entry.text}",
1914
+ fg="green",
1915
+ )
1916
+
1917
+
1864
1918
  @portal_group.group("decision")
1865
1919
  def portal_decision_group() -> None:
1866
1920
  """Propose / confirm / reject / supersede a decision (#2749).
@@ -278,6 +278,11 @@ def render_running_context_section(payload: dict[str, Any]) -> str:
278
278
  ones carrying why), and the current narrative. This is what lets a
279
279
  fresh iteration pick up exactly where the last one left off with no
280
280
  memory of the prior session (#2750's "the loop").
281
+
282
+ Since #2867 it also renders the ledger's operator-note layer — what a
283
+ human relayed out of band ("I spoke to her; it's just the two of them")
284
+ — attributed as operator-supplied so a session can tell it from
285
+ something the client wrote on the portal itself.
281
286
  """
282
287
  lines: list[str] = ["RUNNING CONTEXT (from the portal ledger):", "", "Q&A so far:"]
283
288
  qa = payload.get("qa") or []
@@ -301,6 +306,22 @@ def render_running_context_section(payload: dict[str, Any]) -> str:
301
306
  f"{a.get('text', '')} (by {a.get('actor') or 'customer'})"
302
307
  )
303
308
 
309
+ # #2867: verbatim and attributed, so a session on a different machine
310
+ # with no shared transcript still sees what the operator was told out of
311
+ # band. Placed ahead of decisions because it is INPUT to them.
312
+ notes = payload.get("operator_notes") or []
313
+ if notes:
314
+ lines.append("")
315
+ lines.append(
316
+ "Operator-supplied background (relayed by a human, NOT written by "
317
+ "the client on the portal — treat as fact, do not re-ask it):"
318
+ )
319
+ for n in notes:
320
+ lines.append(
321
+ f" - [{n.get('seq')}] {n.get('text')} "
322
+ f"(by {n.get('actor') or 'operator'})"
323
+ )
324
+
304
325
  lines.append("")
305
326
  lines.append("Current decisions (proposed/confirmed — treat as live guidance):")
306
327
  current = payload.get("decisions") or []
@@ -1739,6 +1739,44 @@ LEDGER_KIND_DRAFT_EDITED = "draft_edited"
1739
1739
  LEDGER_KIND_DRAFT_APPROVED = "draft_approved"
1740
1740
  LEDGER_KIND_DRAFT_REJECTED = "draft_rejected"
1741
1741
 
1742
+ #: #2867: background the OPERATOR relays — "I spoke to her; it's just the two
1743
+ #: of them and the calendar is a nice-to-have." Ledger-class, not
1744
+ #: decision-class: it is a FACT someone told the operator, not a judgment
1745
+ #: call with a proposed/confirmed lifecycle, so forcing it through
1746
+ #: `coord portal decision propose` would both lose the raw statement and
1747
+ #: pollute the decision archive. Still coord-observed in the sense this
1748
+ #: section's ownership note means — a human typed it at coord's own CLI,
1749
+ #: which is not "an agent's say-so about a fact it does not solely observe".
1750
+ #: Stored VERBATIM and never folded into the narrative (#2746: "a ledger that
1751
+ #: IS a narrative cannot be regenerated — that asymmetry is the design").
1752
+ LEDGER_KIND_OPERATOR_NOTE = "operator_note"
1753
+
1754
+ #: Marks a ledger ``actor`` as a human at coord's CLI rather than the portal
1755
+ #: wire, so a later session can tell operator-relayed context from something
1756
+ #: the client actually wrote. See :func:`operator_actor`.
1757
+ OPERATOR_ACTOR_PREFIX = "operator:"
1758
+
1759
+
1760
+ def operator_actor(name: str = "") -> str:
1761
+ """The ``actor`` string for an operator-authored ledger row.
1762
+
1763
+ ``"jane"`` → ``"operator:jane"``; empty → the bare ``"operator"``. Already
1764
+ prefixed values pass through unchanged, so routing a note through the
1765
+ daemon (which re-normalizes) can't produce ``operator:operator:jane``.
1766
+ """
1767
+ n = (name or "").strip()
1768
+ if not n:
1769
+ return "operator"
1770
+ return n if n.startswith(OPERATOR_ACTOR_PREFIX) else f"{OPERATOR_ACTOR_PREFIX}{n}"
1771
+
1772
+
1773
+ def is_operator_actor(actor: str) -> bool:
1774
+ """True when *actor* names a human at coord's CLI (:func:`operator_actor`'s
1775
+ output) rather than the customer or an agent — what the briefing renders
1776
+ attribute notes with."""
1777
+ a = (actor or "").strip()
1778
+ return a == "operator" or a.startswith(OPERATOR_ACTOR_PREFIX)
1779
+
1742
1780
 
1743
1781
  @dataclass(frozen=True)
1744
1782
  class LedgerEntry:
@@ -1870,6 +1908,79 @@ def ledger_for_submission(submission_id: str) -> list[LedgerEntry]:
1870
1908
  return [_ledger_from_row(r) for r in rows]
1871
1909
 
1872
1910
 
1911
+ def operator_notes_for_submission(submission_id: str) -> list[LedgerEntry]:
1912
+ """*submission_id*'s operator notes (#2867), oldest first — the ledger
1913
+ rows a human typed, filtered out of :func:`ledger_for_submission`'s full
1914
+ history by kind."""
1915
+ return [
1916
+ e
1917
+ for e in ledger_for_submission(submission_id)
1918
+ if e.kind == LEDGER_KIND_OPERATOR_NOTE
1919
+ ]
1920
+
1921
+
1922
+ def _append_operator_note_local(
1923
+ submission_id: str, text: str, *, actor: str = "", now: float | None = None
1924
+ ) -> LedgerEntry:
1925
+ """Write half of :func:`append_operator_note` — runs on the daemon host
1926
+ (either directly, or via ``/portal-note`` on behalf of a thin client).
1927
+
1928
+ Validates the submission EXISTS here rather than in the CLI: on a thin
1929
+ client the local ``portal_submissions`` table is empty by construction
1930
+ (#2336), so a caller-side check would reject every id. Doing it here
1931
+ means the "unknown submission" error is raised where the real table
1932
+ lives, whichever machine the operator typed the command on.
1933
+ """
1934
+ if not submission_id or not submission_id.strip():
1935
+ raise ValueError("operator note needs a submission_id")
1936
+ if not text or not text.strip():
1937
+ raise ValueError("operator note needs non-empty text")
1938
+ if get_submission(submission_id) is None:
1939
+ raise ValueError(
1940
+ f"unknown submission {submission_id!r} — no portal submission with "
1941
+ "that id (check `coord portal status` for the current ids)"
1942
+ )
1943
+ return append_ledger_entry(
1944
+ submission_id,
1945
+ LEDGER_KIND_OPERATOR_NOTE,
1946
+ text=text.strip(),
1947
+ actor=operator_actor(actor),
1948
+ now=now,
1949
+ )
1950
+
1951
+
1952
+ def _route_note(payload: dict[str, Any]) -> dict[str, Any] | None:
1953
+ """POST *payload* to the daemon's ``/portal-note`` seam, or ``None`` if
1954
+ this process IS the daemon host — the note-shaped twin of
1955
+ :func:`_route_decision`, and daemon-routed for exactly the same reason
1956
+ (#2751): the operator may be sitting at any machine in the fleet, and a
1957
+ note written into a thin client's own empty DB would be silently lost.
1958
+ """
1959
+ from coord import board_service # noqa: PLC0415
1960
+
1961
+ svc = board_service.resolve()
1962
+ return board_service.route_write(svc, "/portal-note", payload)
1963
+
1964
+
1965
+ def append_operator_note(
1966
+ submission_id: str, text: str, *, actor: str = "", now: float | None = None
1967
+ ) -> LedgerEntry:
1968
+ """Append one operator-supplied background fact to *submission_id*'s
1969
+ ledger (#2867) — routed to the daemon when ``board_service`` is
1970
+ configured, else written locally.
1971
+
1972
+ Raises :class:`ValueError` for an unknown submission, empty text, or a
1973
+ missing id. The stored text is VERBATIM (stripped of surrounding
1974
+ whitespace only) and is never rewritten into the narrative.
1975
+ """
1976
+ routed = _route_note(
1977
+ {"submission_id": submission_id, "text": text, "actor": actor}
1978
+ )
1979
+ if routed is not None:
1980
+ return _ledger_from_row(routed["entry"])
1981
+ return _append_operator_note_local(submission_id, text, actor=actor, now=now)
1982
+
1983
+
1873
1984
  # ── layer 2: decisions (agent-authored, operator-confirmed) ─────────────────
1874
1985
 
1875
1986
  DECISION_PROPOSED = "proposed"
@@ -2208,6 +2319,11 @@ def render_ledger_payload(submission_id: str) -> dict[str, Any]:
2208
2319
  :func:`coord.portal_sync._record_question_answer` never drops one just
2209
2320
  because it can't be paired) lands in ``unpaired_answers`` instead of
2210
2321
  being silently lost.
2322
+
2323
+ Operator notes (#2867) come back verbatim under their own
2324
+ ``operator_notes`` key, in ledger ``seq`` order — deliberately NOT mixed
2325
+ into ``qa`` (they answer no question) and NOT folded into ``narrative``
2326
+ (they are ledger-class facts, and the narrative is regenerable).
2211
2327
  """
2212
2328
  ledger = ledger_for_submission(submission_id)
2213
2329
  decisions = decisions_for_submission(submission_id)
@@ -2215,8 +2331,11 @@ def render_ledger_payload(submission_id: str) -> dict[str, Any]:
2215
2331
 
2216
2332
  questions: dict[int | None, dict[str, Any]] = {}
2217
2333
  unpaired_answers: list[LedgerEntry] = []
2334
+ operator_notes: list[LedgerEntry] = []
2218
2335
  for entry in ledger:
2219
- if entry.kind == LEDGER_KIND_QUESTION_PUSHED:
2336
+ if entry.kind == LEDGER_KIND_OPERATOR_NOTE:
2337
+ operator_notes.append(entry)
2338
+ elif entry.kind == LEDGER_KIND_QUESTION_PUSHED:
2220
2339
  questions.setdefault(
2221
2340
  entry.question_revision, {"question": entry, "answers": []}
2222
2341
  )
@@ -2252,6 +2371,19 @@ def render_ledger_payload(submission_id: str) -> dict[str, Any]:
2252
2371
  }
2253
2372
  for a in unpaired_answers
2254
2373
  ],
2374
+ # #2867: verbatim, in ledger `seq` order (`ledger_for_submission` is
2375
+ # seq-ordered and this list preserves that), carrying the operator
2376
+ # `actor` so every renderer can attribute them rather than letting
2377
+ # them read as something the client said.
2378
+ "operator_notes": [
2379
+ {
2380
+ "seq": n.seq,
2381
+ "text": n.text,
2382
+ "actor": n.actor,
2383
+ "recorded_at": n.recorded_at,
2384
+ }
2385
+ for n in operator_notes
2386
+ ],
2255
2387
  "decisions": [
2256
2388
  {
2257
2389
  "seq": d.seq,