code-coordinator 0.5.554__tar.gz → 0.5.556__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 (930) hide show
  1. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/PKG-INFO +3 -1
  2. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/code_coordinator.egg-info/PKG-INFO +3 -1
  3. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/code_coordinator.egg-info/SOURCES.txt +4 -0
  4. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/code_coordinator.egg-info/requires.txt +5 -0
  5. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/code_coordinator.egg-info/scm_file_list.json +4 -0
  6. code_coordinator-0.5.556/code_coordinator.egg-info/scm_version.json +8 -0
  7. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/acceptance_drivers.py +141 -20
  8. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/agent.py +33 -0
  9. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/agent_app.py +113 -4
  10. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/commands/release.py +39 -9
  11. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/drive_queue.py +143 -15
  12. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/merge_queue.py +221 -17
  13. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/models.py +97 -0
  14. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/prereqs.py +241 -0
  15. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/release_propagate.py +37 -0
  16. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/review.py +97 -4
  17. code_coordinator-0.5.556/coord/win_native_bridge.py +334 -0
  18. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/install-agent.sh +90 -5
  19. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/pyproject.toml +37 -0
  20. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_acceptance_drivers.py +166 -0
  21. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_agent_update.py +249 -4
  22. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_release_propagate.py +170 -0
  23. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_drive_queue.py +198 -1
  24. code_coordinator-0.5.556/tests/test_install_agent_capabilities_3515.py +175 -0
  25. code_coordinator-0.5.556/tests/test_install_agent_wsl_bridge_3515.py +172 -0
  26. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_merge_queue.py +360 -0
  27. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_prereqs.py +178 -2
  28. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_release_propagate.py +53 -0
  29. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_review.py +180 -0
  30. code_coordinator-0.5.556/tests/test_win_native_bridge.py +338 -0
  31. code_coordinator-0.5.554/code_coordinator.egg-info/scm_version.json +0 -8
  32. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/.claude/commands/board.md +0 -0
  33. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/.claude/commands/complete-session.md +0 -0
  34. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/.claude/commands/coordinator.md +0 -0
  35. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/.githooks/_lib.sh +0 -0
  36. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/.githooks/post-checkout +0 -0
  37. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/.githooks/post-commit +0 -0
  38. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/.githooks/post-merge +0 -0
  39. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  40. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/.github/coord-ci-acceptance.yml +0 -0
  41. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/.github/workflows/auto-release.yml +0 -0
  42. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/.github/workflows/publish.yml +0 -0
  43. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/.github/workflows/test.yml +0 -0
  44. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/.gitignore +0 -0
  45. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/CLAUDE.md +0 -0
  46. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/GOAL.md +0 -0
  47. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/LICENSE +0 -0
  48. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/MANIFEST.in +0 -0
  49. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/README.md +0 -0
  50. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/code_coordinator.egg-info/dependency_links.txt +0 -0
  51. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/code_coordinator.egg-info/entry_points.txt +0 -0
  52. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/code_coordinator.egg-info/top_level.txt +0 -0
  53. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/__init__.py +0 -0
  54. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/_board_mapping.py +0 -0
  55. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/acceptance.py +0 -0
  56. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/agent_update.py +0 -0
  57. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/agents/opencode/.gitignore +0 -0
  58. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/agents/opencode/agents/work.md +0 -0
  59. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/agents/opencode/routing.jsonc +0 -0
  60. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/approved_work.py +0 -0
  61. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/audit.py +0 -0
  62. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/auto_loop.py +0 -0
  63. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/backup.py +0 -0
  64. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/block_log.py +0 -0
  65. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/board_schema.py +0 -0
  66. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/board_service.py +0 -0
  67. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/board_wire.py +0 -0
  68. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/brain.py +0 -0
  69. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/branch_model.py +0 -0
  70. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/bug_intake.py +0 -0
  71. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/bugbash.py +0 -0
  72. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/cargo_cache.py +0 -0
  73. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/ci_fix.py +0 -0
  74. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/ci_github.py +0 -0
  75. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/ci_gitlab.py +0 -0
  76. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/ci_store.py +0 -0
  77. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/claim.py +0 -0
  78. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/claude_setup_token.py +0 -0
  79. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/cli.py +0 -0
  80. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/client.py +0 -0
  81. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/codegen.py +0 -0
  82. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/commands/__init__.py +0 -0
  83. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/commands/_common.py +0 -0
  84. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/commands/acceptance.py +0 -0
  85. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/commands/agent_ops.py +0 -0
  86. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/commands/audit.py +0 -0
  87. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/commands/backup.py +0 -0
  88. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/commands/bugbash.py +0 -0
  89. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/commands/chat.py +0 -0
  90. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/commands/ci.py +0 -0
  91. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/commands/codegen.py +0 -0
  92. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/commands/dispatch.py +0 -0
  93. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/commands/dispatch_workers.py +0 -0
  94. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/commands/dr.py +0 -0
  95. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/commands/drive.py +0 -0
  96. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/commands/drive_queue.py +0 -0
  97. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/commands/gate_a.py +0 -0
  98. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/commands/gates.py +0 -0
  99. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/commands/issues.py +0 -0
  100. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/commands/lifecycle.py +0 -0
  101. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/commands/machine.py +0 -0
  102. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/commands/merge.py +0 -0
  103. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/commands/milestone.py +0 -0
  104. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/commands/plan_followup.py +0 -0
  105. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/commands/plans.py +0 -0
  106. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/commands/portal.py +0 -0
  107. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/commands/pr.py +0 -0
  108. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/commands/repo.py +0 -0
  109. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/commands/report.py +0 -0
  110. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/commands/review.py +0 -0
  111. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/commands/scorecard.py +0 -0
  112. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/commands/sessions.py +0 -0
  113. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/commands/setup.py +0 -0
  114. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/commands/status.py +0 -0
  115. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/commands/store_migrate.py +0 -0
  116. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/commands/terminal.py +0 -0
  117. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/commands/test_gate.py +0 -0
  118. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/commands/tui.py +0 -0
  119. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/comments.py +0 -0
  120. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/config.py +0 -0
  121. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/config_reload.py +0 -0
  122. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/confirm_test.py +0 -0
  123. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/conflict_fix.py +0 -0
  124. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/dao.py +0 -0
  125. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/dashboard/__init__.py +0 -0
  126. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/dashboard/fixture.py +0 -0
  127. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/dashboard/index.html +0 -0
  128. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/dashboard/server.py +0 -0
  129. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/dashboard/terminal.py +0 -0
  130. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/db.py +0 -0
  131. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/dead_end.py +0 -0
  132. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/decomposition_chat.py +0 -0
  133. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/deploy/README.md +0 -0
  134. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/deploy/coord-agent.service +0 -0
  135. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/deploy/coord-backup.service +0 -0
  136. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/deploy/coord-backup.timer +0 -0
  137. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/deploy/coord-db-backup.service +0 -0
  138. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/deploy/coord-db-backup.sh +0 -0
  139. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/deploy/coord-db-backup.timer +0 -0
  140. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/deploy/coord-dr-verify.service +0 -0
  141. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/deploy/coord-dr-verify.timer +0 -0
  142. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/deploy/coord-drive-queue.service +0 -0
  143. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/deploy/coord-drive-queue.timer +0 -0
  144. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/deploy/coord-failure-notify.service +0 -0
  145. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/deploy/coord-fleet-watchdog.service +0 -0
  146. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/deploy/coord-fleet-watchdog.timer +0 -0
  147. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/deploy/coord-notify.service +0 -0
  148. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/deploy/coord-notify.timer +0 -0
  149. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/deploy/coord-release-propagate.service +0 -0
  150. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/deploy/coord-release-propagate.timer +0 -0
  151. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/deploy/coord-release-window.service +0 -0
  152. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/deploy/coord-release-window.timer +0 -0
  153. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/deploy/coord-serve.service +0 -0
  154. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/deploy/coord-web-dist-build.service +0 -0
  155. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/deploy/coord-web-dist-build.timer +0 -0
  156. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/deploy/coord-web.service +0 -0
  157. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/deploy_manifest.py +0 -0
  158. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/deploy_units.py +0 -0
  159. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/deprecation_telemetry.py +0 -0
  160. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/deps.py +0 -0
  161. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/diagnose.py +0 -0
  162. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/dispatch.py +0 -0
  163. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/dispatch_liveness.py +0 -0
  164. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/dist_name.py +0 -0
  165. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/dr_promote.py +0 -0
  166. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/dr_verify.py +0 -0
  167. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/drive.py +0 -0
  168. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/drive_sessions_snapshot.py +0 -0
  169. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/drive_state.py +0 -0
  170. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/events.py +0 -0
  171. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/failure_class.py +0 -0
  172. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/failure_classifier.py +0 -0
  173. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/filelock.py +0 -0
  174. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/fleet_config_health.py +0 -0
  175. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/forge_availability.py +0 -0
  176. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/freshness.py +0 -0
  177. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/gate_a.py +0 -0
  178. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/gate_b.py +0 -0
  179. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/gate_snapshot.py +0 -0
  180. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/gates.py +0 -0
  181. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/gen_board_fixture.py +0 -0
  182. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/github_ops.py +0 -0
  183. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/github_throttle.py +0 -0
  184. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/goal.py +0 -0
  185. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/graph_health.py +0 -0
  186. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/gtk_native_driver.py +0 -0
  187. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/health/__init__.py +0 -0
  188. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/health/aggregate.py +0 -0
  189. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/health/checks/__init__.py +0 -0
  190. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/health/checks/_ci_pin.py +0 -0
  191. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/health/checks/agent_install.py +0 -0
  192. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/health/checks/cargo_targets.py +0 -0
  193. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/health/checks/claude_binary.py +0 -0
  194. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/health/checks/config_drift.py +0 -0
  195. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/health/checks/coord_tui_ci_pin.py +0 -0
  196. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/health/checks/coord_web_ci_pin.py +0 -0
  197. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/health/checks/deploy_lane_facts.py +0 -0
  198. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/health/checks/disk.py +0 -0
  199. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/health/checks/fleet_board.py +0 -0
  200. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  201. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/health/checks/fleet_phantom.py +0 -0
  202. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/health/checks/fleet_unit_drift.py +0 -0
  203. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/health/checks/graph.py +0 -0
  204. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/health/checks/graphify_cli.py +0 -0
  205. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/health/checks/index_lock.py +0 -0
  206. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/health/checks/issues_sync_staleness.py +0 -0
  207. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/health/checks/local_machine_identity.py +0 -0
  208. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/health/checks/plan_usage.py +0 -0
  209. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/health/checks/pr_churn.py +0 -0
  210. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/health/checks/release_cordon.py +0 -0
  211. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/health/checks/repo_state.py +0 -0
  212. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/health/checks/spawned_coord.py +0 -0
  213. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/health/checks/stalled_pipeline.py +0 -0
  214. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/health/checks/timer_active.py +0 -0
  215. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/health/checks/toolchain.py +0 -0
  216. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/health/checks/unit_drift.py +0 -0
  217. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/health/checks/unit_enablement.py +0 -0
  218. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/health/checks/wedged_drive_queue.py +0 -0
  219. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/health/checks/worktrees.py +0 -0
  220. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/health/cli.py +0 -0
  221. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/health/context.py +0 -0
  222. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/health/fleet_snapshot.py +0 -0
  223. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/health/models.py +0 -0
  224. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/health/pypi.py +0 -0
  225. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/health/registry.py +0 -0
  226. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/health/render.py +0 -0
  227. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/health/units.py +0 -0
  228. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/hooks.py +0 -0
  229. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/housekeeping.py +0 -0
  230. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/interactive.py +0 -0
  231. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/invariant_alarms.py +0 -0
  232. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/issue_store.py +0 -0
  233. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/issues_sync_status.py +0 -0
  234. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/liveness_auditor.py +0 -0
  235. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/mac_native_driver.py +0 -0
  236. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/machine_fault.py +0 -0
  237. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/machine_metrics.py +0 -0
  238. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/machine_onboard.py +0 -0
  239. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/machine_pause.py +0 -0
  240. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/machine_stats.py +0 -0
  241. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/milestone_chat.py +0 -0
  242. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/milestone_dispatch.py +0 -0
  243. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/milestone_gate.py +0 -0
  244. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/milestone_order.py +0 -0
  245. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/mock_author.py +0 -0
  246. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/network.py +0 -0
  247. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/new_issue_chat.py +0 -0
  248. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/notifier/__init__.py +0 -0
  249. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/notifier/baseline.py +0 -0
  250. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/notifier/cli.py +0 -0
  251. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/notifier/collect.py +0 -0
  252. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/notifier/digest.py +0 -0
  253. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/notifier/models.py +0 -0
  254. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/notifier/predicate.py +0 -0
  255. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/notifier/service.py +0 -0
  256. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/notifier/store.py +0 -0
  257. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/notifier/transport.py +0 -0
  258. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/notify.py +0 -0
  259. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/openapi.py +0 -0
  260. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/overlap_fence.py +0 -0
  261. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/overlap_predict.py +0 -0
  262. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/parentage.py +0 -0
  263. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/parentage_github.py +0 -0
  264. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/pipeline.py +0 -0
  265. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/plan_parser.py +0 -0
  266. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/plans.py +0 -0
  267. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/platform_paths.py +0 -0
  268. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/portal_bridge.py +0 -0
  269. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/portal_store.py +0 -0
  270. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/portal_sync.py +0 -0
  271. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/pr_body_lint.py +0 -0
  272. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/progress.py +0 -0
  273. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/providers/__init__.py +0 -0
  274. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/providers/base.py +0 -0
  275. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/providers/claude.py +0 -0
  276. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/providers/claude_pty.py +0 -0
  277. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/providers/opencode.py +0 -0
  278. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/queue_diagnose.py +0 -0
  279. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/reconcile.py +0 -0
  280. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/reconcile_tick.py +0 -0
  281. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/refine_chat.py +0 -0
  282. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/release_cordon.py +0 -0
  283. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/release_gate.py +0 -0
  284. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/release_verify.py +0 -0
  285. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/release_window.py +0 -0
  286. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/repo_dormancy.py +0 -0
  287. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/repo_edit.py +0 -0
  288. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/repo_onboard.py +0 -0
  289. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/reports.py +0 -0
  290. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/rest_schema.py +0 -0
  291. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/restart_cmd.py +0 -0
  292. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/revalidate.py +0 -0
  293. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/scorecard.py +0 -0
  294. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/self_health.py +0 -0
  295. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/serve_app.py +0 -0
  296. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  297. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  298. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  299. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  300. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  301. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/skills/portal-followup/SKILL.md +0 -0
  302. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/skills/release-now/SKILL.md +0 -0
  303. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  304. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  305. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/skills/update-issue/SKILL.md +0 -0
  306. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/smoke.py +0 -0
  307. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/smoke_tags.py +0 -0
  308. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/spend_ceiling.py +0 -0
  309. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/split_work.py +0 -0
  310. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/sql.py +0 -0
  311. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/stage_projection.py +0 -0
  312. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/state.py +0 -0
  313. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/store_migrate.py +0 -0
  314. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/store_parity.py +0 -0
  315. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/templates/deploy-cloudflare.node.yml +0 -0
  316. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/test_author.py +0 -0
  317. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/test_chat.py +0 -0
  318. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/test_orchestrator.py +0 -0
  319. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/test_report.py +0 -0
  320. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/tui_pty_driver.py +0 -0
  321. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/tui_release.py +0 -0
  322. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/uat_checks.py +0 -0
  323. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/usage.py +0 -0
  324. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/usage_limits.py +0 -0
  325. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/usage_rollup.py +0 -0
  326. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/win_native_driver.py +0 -0
  327. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coord/worker_events.py +0 -0
  328. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/coordinator.example.yml +0 -0
  329. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/deploy/coord-agent.service +0 -0
  330. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/deploy/coord-backup.service +0 -0
  331. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/deploy/coord-backup.timer +0 -0
  332. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/deploy/coord-db-backup.service +0 -0
  333. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/deploy/coord-db-backup.sh +0 -0
  334. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/deploy/coord-db-backup.timer +0 -0
  335. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/deploy/coord-dr-verify.service +0 -0
  336. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/deploy/coord-dr-verify.timer +0 -0
  337. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/deploy/coord-drive-queue.service +0 -0
  338. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/deploy/coord-drive-queue.timer +0 -0
  339. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/deploy/coord-failure-notify.service +0 -0
  340. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/deploy/coord-failure-notify.sh +0 -0
  341. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/deploy/coord-fleet-watchdog.service +0 -0
  342. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/deploy/coord-fleet-watchdog.timer +0 -0
  343. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/deploy/coord-notify.service +0 -0
  344. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/deploy/coord-notify.timer +0 -0
  345. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/deploy/coord-release-propagate.service +0 -0
  346. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/deploy/coord-release-propagate.timer +0 -0
  347. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/deploy/coord-release-window.service +0 -0
  348. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/deploy/coord-release-window.timer +0 -0
  349. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/deploy/coord-serve.service +0 -0
  350. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/deploy/coord-web-dist-build.service +0 -0
  351. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/deploy/coord-web-dist-build.sh +0 -0
  352. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/deploy/coord-web-dist-build.timer +0 -0
  353. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/deploy/coord-web-rollback.sh +0 -0
  354. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/deploy/coord-web.service +0 -0
  355. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/deploy/node-shim.sh +0 -0
  356. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/docs/ADR_COORD_TUI_CI.md +0 -0
  357. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  358. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/docs/ADR_COORD_WEB_CI.md +0 -0
  359. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/docs/ADR_COORD_WEB_DIST.md +0 -0
  360. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
  361. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/docs/AGENT_OPERATIONS.md +0 -0
  362. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/docs/ARCHITECTURE.md +0 -0
  363. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/docs/ARCH_SECURITY_GATES.md +0 -0
  364. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/docs/COCKPIT.md +0 -0
  365. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/docs/CONTROL_CENTER.md +0 -0
  366. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/docs/COST_DISCIPLINE.md +0 -0
  367. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/docs/CROSS_PLATFORM.md +0 -0
  368. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/docs/CUSTOMER_FACING_APPS.md +0 -0
  369. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/docs/CUSTOMER_PORTAL.md +0 -0
  370. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/docs/DATA_STORE_SELECTION.md +0 -0
  371. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/docs/DISASTER_RECOVERY.md +0 -0
  372. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/docs/DRIVE_QUEUE.md +0 -0
  373. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/docs/EPHEMERAL_WORKERS.md +0 -0
  374. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/docs/FORGE_MIGRATION.md +0 -0
  375. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/docs/GRAPHIFY_SETUP.md +0 -0
  376. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/docs/ISSUE_GUIDANCE.md +0 -0
  377. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/docs/MAC_MINI.md +0 -0
  378. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  379. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/docs/NOTIFIER.md +0 -0
  380. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/docs/OPENCODE_VERIFICATION.md +0 -0
  381. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/docs/OPERATING_GOTCHAS.md +0 -0
  382. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/docs/OPERATOR_GUIDES.md +0 -0
  383. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/docs/ORACLE_LOOP.md +0 -0
  384. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/docs/PHONE_WEBAPP.md +0 -0
  385. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/docs/PIPELINE_V2.md +0 -0
  386. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/docs/PLATFORM_EVOLUTION.md +0 -0
  387. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/docs/SECOND_BACKEND.md +0 -0
  388. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/docs/STORE_SERVICE.md +0 -0
  389. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  390. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/docs/WEB_CONTROL_CENTER.md +0 -0
  391. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/docs/WSL_WINDOWS_WORKER.md +0 -0
  392. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/docs/mocks/web/README.md +0 -0
  393. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/docs/mocks/web/_tokens.css +0 -0
  394. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/docs/mocks/web/issue-detail.html +0 -0
  395. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/docs/mocks/web/pipeline-narrow.html +0 -0
  396. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/docs/mocks/web/pipeline-wide.html +0 -0
  397. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/graphify-out/.gitignore +0 -0
  398. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/scripts/audit_review_verdict_overrides.py +0 -0
  399. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  400. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/scripts/azure-workers/build-worker-image.sh +0 -0
  401. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/scripts/azure-workers/coordinator-machine.py +0 -0
  402. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/scripts/azure-workers/dr-down.sh +0 -0
  403. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/scripts/azure-workers/dr-up.sh +0 -0
  404. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/scripts/azure-workers/epic-down.sh +0 -0
  405. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/scripts/azure-workers/epic-up.sh +0 -0
  406. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/scripts/azure-workers/preflight.sh +0 -0
  407. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/scripts/azure-workers/provision-server.sh +0 -0
  408. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/scripts/azure-workers/provision-worker.sh +0 -0
  409. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  410. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  411. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/scripts/azure-workers/throwaway-vm.sh +0 -0
  412. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/scripts/azure-workers/verify-github-token.sh +0 -0
  413. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/scripts/check_gh_argv_containment.py +0 -0
  414. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/scripts/codegen.py +0 -0
  415. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/scripts/coord-test-runner.sh +0 -0
  416. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
  417. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
  418. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
  419. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
  420. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/scripts/coord-venv-rollback.sh +0 -0
  421. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/scripts/drive-batch.sh +0 -0
  422. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/scripts/extract-coord-tui.sh +0 -0
  423. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/scripts/fleet_watchdog.py +0 -0
  424. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/scripts/gen_board_fixture.py +0 -0
  425. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/scripts/gen_mock_index.py +0 -0
  426. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/scripts/lib/provision-core.sh +0 -0
  427. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/scripts/next_release_tag.py +0 -0
  428. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/scripts/provision-machine.sh +0 -0
  429. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/scripts/run_tests_in_populated_home.sh +0 -0
  430. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/scripts/run_tests_without_gh.sh +0 -0
  431. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/scripts/setup-macmini.sh +0 -0
  432. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/scripts/smoke_437_interactive.py +0 -0
  433. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/scripts/verify-provision-noble.sh +0 -0
  434. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/scripts/verify_878_review_capture.py +0 -0
  435. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/scripts/verify_release_published.py +0 -0
  436. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/scripts/verify_release_wheel.py +0 -0
  437. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/setup.cfg +0 -0
  438. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/SMOKE_SET.md +0 -0
  439. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/__init__.py +0 -0
  440. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/acceptance/ms-37/conftest.py +0 -0
  441. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/acceptance/ms-37/contract.md +0 -0
  442. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/acceptance/ms-37/manifest.yml +0 -0
  443. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  444. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  445. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/acceptance/ms-51/contract.md +0 -0
  446. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  447. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  448. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/acceptance/ms-51/manifest.yml +0 -0
  449. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  450. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/acceptance/ms-51/tsconfig.json +0 -0
  451. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  452. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/backends.py +0 -0
  453. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/conftest.py +0 -0
  454. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/fixtures/board-pipeline-basic.json +0 -0
  455. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  456. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  457. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  458. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  459. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/fixtures/playwright/all_pass.json +0 -0
  460. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  461. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/fixtures/playwright/mixed_fail.json +0 -0
  462. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  463. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  464. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/fixtures/playwright/skip.json +0 -0
  465. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/fixtures/playwright/truncated.json +0 -0
  466. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  467. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  468. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  469. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  470. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/fixtures/test_report/pytest_error_log_record.txt +0 -0
  471. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  472. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  473. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  474. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  475. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_acceptance.py +0 -0
  476. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_agent.py +0 -0
  477. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_agent_api_error.py +0 -0
  478. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_agent_app.py +0 -0
  479. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_agent_branch_base.py +0 -0
  480. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_agent_branch_capture.py +0 -0
  481. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_agent_config_free_1712.py +0 -0
  482. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_agent_deploy_units_endpoint.py +0 -0
  483. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_agent_dirty_worktree.py +0 -0
  484. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  485. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_agent_graph_self_heal.py +0 -0
  486. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_agent_health_h3.py +0 -0
  487. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_agent_idle_restart.py +0 -0
  488. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_agent_push_failure.py +0 -0
  489. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_agent_reap.py +0 -0
  490. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_agent_repos_and_pull.py +0 -0
  491. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_agent_restart_services_endpoint.py +0 -0
  492. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_agent_skills_self_heal.py +0 -0
  493. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_agent_startup_diagnostics.py +0 -0
  494. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_agent_update_bluegreen.py +0 -0
  495. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_agent_usage_limit.py +0 -0
  496. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_agent_zero_commit.py +0 -0
  497. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_ambient_home_isolation.py +0 -0
  498. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_approve_capability_reroute_3241.py +0 -0
  499. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_approve_dependency_busy_2804.py +0 -0
  500. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_approve_reject_plan.py +0 -0
  501. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_approve_usage_gate.py +0 -0
  502. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_approved_work_2532.py +0 -0
  503. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_approved_work_2996.py +0 -0
  504. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_assignment_already_recorded_daemon.py +0 -0
  505. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_audit_log.py +0 -0
  506. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_audit_outcome.py +0 -0
  507. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_audit_query.py +0 -0
  508. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_auto_loop.py +0 -0
  509. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_auto_release_publish_2035.py +0 -0
  510. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_backend_selection.py +0 -0
  511. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_backup.py +0 -0
  512. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_base_checkout_restore.py +0 -0
  513. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_block_log.py +0 -0
  514. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_board_cap_762.py +0 -0
  515. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_board_fixture.py +0 -0
  516. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_board_read_path.py +0 -0
  517. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_board_schema.py +0 -0
  518. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_board_service.py +0 -0
  519. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_board_state.py +0 -0
  520. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_board_wire.py +0 -0
  521. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_brain.py +0 -0
  522. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_branch_model.py +0 -0
  523. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_bug_intake.py +0 -0
  524. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_bugbash.py +0 -0
  525. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_build_worker_image_env_update.py +0 -0
  526. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cargo_cache.py +0 -0
  527. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_check_gh_argv_containment.py +0 -0
  528. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_ci_acceptance_gate_1950.py +0 -0
  529. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_ci_fix.py +0 -0
  530. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_ci_github.py +0 -0
  531. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_ci_gitlab.py +0 -0
  532. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_ci_parity_2091.py +0 -0
  533. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_ci_store.py +0 -0
  534. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_claim.py +0 -0
  535. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_claude_md_budget.py +0 -0
  536. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_claude_setup_token.py +0 -0
  537. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_acceptance.py +0 -0
  538. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_assign.py +0 -0
  539. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  540. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_assign_interactive_remote.py +0 -0
  541. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_assign_provider.py +0 -0
  542. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  543. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_audit.py +0 -0
  544. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_chat_continue.py +0 -0
  545. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_ci.py +0 -0
  546. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_codegen.py +0 -0
  547. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_decide.py +0 -0
  548. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_diagnose_capability_rules.py +0 -0
  549. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_diagnose_config_provenance.py +0 -0
  550. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_diagnose_forge_availability.py +0 -0
  551. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_diagnose_graph.py +0 -0
  552. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_diagnose_self.py +0 -0
  553. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_diagnose_test_coverage.py +0 -0
  554. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_doctor.py +0 -0
  555. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_doctor_config_free_1801.py +0 -0
  556. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  557. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_doctor_store_backend_3084.py +0 -0
  558. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_drive.py +0 -0
  559. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_drive_queue.py +0 -0
  560. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_escalate.py +0 -0
  561. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_fix_headless_review.py +0 -0
  562. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_gate_a.py +0 -0
  563. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_install_drift.py +0 -0
  564. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_install_skills.py +0 -0
  565. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_issue_comment.py +0 -0
  566. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_issue_create_label.py +0 -0
  567. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_issue_reopen.py +0 -0
  568. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_issue_view_list.py +0 -0
  569. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_issues.py +0 -0
  570. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_merge.py +0 -0
  571. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_milestone_assign.py +0 -0
  572. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_milestone_capture.py +0 -0
  573. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_milestone_chat_add_child.py +0 -0
  574. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_milestone_dispatch.py +0 -0
  575. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_milestone_gate_b.py +0 -0
  576. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_milestone_gate_c.py +0 -0
  577. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_milestone_order.py +0 -0
  578. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  579. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_milestone_ship.py +0 -0
  580. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_network.py +0 -0
  581. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_new_issue_chat.py +0 -0
  582. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_plans.py +0 -0
  583. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_portal.py +0 -0
  584. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_pr.py +0 -0
  585. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_pull_artifact.py +0 -0
  586. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_queue.py +0 -0
  587. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_reattach_sessions.py +0 -0
  588. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_refine_board.py +0 -0
  589. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_release_preflight.py +0 -0
  590. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_release_window.py +0 -0
  591. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_repo_2220.py +0 -0
  592. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
  593. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_scorecard.py +0 -0
  594. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_serve_store_backend_3084.py +0 -0
  595. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_set_review_findings.py +0 -0
  596. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_status_advisory_terminal.py +0 -0
  597. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_status_contested_tag.py +0 -0
  598. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_status_invariant_alarms.py +0 -0
  599. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_status_machine_fault.py +0 -0
  600. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_status_merge_queue.py +0 -0
  601. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_status_provider.py +0 -0
  602. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_status_retried_3340.py +0 -0
  603. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_status_review_finalizing.py +0 -0
  604. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_status_supervisor_3366.py +0 -0
  605. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_status_test_failed_tag.py +0 -0
  606. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_status_usage_limit.py +0 -0
  607. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_sync_comments_873.py +0 -0
  608. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_test_plan.py +0 -0
  609. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_track.py +0 -0
  610. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_tui_update.py +0 -0
  611. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cli_wait.py +0 -0
  612. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_client.py +0 -0
  613. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_client_base_install.py +0 -0
  614. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_client_config_cache_atomic_3052.py +0 -0
  615. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_client_resource_migration_1946.py +0 -0
  616. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_commands_common.py +0 -0
  617. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_comments.py +0 -0
  618. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_completion_summary.py +0 -0
  619. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_config.py +0 -0
  620. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_config_acceptance.py +0 -0
  621. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_config_audit.py +0 -0
  622. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_config_drift_check.py +0 -0
  623. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_config_effective.py +0 -0
  624. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_config_pricing.py +0 -0
  625. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  626. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_config_usage_gate.py +0 -0
  627. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_confirm_test.py +0 -0
  628. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_conflict_fix.py +0 -0
  629. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_conflict_fix_semantic.py +0 -0
  630. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
  631. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_coord_test.py +0 -0
  632. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
  633. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_coord_test_runner_baseline.py +0 -0
  634. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_coord_test_runner_populated_home.py +0 -0
  635. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_coord_test_runner_routing.py +0 -0
  636. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_coord_test_runner_toolchain.py +0 -0
  637. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_coord_uat.py +0 -0
  638. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_coord_web_sse_restart_live.py +0 -0
  639. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_coordinator_machine.py +0 -0
  640. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_cross_platform_imports.py +0 -0
  641. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_dao.py +0 -0
  642. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_dashboard.py +0 -0
  643. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_dashboard_api.py +0 -0
  644. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_dashboard_fixture.py +0 -0
  645. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_dashboard_server.py +0 -0
  646. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_dashboard_terminal.py +0 -0
  647. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_dashboard_terminal_live.py +0 -0
  648. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_db.py +0 -0
  649. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_dead_end.py +0 -0
  650. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_decomposition_chat.py +0 -0
  651. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_deploy_coord_db_backup.py +0 -0
  652. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_deploy_coord_web_dist.py +0 -0
  653. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_deploy_coord_web_rollback.py +0 -0
  654. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_deploy_db_backup_unit.py +0 -0
  655. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_deploy_drive_queue_unit.py +0 -0
  656. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_deploy_failure_notify_unit.py +0 -0
  657. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_deploy_manifest.py +0 -0
  658. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_deploy_notify_unit.py +0 -0
  659. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_deploy_units_lane.py +0 -0
  660. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_deploy_web_unit.py +0 -0
  661. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_deprecation_telemetry.py +0 -0
  662. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_deps.py +0 -0
  663. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_diagnose.py +0 -0
  664. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_dispatch.py +0 -0
  665. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_dispatch_liveness.py +0 -0
  666. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_dispatch_target_validation.py +0 -0
  667. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_dispatch_workers.py +0 -0
  668. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_dist_name.py +0 -0
  669. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_done_housekeeping.py +0 -0
  670. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_dr_azure_scripts.py +0 -0
  671. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_dr_promote.py +0 -0
  672. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_dr_verify.py +0 -0
  673. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_drive.py +0 -0
  674. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_drive_machine_fault.py +0 -0
  675. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_drive_queue_blocked_rendering.py +0 -0
  676. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_drive_queue_launch_argv.py +0 -0
  677. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_drive_queue_max_parallel_config.py +0 -0
  678. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
  679. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_drive_queue_roll_pending.py +0 -0
  680. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
  681. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_drive_sessions_snapshot.py +0 -0
  682. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_drive_state.py +0 -0
  683. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_drive_tmux.py +0 -0
  684. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_epic_up_capability_detection.py +0 -0
  685. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  686. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_epic_up_image_provenance.py +0 -0
  687. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_errors.py +0 -0
  688. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_events.py +0 -0
  689. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_failure_class.py +0 -0
  690. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_failure_classifier.py +0 -0
  691. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_filelock.py +0 -0
  692. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  693. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_fix_escalation_classifier.py +0 -0
  694. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_fix_of_force_override.py +0 -0
  695. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_fleet_config_health.py +0 -0
  696. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_fleet_health_probes.py +0 -0
  697. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_fleet_health_snapshot.py +0 -0
  698. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_fleet_watchdog.py +0 -0
  699. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_forge_availability.py +0 -0
  700. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_freshness.py +0 -0
  701. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_gate_a.py +0 -0
  702. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_gate_b.py +0 -0
  703. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_gate_snapshot_staleness.py +0 -0
  704. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_gates.py +0 -0
  705. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  706. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_gen_mock_index.py +0 -0
  707. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_generated_rust_fixture.py +0 -0
  708. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_generated_rust_requests.py +0 -0
  709. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_generated_types_fixture.py +0 -0
  710. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_github_ops.py +0 -0
  711. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_github_throttle.py +0 -0
  712. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_goal.py +0 -0
  713. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_graph_health.py +0 -0
  714. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_graph_selfheal_absent_2237.py +0 -0
  715. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_gtk_native_driver.py +0 -0
  716. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_handoff.py +0 -0
  717. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_health_checks.py +0 -0
  718. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_health_cli.py +0 -0
  719. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_health_cli_graph.py +0 -0
  720. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_health_config.py +0 -0
  721. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_health_context.py +0 -0
  722. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_health_coord_tui_ci_pin.py +0 -0
  723. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_health_coord_web_ci_pin.py +0 -0
  724. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_health_deploy_lane_facts.py +0 -0
  725. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_health_fix.py +0 -0
  726. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_health_incident_regression.py +0 -0
  727. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_health_issues_sync_staleness.py +0 -0
  728. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_health_pr_churn.py +0 -0
  729. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_health_pypi.py +0 -0
  730. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_health_registry.py +0 -0
  731. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_health_release_cordon_probe.py +0 -0
  732. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_health_timer_active.py +0 -0
  733. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_health_toolchain.py +0 -0
  734. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_health_unit_drift.py +0 -0
  735. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_health_unit_enablement.py +0 -0
  736. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_health_wedged_drive_queue.py +0 -0
  737. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_hooks.py +0 -0
  738. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_housekeeping.py +0 -0
  739. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_human_attended_437.py +0 -0
  740. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_init.py +0 -0
  741. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_install_agent_venv_2911.py +0 -0
  742. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_integration.py +0 -0
  743. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_interactive.py +0 -0
  744. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_interactive_briefing_echo.py +0 -0
  745. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_interactive_pane_log_2541.py +0 -0
  746. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_interactive_prefill_state.py +0 -0
  747. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_interactive_session_relaunch.py +0 -0
  748. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_interactive_test_verdict_backstop.py +0 -0
  749. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_interactive_token_attribution.py +0 -0
  750. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_interactive_worktree.py +0 -0
  751. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_invariant_alarms.py +0 -0
  752. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_issue_store_seam.py +0 -0
  753. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_issues_sync_status.py +0 -0
  754. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_liveness_auditor.py +0 -0
  755. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_liveness_notify.py +0 -0
  756. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_lock_contention_ratchet.py +0 -0
  757. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_mac_native_driver.py +0 -0
  758. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_machine_fault.py +0 -0
  759. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_machine_metrics.py +0 -0
  760. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_machine_onboard.py +0 -0
  761. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_machine_pause.py +0 -0
  762. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_machine_stats.py +0 -0
  763. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_merge_verify.py +0 -0
  764. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_milestone_chat.py +0 -0
  765. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_milestone_dispatch.py +0 -0
  766. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_milestone_gate.py +0 -0
  767. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_milestone_order.py +0 -0
  768. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_milestone_seam.py +0 -0
  769. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_mock_author.py +0 -0
  770. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_model_tiering.py +0 -0
  771. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_models.py +0 -0
  772. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_models_config_labels.py +0 -0
  773. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_needs_attention.py +0 -0
  774. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_network.py +0 -0
  775. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_new_issue_chat.py +0 -0
  776. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_next_release_tag.py +0 -0
  777. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_node_shim.py +0 -0
  778. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_notifier_baseline.py +0 -0
  779. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_notifier_cli.py +0 -0
  780. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_notifier_collect.py +0 -0
  781. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_notifier_config.py +0 -0
  782. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_notifier_drive_seam.py +0 -0
  783. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_notifier_isolation.py +0 -0
  784. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_notifier_predicate.py +0 -0
  785. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_notifier_quiet_hours.py +0 -0
  786. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_notifier_service.py +0 -0
  787. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_notify.py +0 -0
  788. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_notify_drain.py +0 -0
  789. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_openapi.py +0 -0
  790. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_operational_defaults.py +0 -0
  791. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_overlap_fence.py +0 -0
  792. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_overlap_predict.py +0 -0
  793. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_packaged_deploy_units.py +0 -0
  794. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_parentage.py +0 -0
  795. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_paste_landed.py +0 -0
  796. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
  797. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_pipeline.py +0 -0
  798. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_plan_followup_approve_plan_command.py +0 -0
  799. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_plan_followup_pr_command.py +0 -0
  800. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_plan_followup_review_command.py +0 -0
  801. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_plan_only.py +0 -0
  802. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_plan_parser.py +0 -0
  803. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_platform_paths.py +0 -0
  804. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_portal_bridge.py +0 -0
  805. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_portal_config.py +0 -0
  806. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_portal_store.py +0 -0
  807. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_portal_sync.py +0 -0
  808. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_pr_body_lint.py +0 -0
  809. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_production_db_guard.py +0 -0
  810. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_progress.py +0 -0
  811. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_provider_seam.py +0 -0
  812. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_providers.py +0 -0
  813. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_providers_config_labels.py +0 -0
  814. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_providers_pty.py +0 -0
  815. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_provision_core.py +0 -0
  816. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_provision_machine.py +0 -0
  817. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_py_rust_mirror_inventory.py +0 -0
  818. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_quiet_hours.py +0 -0
  819. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_quiet_hours_store_2146.py +0 -0
  820. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_reap_merged_sessions.py +0 -0
  821. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_reap_stale_interactive_tick.py +0 -0
  822. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_reconcile.py +0 -0
  823. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_reconcile_branch.py +0 -0
  824. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_reconcile_completions.py +0 -0
  825. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
  826. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_reconcile_merges.py +0 -0
  827. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_reconcile_no_agent_record.py +0 -0
  828. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_reconcile_tick.py +0 -0
  829. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_reconcile_usage_limit_done.py +0 -0
  830. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_refine_chat.py +0 -0
  831. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_release_cordon_2101.py +0 -0
  832. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  833. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_release_cordon_deadlock_2240.py +0 -0
  834. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_release_cordon_drain_stall_3336.py +0 -0
  835. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_release_cordon_stuck_2490.py +0 -0
  836. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_release_gate.py +0 -0
  837. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_release_propagate_threshold.py +0 -0
  838. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_release_roll_between_legs_2854.py +0 -0
  839. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_release_roll_window_handoff.py +0 -0
  840. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_release_unified_1242.py +0 -0
  841. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_release_verify.py +0 -0
  842. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_release_window.py +0 -0
  843. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_remote_auto_prune.py +0 -0
  844. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_remote_interactive_reaper.py +0 -0
  845. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_repo_add.py +0 -0
  846. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_repo_dormancy.py +0 -0
  847. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_repo_edit_2220.py +0 -0
  848. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_repo_graph_fleet_2237.py +0 -0
  849. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_repo_max_parallel_3423.py +0 -0
  850. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_repo_onboard_2220.py +0 -0
  851. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_report_result_push.py +0 -0
  852. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_reports.py +0 -0
  853. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_restart_cmd.py +0 -0
  854. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_retry.py +0 -0
  855. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_retry_advisory_1606.py +0 -0
  856. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_retry_escalation_classify_3360.py +0 -0
  857. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_retry_type_1636.py +0 -0
  858. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_revalidate.py +0 -0
  859. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_review_end_review_without_verdict.py +0 -0
  860. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_review_parse_failure_diagnostic.py +0 -0
  861. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_review_reaffirm.py +0 -0
  862. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_review_state.py +0 -0
  863. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_review_verdict_backstop.py +0 -0
  864. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_review_verdict_override_audit.py +0 -0
  865. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_review_verdict_relay.py +0 -0
  866. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_review_zero_commits.py +0 -0
  867. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_scoped_review_wiring.py +0 -0
  868. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_scorecard.py +0 -0
  869. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_self_health.py +0 -0
  870. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_serve.py +0 -0
  871. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_serve_app.py +0 -0
  872. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_serve_app_board_trim.py +0 -0
  873. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_serve_rest_routes.py +0 -0
  874. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_session.py +0 -0
  875. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_slice_issue_attribution.py +0 -0
  876. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_smoke.py +0 -0
  877. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_smoke_fanout_manifest_3333.py +0 -0
  878. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_smoke_live_checkout_restore.py +0 -0
  879. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_smoke_workflow.py +0 -0
  880. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_spend_ceiling.py +0 -0
  881. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_spend_ceiling_coordinator.py +0 -0
  882. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_split.py +0 -0
  883. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_split_work.py +0 -0
  884. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_sql_dialect.py +0 -0
  885. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_sqlite_connect_ratchet.py +0 -0
  886. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_stage_projection.py +0 -0
  887. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_stale_busy_reviewer_697.py +0 -0
  888. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_stalled_pipeline.py +0 -0
  889. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_state.py +0 -0
  890. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_state_review_findings_daemon.py +0 -0
  891. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_status_fleet_footer.py +0 -0
  892. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_stop_1567.py +0 -0
  893. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_store_contract.py +0 -0
  894. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_store_migrate.py +0 -0
  895. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_stuck.py +0 -0
  896. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
  897. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_terminal_command.py +0 -0
  898. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_test_author.py +0 -0
  899. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_test_chat.py +0 -0
  900. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_test_orchestrator.py +0 -0
  901. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_test_report.py +0 -0
  902. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_test_verdict_parsing.py +0 -0
  903. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_test_verdict_transcript_floor.py +0 -0
  904. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_text_io_encoding_audit.py +0 -0
  905. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_thin_client_board_audit.py +0 -0
  906. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_thin_client_config_load_1080.py +0 -0
  907. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_thin_client_daemon_routing_906.py +0 -0
  908. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_throwaway_vm.py +0 -0
  909. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_tmux_host.py +0 -0
  910. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_tmux_session.py +0 -0
  911. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_transcript_floor.py +0 -0
  912. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_tui_pty_driver.py +0 -0
  913. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_uat_checks.py +0 -0
  914. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_usage.py +0 -0
  915. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_usage_limits.py +0 -0
  916. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_usage_rollup.py +0 -0
  917. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_venv_live_install_2121.py +0 -0
  918. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_version_single_source.py +0 -0
  919. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_watch.py +0 -0
  920. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_win_native_driver.py +0 -0
  921. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  922. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_worker_env_venv_isolation.py +0 -0
  923. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_worker_events.py +0 -0
  924. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_worker_image_pin_sync.py +0 -0
  925. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_worker_safety.py +0 -0
  926. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_worker_test_scoping.py +0 -0
  927. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_worktree.py +0 -0
  928. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  929. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/test_write_parity.py +0 -0
  930. {code_coordinator-0.5.554 → code_coordinator-0.5.556}/tests/write_parity.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-coordinator
3
- Version: 0.5.554
3
+ Version: 0.5.556
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
@@ -38,6 +38,8 @@ Requires-Dist: comtypes>=1.2; sys_platform == "win32" and extra == "win-native"
38
38
  Provides-Extra: mac-native
39
39
  Requires-Dist: pyobjc-framework-Quartz>=10.0; sys_platform == "darwin" and extra == "mac-native"
40
40
  Requires-Dist: pyobjc-framework-ApplicationServices>=10.0; sys_platform == "darwin" and extra == "mac-native"
41
+ Provides-Extra: gtk-native
42
+ Requires-Dist: PyGObject>=3.46; sys_platform == "linux" and extra == "gtk-native"
41
43
  Provides-Extra: all
42
44
  Requires-Dist: code-coordinator[server]; extra == "all"
43
45
  Requires-Dist: code-coordinator[reports-xlsx]; extra == "all"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-coordinator
3
- Version: 0.5.554
3
+ Version: 0.5.556
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
@@ -38,6 +38,8 @@ Requires-Dist: comtypes>=1.2; sys_platform == "win32" and extra == "win-native"
38
38
  Provides-Extra: mac-native
39
39
  Requires-Dist: pyobjc-framework-Quartz>=10.0; sys_platform == "darwin" and extra == "mac-native"
40
40
  Requires-Dist: pyobjc-framework-ApplicationServices>=10.0; sys_platform == "darwin" and extra == "mac-native"
41
+ Provides-Extra: gtk-native
42
+ Requires-Dist: PyGObject>=3.46; sys_platform == "linux" and extra == "gtk-native"
41
43
  Provides-Extra: all
42
44
  Requires-Dist: code-coordinator[server]; extra == "all"
43
45
  Requires-Dist: code-coordinator[reports-xlsx]; extra == "all"
@@ -173,6 +173,7 @@ coord/uat_checks.py
173
173
  coord/usage.py
174
174
  coord/usage_limits.py
175
175
  coord/usage_rollup.py
176
+ coord/win_native_bridge.py
176
177
  coord/win_native_driver.py
177
178
  coord/worker_events.py
178
179
  coord/agents/opencode/.gitignore
@@ -694,7 +695,9 @@ tests/test_hooks.py
694
695
  tests/test_housekeeping.py
695
696
  tests/test_human_attended_437.py
696
697
  tests/test_init.py
698
+ tests/test_install_agent_capabilities_3515.py
697
699
  tests/test_install_agent_venv_2911.py
700
+ tests/test_install_agent_wsl_bridge_3515.py
698
701
  tests/test_integration.py
699
702
  tests/test_interactive.py
700
703
  tests/test_interactive_briefing_echo.py
@@ -877,6 +880,7 @@ tests/test_usage_rollup.py
877
880
  tests/test_venv_live_install_2121.py
878
881
  tests/test_version_single_source.py
879
882
  tests/test_watch.py
883
+ tests/test_win_native_bridge.py
880
884
  tests/test_win_native_driver.py
881
885
  tests/test_windows_job_is_a_real_gate_2000.py
882
886
  tests/test_worker_env_venv_isolation.py
@@ -22,6 +22,11 @@ setuptools>=68
22
22
  setuptools-scm>=8
23
23
  wheel
24
24
 
25
+ [gtk-native]
26
+
27
+ [gtk-native:sys_platform == "linux"]
28
+ PyGObject>=3.46
29
+
25
30
  [mac-native]
26
31
 
27
32
  [mac-native:sys_platform == "darwin"]
@@ -301,6 +301,7 @@
301
301
  "coord/usage.py",
302
302
  "coord/usage_limits.py",
303
303
  "coord/usage_rollup.py",
304
+ "coord/win_native_bridge.py",
304
305
  "coord/win_native_driver.py",
305
306
  "coord/worker_events.py",
306
307
  "coordinator.example.yml",
@@ -721,7 +722,9 @@
721
722
  "tests/test_housekeeping.py",
722
723
  "tests/test_human_attended_437.py",
723
724
  "tests/test_init.py",
725
+ "tests/test_install_agent_capabilities_3515.py",
724
726
  "tests/test_install_agent_venv_2911.py",
727
+ "tests/test_install_agent_wsl_bridge_3515.py",
725
728
  "tests/test_integration.py",
726
729
  "tests/test_interactive.py",
727
730
  "tests/test_interactive_briefing_echo.py",
@@ -904,6 +907,7 @@
904
907
  "tests/test_venv_live_install_2121.py",
905
908
  "tests/test_version_single_source.py",
906
909
  "tests/test_watch.py",
910
+ "tests/test_win_native_bridge.py",
907
911
  "tests/test_win_native_driver.py",
908
912
  "tests/test_windows_job_is_a_real_gate_2000.py",
909
913
  "tests/test_worker_env_venv_isolation.py",
@@ -0,0 +1,8 @@
1
+ {
2
+ "tag": "0.5.556",
3
+ "distance": 0,
4
+ "node": "gde6caedc9afc7f0f9a375055f1468dc8f6f1b27b",
5
+ "dirty": false,
6
+ "branch": "HEAD",
7
+ "node_date": "2026-10-02"
8
+ }
@@ -78,7 +78,12 @@ in :mod:`coord.win_native_driver` — see that module's docstring for the spec
78
78
  format. This adapter (:func:`_run_win_native`) is the same thin seam
79
79
  :func:`_run_tui_pty` is: it resolves the native spec from the driver's
80
80
  ``entrypoint:`` and hands off to
81
- :func:`coord.win_native_driver.run_native_spec`.
81
+ :func:`coord.win_native_driver.run_native_spec` — or, on a WSL-hosted agent
82
+ (dell64, ``docs/WSL_WINDOWS_WORKER.md``), to
83
+ :func:`coord.win_native_bridge.run_native_spec_via_bridge`, which runs the
84
+ spec on a real Windows-side Python found through WSL's own interop instead
85
+ (#3515 — see that module's docstring for why `comtypes` can never resolve
86
+ in-process on a WSL-hosted agent no matter what gets pip-installed there).
82
87
 
83
88
  ``mac-native`` (#3485, the macOS-native tier alongside ``win-native``)
84
89
  launches the driven repo's real compiled ``.app``/binary and drives it with
@@ -143,6 +148,7 @@ import re
143
148
  import subprocess
144
149
  import tempfile
145
150
  import xml.etree.ElementTree as ET
151
+ from collections.abc import Iterable, Mapping
146
152
  from dataclasses import dataclass, field
147
153
  from pathlib import Path
148
154
 
@@ -154,6 +160,92 @@ SUPPORTED_KINDS = (
154
160
  "win-native", "mac-native", "gtk-native",
155
161
  )
156
162
 
163
+ # #3515: the one place a machine's `capabilities` (coordinator.yml) map to
164
+ # the `pyproject.toml` optional-dependency extra its Tier-2 lane driver
165
+ # actually needs installed. No fleet roll or agent update ever pulled these
166
+ # in before this — a lane only worked if someone hand-installed into
167
+ # `~/.coord-venv`, and the next `coord agent update`/`coord release
168
+ # propagate` rebuilt that venv from scratch and silently wiped it (observed
169
+ # live 2026-10-01: `gi` hand-installed on precision, `pyte` missing
170
+ # everywhere a Tier-2 lane runs). Kept here, next to :data:`SUPPORTED_KINDS`
171
+ # — the same "one question, one answer" reasoning (epic #2096): `coord.
172
+ # agent_app`'s self-update, `coord.release_propagate`'s fleet roll and
173
+ # `install-agent.sh`'s bootstrap must all resolve a machine's required
174
+ # extras through this ONE mapping, never three independently-drifting
175
+ # copies.
176
+ LANE_CAPABILITY_EXTRAS: dict[str, str] = {
177
+ "windows": "win-native",
178
+ "macos": "mac-native",
179
+ "gtk": "gtk-native",
180
+ }
181
+
182
+
183
+ def repos_requiring_tui_pty(drivers: Mapping[str, object]) -> frozenset[str]:
184
+ """Repo names (keys of `coordinator.yml`'s `acceptance.drivers`) that
185
+ declare a ``tui-pty``-kind acceptance driver somewhere — the flat form,
186
+ or one of its ``routes`` (#1125 in-repo path routing).
187
+
188
+ Duck-typed (``getattr``, not an import of
189
+ ``coord.config.AcceptanceDriverConfig``) for the same reason
190
+ :mod:`coord.bugbash` duck-types its own config parameter rather than
191
+ importing :mod:`coord.config`: this module is foundational and widely
192
+ imported, so taking a dependency on the config module risks a cycle the
193
+ other direction never needs — the same posture :data:`TIER2_LANE_KINDS`'s
194
+ docstring (``coord.config``) describes from the other side.
195
+ """
196
+ out: set[str] = set()
197
+ for repo_name, entry in drivers.items():
198
+ kind = getattr(entry, "kind", "")
199
+ routes = getattr(entry, "routes", None) or ()
200
+ if kind == "tui-pty" or any(
201
+ getattr(route, "kind", "") == "tui-pty" for route in routes
202
+ ):
203
+ out.add(repo_name)
204
+ return frozenset(out)
205
+
206
+
207
+ def lane_extras_for_machine(
208
+ capabilities: Iterable[str],
209
+ *,
210
+ repos: Iterable[str] = (),
211
+ tui_pty_repos: frozenset[str] | None = None,
212
+ ) -> list[str]:
213
+ """The `pyproject.toml` lane extras a machine with *capabilities* needs
214
+ installed alongside `server` (#3515).
215
+
216
+ ``windows``/``macos``/``gtk`` each map straight through
217
+ :data:`LANE_CAPABILITY_EXTRAS`. ``tui-pty`` is different: it isn't a
218
+ machine capability at all, it's a property of *which repos* a host
219
+ serves — "is this host in a repo's `tui-pty` route" — so it's derived
220
+ from *repos* (a machine's own `coordinator.yml` `repos:` list)
221
+ intersected against *tui_pty_repos* (every repo name
222
+ :func:`repos_requiring_tui_pty` found to declare one).
223
+
224
+ *tui_pty_repos* is ``None`` when the caller only has the machine's own
225
+ capabilities/repos in hand, never the fleet-wide, repo-keyed
226
+ `acceptance.drivers` map needed to compute it properly — the agent's own
227
+ in-process self-update fallback (`coord.agent_app._agent_pkg_spec`) is
228
+ exactly that caller. In that case this falls back to the conservative
229
+ default: any host that already needs a native lane extra needs
230
+ `tui-pty` too, because every native lane observed in #3515's own
231
+ incident table also needed `pyte`, and `tui-pty` is pure-Python (no
232
+ C-extension/version-skew cost — the same reasoning `pyproject.toml`'s
233
+ own comment on the extra gives), so installing it somewhere that turns
234
+ out not to need it costs nothing. A caller that DOES have the full
235
+ config (`coord.release_propagate`, which has `cfg.acceptance.drivers`)
236
+ passes the exact computed set instead, which may be empty even when
237
+ *extras* is non-empty (a win-native host that serves no `tui-pty`-kind
238
+ repo) — passing ``frozenset()`` explicitly opts OUT of the fallback.
239
+ """
240
+ caps = set(capabilities)
241
+ extras = [extra for cap, extra in LANE_CAPABILITY_EXTRAS.items() if cap in caps]
242
+ if tui_pty_repos is None:
243
+ if extras:
244
+ extras.append("tui-pty")
245
+ elif set(repos) & tui_pty_repos:
246
+ extras.append("tui-pty")
247
+ return extras
248
+
157
249
  # #2748 (IL-2): driver kinds whose `run` produces a real pass/fail verdict
158
250
  # but NOT yet a deterministic one, because an input they depend on hasn't
159
251
  # shipped. `web-playwright` is the one case today — the driver itself
@@ -745,20 +837,30 @@ def _run_win_native(run_command: str, cwd: str, entrypoint: str, *, timeout: int
745
837
  ``capture_b64`` ``PrintWindow`` snapshot) into a :class:`DriverResult`
746
838
  the same way :func:`_run_tui_pty` does.
747
839
 
840
+ **The WSL case (#3515).** `ctypes.windll`/`comtypes` have no meaning
841
+ outside a genuine Win32 process, so a WSL-hosted ``windows``-capability
842
+ agent (dell64, ``docs/WSL_WINDOWS_WORKER.md``) can never run
843
+ :func:`coord.win_native_driver.run_native_spec` in-process no matter
844
+ what gets pip-installed into its own (Linux) venv. :func:`coord.
845
+ win_native_bridge.is_wsl_host` detects that case and routes through
846
+ :func:`coord.win_native_bridge.run_native_spec_via_bridge` instead,
847
+ which bootstraps a real Windows-side Python reachable through WSL's own
848
+ interop and runs the spec on THAT interpreter — see that module's
849
+ docstring for the full mechanism. A native-Windows agent (or any
850
+ non-WSL host, including every test in this suite) takes the in-process
851
+ path unchanged.
852
+
748
853
  Raises :class:`DriverError` — never a bare exception — for a missing
749
- ``entrypoint:``, a spec file that doesn't exist, or a malformed spec
750
- (an invalid-YAML/unknown-step-type
751
- :class:`coord.win_native_driver.WinNativeSpecError`). A process that
752
- never launches, a window that never appears, or a failed probe do NOT
753
- raise here — :func:`coord.win_native_driver.run_native_spec` folds those
754
- into individual failing entries in ``tests`` instead.
854
+ ``entrypoint:``, a spec file that doesn't exist, a malformed spec (an
855
+ invalid-YAML/unknown-step-type
856
+ :class:`coord.win_native_driver.WinNativeSpecError`), or — WSL only — a
857
+ :class:`coord.win_native_bridge.WinNativeBridgeError` (the Windows-side
858
+ Python couldn't be found/bootstrapped, or the bridge subprocess itself
859
+ failed to run). A process that never launches, a window that never
860
+ appears, or a failed probe do NOT raise either way — both
861
+ :func:`coord.win_native_driver.run_native_spec` and the bridge fold
862
+ those into individual failing entries in ``tests`` instead.
755
863
  """
756
- from coord.win_native_driver import ( # noqa: PLC0415 — see module docstring on the deferred import
757
- WinNativeRuntimeError,
758
- WinNativeSpecError,
759
- run_native_spec,
760
- )
761
-
762
864
  if not entrypoint:
763
865
  raise DriverError(
764
866
  "win-native driver requires an `entrypoint:` naming the native "
@@ -773,14 +875,33 @@ def _run_win_native(run_command: str, cwd: str, entrypoint: str, *, timeout: int
773
875
  except OSError as e:
774
876
  raise DriverError(f"win-native spec could not be read: {spec_path}: {e}") from e
775
877
 
776
- try:
777
- tests = run_native_spec(
778
- spec_text, launch_command=run_command, cwd=cwd, timeout=timeout,
878
+ from coord.win_native_bridge import ( # noqa: PLC0415 — see module docstring on the deferred import
879
+ WinNativeBridgeError,
880
+ is_wsl_host,
881
+ run_native_spec_via_bridge,
882
+ )
883
+
884
+ if is_wsl_host():
885
+ try:
886
+ tests = run_native_spec_via_bridge(
887
+ spec_text, run_command=run_command, cwd=cwd, timeout=timeout,
888
+ )
889
+ except WinNativeBridgeError as e:
890
+ raise DriverError(f"win-native WSL bridge could not run: {e}") from e
891
+ else:
892
+ from coord.win_native_driver import ( # noqa: PLC0415 — see module docstring on the deferred import
893
+ WinNativeRuntimeError,
894
+ WinNativeSpecError,
895
+ run_native_spec,
779
896
  )
780
- except WinNativeSpecError as e:
781
- raise DriverError(f"win-native spec is invalid: {e}") from e
782
- except WinNativeRuntimeError as e:
783
- raise DriverError(f"win-native driver could not run: {e}") from e
897
+ try:
898
+ tests = run_native_spec(
899
+ spec_text, launch_command=run_command, cwd=cwd, timeout=timeout,
900
+ )
901
+ except WinNativeSpecError as e:
902
+ raise DriverError(f"win-native spec is invalid: {e}") from e
903
+ except WinNativeRuntimeError as e:
904
+ raise DriverError(f"win-native driver could not run: {e}") from e
784
905
 
785
906
  # #3510: a locked/absent interactive session reports a distinct
786
907
  # "unavailable" status (coord.win_native_driver's session precheck),
@@ -3795,6 +3795,39 @@ internal-only change (CLAUDE.md's existing exemption), say so explicitly \
3795
3795
  in your final message instead — that already satisfies the reviewer, no \
3796
3796
  test required.
3797
3797
 
3798
+ #3502: this ONLY applies to `type="work"` assignments — the ones whose \
3799
+ merge auto-closes the linked issue (`CLOSES_ISSUE_TYPES` in \
3800
+ `coord/models.py`). If you were dispatched as `mock-author`, \
3801
+ `test-author`, or `epic-decompose`, the `issue_number` you were given is \
3802
+ a milestone's TRACKING issue, not one your merge closes — this marker is \
3803
+ meaningless on those legs and you should omit it. For `type="work"`: your \
3804
+ PR merging does NOT automatically mean issue it's for is \
3805
+ actually resolved. If merging this PR would make the coordinator \
3806
+ auto-close the issue, but you know the issue's own problem is NOT fully \
3807
+ fixed — root cause lives in another repo and only a dependent half of \
3808
+ the fix landed here, this PR is investigation-only (no production change, \
3809
+ or only one hypothesis ruled out), or you only confirmed a symptom \
3810
+ without fixing the cause — say so explicitly, right before your \
3811
+ SMOKE_TESTS block:
3812
+
3813
+ ISSUE_RESOLUTION: partial — <what remains, in one sentence>
3814
+
3815
+ or
3816
+
3817
+ ISSUE_RESOLUTION: investigation — <what you ruled out / what's still \
3818
+ unknown>
3819
+
3820
+ Omit the line entirely (it defaults to `resolved`, today's behaviour) \
3821
+ when this PR genuinely fixes the issue. A drafted-but-unfiled upstream \
3822
+ issue — a bullet in a design doc, a TODO comment, a line in a tracking \
3823
+ markdown file — is NOT "filed"; only a real GitHub issue number counts, \
3824
+ so don't write `partial — see quadraui issue` unless that issue actually \
3825
+ exists and you name its number. This is read by the coordinator's merge \
3826
+ gate (not posted to GitHub by you — never run `gh` commands): a `partial`/ \
3827
+ `investigation` here keeps the issue OPEN after your PR merges, with a \
3828
+ comment on the issue quoting what remains, instead of auto-closing work \
3829
+ that still has a reported bug live.
3830
+
3798
3831
  #252: before exiting, emit a SMOKE_TESTS block telling the human what to \
3799
3832
  manually verify. You changed the code; you know what's worth poking.
3800
3833
 
@@ -13,6 +13,7 @@ import sys
13
13
  import threading
14
14
  import time
15
15
  import urllib.request
16
+ from collections.abc import Iterable
16
17
  from pathlib import Path
17
18
  from typing import Callable
18
19
 
@@ -32,7 +33,12 @@ from coord.platform_paths import venv_python as platform_venv_python
32
33
  _log = logging.getLogger(__name__)
33
34
 
34
35
 
35
- def _agent_pkg_spec() -> str:
36
+ def _agent_pkg_spec(
37
+ *,
38
+ capabilities: Iterable[str] = (),
39
+ repos: Iterable[str] = (),
40
+ tui_pty_repos: frozenset[str] | None = None,
41
+ ) -> str:
36
42
  """What `POST /update` asks pip to install (#1237). An agent *is* the
37
43
  server half of the package, so it must reinstall itself WITH the
38
44
  `[server]` extra — a bare upgrade would, on a fresh venv, leave the
@@ -45,8 +51,54 @@ def _agent_pkg_spec() -> str:
45
51
  (`_do_update`'s existing try/except) turns that into an explicit
46
52
  `last_update.json` failure naming what was expected, instead of
47
53
  guessing.
54
+
55
+ #3515: ALSO folds in whichever Tier-2 lane extras *capabilities*/*repos*
56
+ need — `win-native`/`mac-native`/`gtk-native`/`tui-pty`
57
+ (`coord.acceptance_drivers.lane_extras_for_machine`, the one mapping
58
+ every install surface resolves through). Before this, no fleet roll or
59
+ agent update ever installed a lane driver's Python deps at all: a lane
60
+ only worked if someone hand-installed into `~/.coord-venv`, and the next
61
+ blue/green swap silently wiped it. Callers default to `()`/`None` (no
62
+ lane extras) rather than re-deriving them here, so a caller with no
63
+ capabilities/repos in hand — there is none left in this codebase, but a
64
+ future direct call — degrades to the pre-#3515 `[server]`-only spec
65
+ instead of raising.
66
+ """
67
+ from coord.acceptance_drivers import lane_extras_for_machine # noqa: PLC0415 — avoid an import cycle
68
+
69
+ extras = ["server", *lane_extras_for_machine(
70
+ capabilities, repos=repos, tui_pty_repos=tui_pty_repos,
71
+ )]
72
+ return _dist_pkg_spec(extra=",".join(extras))
73
+
74
+
75
+ def _tui_pty_repos_for_server(server: AgentServer) -> frozenset[str] | None:
76
+ """The repo-keyed `tui-pty` set `_agent_pkg_spec` needs (#3515), read
77
+ straight off whatever `coordinator.yml` this agent itself last loaded.
78
+
79
+ `AgentServer` keeps that full, freshly-reloaded `Config` (`acceptance`
80
+ included) on `_health_config` purely so `/health`'s own local checkout
81
+ probe can resolve repos the same way `coord health` does — see that
82
+ attribute's docstring in `coord.agent.AgentServer.__init__`. There is no
83
+ public accessor for it (nothing outside that one `/health` probe has
84
+ needed one before), so this reaches the private attribute directly
85
+ rather than widening `AgentServer`'s public surface for a single read.
86
+ `None` — the honest "don't know" the agent-only fallback in
87
+ `coord.acceptance_drivers.lane_extras_for_machine` expects — whenever
88
+ this agent is config-free, predates the `acceptance:` block, or hasn't
89
+ loaded a config at all (every case `getattr` degrades gracefully
90
+ through rather than raising).
48
91
  """
49
- return _dist_pkg_spec(extra="server")
92
+ from coord.acceptance_drivers import repos_requiring_tui_pty # noqa: PLC0415 — avoid an import cycle
93
+
94
+ cfg = getattr(server, "_health_config", None)
95
+ if cfg is None:
96
+ return None
97
+ acceptance = getattr(cfg, "acceptance", None)
98
+ drivers = getattr(acceptance, "drivers", None)
99
+ if drivers is None:
100
+ return None
101
+ return repos_requiring_tui_pty(drivers)
50
102
 
51
103
 
52
104
  #: The sibling systemd *user* units `POST /restart-services` (#2069) is
@@ -1408,7 +1460,7 @@ def build_app(
1408
1460
 
1409
1461
  Request body (JSON, optional)::
1410
1462
 
1411
- {"target_version": "0.4.85", "force": false}
1463
+ {"target_version": "0.4.85", "force": false, "extras": ["gtk-native"]}
1412
1464
 
1413
1465
  #1568: when the caller (``coord agent update``) knows exactly which
1414
1466
  release it's asking for, it passes ``target_version``, pinning the
@@ -1417,6 +1469,19 @@ def build_app(
1417
1469
  matching distribution") instead of a silent no-op. ``target_version``
1418
1470
  is echoed back in ``last_update`` so ``/health`` lets the caller
1419
1471
  verify the upgrade actually landed.
1472
+
1473
+ #3515: ``extras`` lets a caller that already has the fleet-wide
1474
+ picture in hand (``coord release propagate``, which resolves
1475
+ :func:`coord.release_propagate.lane_extras_for_host` against the
1476
+ full `coordinator.yml` — repos AND `acceptance.drivers`, not just
1477
+ this one agent's own capabilities) OVERRIDE this agent's own
1478
+ self-derived lane extras (:func:`_agent_pkg_spec`'s default, driven
1479
+ off ``self.capabilities``/``self.repos`` and whatever `acceptance:`
1480
+ this agent's own last-reloaded config happened to carry). Absent —
1481
+ the default, and every pre-#3515 caller — this agent derives its own
1482
+ extras, exactly as described there. `server` is **always** included
1483
+ regardless of what's passed; a caller only ever needs to name the
1484
+ LANE extras.
1420
1485
  """
1421
1486
  is_editable, project_path = _detect_install_mode()
1422
1487
  if is_editable:
@@ -1445,6 +1510,12 @@ def build_app(
1445
1510
  body = {}
1446
1511
  target_version = body.get("target_version") or None
1447
1512
  force = bool(body.get("force"))
1513
+ raw_extras = body.get("extras")
1514
+ explicit_extras: list[str] | None = (
1515
+ [str(e) for e in raw_extras]
1516
+ if isinstance(raw_extras, list) and raw_extras
1517
+ else None
1518
+ )
1448
1519
 
1449
1520
  # #2121 item 2: every install must name who asked for it. A caller
1450
1521
  # that knows (`coord release propagate`, `coord agent update`) says
@@ -1480,9 +1551,20 @@ def build_app(
1480
1551
  }
1481
1552
  try:
1482
1553
  venv_dir = _venv_dir()
1554
+ if explicit_extras is not None:
1555
+ lane_extras = explicit_extras
1556
+ else:
1557
+ from coord.acceptance_drivers import lane_extras_for_machine # noqa: PLC0415 — avoid an import cycle
1558
+
1559
+ lane_extras = lane_extras_for_machine(
1560
+ server.capabilities,
1561
+ repos=server.repos,
1562
+ tui_pty_repos=_tui_pty_repos_for_server(server),
1563
+ )
1564
+ pkg_spec = _dist_pkg_spec(extra=",".join(["server", *lane_extras]))
1483
1565
  result = agent_update.perform_update(
1484
1566
  venv_dir,
1485
- _agent_pkg_spec(),
1567
+ pkg_spec,
1486
1568
  target_version=target_version,
1487
1569
  initiator=initiator,
1488
1570
  )
@@ -1513,6 +1595,33 @@ def build_app(
1513
1595
  _write_last_update(state_dir, payload)
1514
1596
  return
1515
1597
 
1598
+ # #3515: a WSL-hosted `windows`-capability agent (dell64,
1599
+ # docs/WSL_WINDOWS_WORKER.md) just reinstalled `win-native`
1600
+ # into its OWN (Linux) venv above, where `comtypes` correctly
1601
+ # resolves to "skip it" — this ALSO bootstraps/refreshes the
1602
+ # separate, real Windows-side venv `coord.win_native_bridge`
1603
+ # needs, the same non-fatal "warn, never fail the update"
1604
+ # posture `install-agent.sh`'s own bootstrap hook follows. A
1605
+ # failure here must never turn an otherwise-successful swap
1606
+ # into a reported update failure — `coord doctor`'s
1607
+ # `comtypes` prereq (`coord.prereqs._probe_comtypes`) is the
1608
+ # durable signal for this gap, not `last_update.json`.
1609
+ if "win-native" in lane_extras:
1610
+ from coord.win_native_bridge import ( # noqa: PLC0415 — avoid an import cycle
1611
+ WinNativeBridgeError,
1612
+ ensure_windows_win_native_venv,
1613
+ is_wsl_host,
1614
+ )
1615
+
1616
+ if is_wsl_host():
1617
+ try:
1618
+ ensure_windows_win_native_venv()
1619
+ except WinNativeBridgeError as e:
1620
+ _log.warning(
1621
+ "win-native WSL bridge bootstrap failed after "
1622
+ "agent update: %s", e,
1623
+ )
1624
+
1516
1625
  # #1241: prefer the version the smoke check already read
1517
1626
  # straight from the new slot (deterministic, no reliance on
1518
1627
  # this process's own site-packages resolution having
@@ -1602,6 +1602,21 @@ def release_propagate( # noqa: PLR0912, PLR0915 — a pipeline; the decisions a
1602
1602
  updated_hosts: list[str] = []
1603
1603
  local_name = _local_machine_name(config)
1604
1604
 
1605
+ # #3515: resolved ONCE, up front — propagate has the full,
1606
+ # just-loaded `config` (every machine's `repos:` AND the repo-keyed
1607
+ # `acceptance.drivers` map) in hand, which is exactly the fleet-wide
1608
+ # picture `coord.agent_app`'s own in-agent self-update fallback does
1609
+ # NOT have. Passed explicitly to `_roll_python` below (even when
1610
+ # empty) via `rp.lane_extras_for_host`, so this run's `/update` asks
1611
+ # for the precise extras this host's capabilities/repos need rather
1612
+ # than leaving each agent to guess from its own, possibly stale,
1613
+ # last-reloaded config.
1614
+ from coord.acceptance_drivers import repos_requiring_tui_pty # noqa: PLC0415
1615
+
1616
+ tui_pty_repos = repos_requiring_tui_pty(
1617
+ getattr(getattr(config, "acceptance", None), "drivers", None) or {}
1618
+ )
1619
+
1605
1620
  # #1835 review: plan_lanes() puts the daemon host's python lane first
1606
1621
  # specifically so "a caller must never reach an endpoint its daemon
1607
1622
  # predates" holds — but that is only true if a failure there actually
@@ -1664,6 +1679,10 @@ def release_propagate( # noqa: PLR0912, PLR0915 — a pipeline; the decisions a
1664
1679
  ok, detail, serve_unit_ok = _roll_python(
1665
1680
  machine, target_version=record.target_version,
1666
1681
  agent_port=AGENT_PORT, timeout=timeout, force=force,
1682
+ extras=rp.lane_extras_for_host(
1683
+ machine.capabilities, repos=machine.repos,
1684
+ tui_pty_repos=tui_pty_repos,
1685
+ ),
1667
1686
  )
1668
1687
  if ok:
1669
1688
  updated_hosts.append(roll.host)
@@ -2530,7 +2549,7 @@ def _local_machine_name(config) -> str | None:
2530
2549
 
2531
2550
 
2532
2551
  def _roll_python(machine, *, target_version: str, agent_port: int, timeout: float,
2533
- force: bool) -> tuple[bool, str, bool]:
2552
+ force: bool, extras: "list[str] | None" = None) -> tuple[bool, str, bool]:
2534
2553
  """POST /update and wait for the agent to actually report the version.
2535
2554
 
2536
2555
  Success is judged by the version the agent reports, never by "the POST
@@ -2559,6 +2578,14 @@ def _roll_python(machine, *, target_version: str, agent_port: int, timeout: floa
2559
2578
  2026-08-10 incident's shape (dellserver's coord-serve was fine;
2560
2579
  coord-web was what failed). Callers deciding whether it's safe to
2561
2580
  let OTHER hosts proceed must key off ``serve_unit_ok``, not ``ok``.
2581
+
2582
+ #3515: *extras* — the python lane's pip extras BEYOND ``server``
2583
+ (``coord.release_propagate.lane_extras_for_host``'s result, resolved by
2584
+ the caller against the fleet-wide ``repos``/``acceptance.drivers``
2585
+ picture) — are forwarded verbatim as ``/update``'s own ``extras`` field,
2586
+ overriding that agent's in-process self-derivation. ``None``/``[]`` omits
2587
+ the field entirely, so a pre-#3515 agent (one that predates the
2588
+ ``extras`` body key) still gets exactly the request it always has.
2562
2589
  """
2563
2590
  from coord.agent_update import cli_initiator # noqa: PLC0415
2564
2591
  from coord.commands.agent_ops import ( # noqa: PLC0415
@@ -2568,16 +2595,19 @@ def _roll_python(machine, *, target_version: str, agent_port: int, timeout: floa
2568
2595
  from coord.release_verify import DAEMON_UNIT # noqa: PLC0415
2569
2596
 
2570
2597
  pre = _fetch_pre_started_at([machine])
2598
+ update_body: dict = {
2599
+ "target_version": target_version,
2600
+ "force": force,
2601
+ # #2121: the roll names itself on the target host's audit trail.
2602
+ "initiator": cli_initiator(
2603
+ f"coord release propagate -> {machine.name} python lane"
2604
+ ),
2605
+ }
2606
+ if extras:
2607
+ update_body["extras"] = extras
2571
2608
  status, body, error = _post(
2572
2609
  f"http://{machine.host}:{agent_port}/update",
2573
- {
2574
- "target_version": target_version,
2575
- "force": force,
2576
- # #2121: the roll names itself on the target host's audit trail.
2577
- "initiator": cli_initiator(
2578
- f"coord release propagate -> {machine.name} python lane"
2579
- ),
2580
- },
2610
+ update_body,
2581
2611
  timeout=15.0,
2582
2612
  )
2583
2613
  if error: