code-coordinator 0.5.553__tar.gz → 0.5.554__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 (925) hide show
  1. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/code_coordinator.egg-info/scm_version.json +2 -2
  4. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/acceptance.py +16 -1
  5. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/acceptance_drivers.py +26 -3
  6. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/bugbash.py +108 -10
  7. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/release.py +19 -2
  8. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/gtk_native_driver.py +73 -15
  9. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/mac_native_driver.py +64 -0
  10. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/release_gate.py +51 -0
  11. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/reports.py +5 -0
  12. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/win_native_driver.py +121 -0
  13. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_acceptance.py +40 -0
  14. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_acceptance_drivers.py +50 -0
  15. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_bugbash.py +71 -0
  16. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_gtk_native_driver.py +69 -3
  17. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_mac_native_driver.py +35 -0
  18. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_release_gate.py +112 -0
  19. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_win_native_driver.py +64 -0
  20. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/.claude/commands/board.md +0 -0
  21. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/.claude/commands/complete-session.md +0 -0
  22. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/.claude/commands/coordinator.md +0 -0
  23. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/.githooks/_lib.sh +0 -0
  24. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/.githooks/post-checkout +0 -0
  25. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/.githooks/post-commit +0 -0
  26. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/.githooks/post-merge +0 -0
  27. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  28. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/.github/coord-ci-acceptance.yml +0 -0
  29. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/.github/workflows/auto-release.yml +0 -0
  30. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/.github/workflows/publish.yml +0 -0
  31. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/.github/workflows/test.yml +0 -0
  32. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/.gitignore +0 -0
  33. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/CLAUDE.md +0 -0
  34. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/GOAL.md +0 -0
  35. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/LICENSE +0 -0
  36. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/MANIFEST.in +0 -0
  37. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/README.md +0 -0
  38. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/code_coordinator.egg-info/SOURCES.txt +0 -0
  39. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/code_coordinator.egg-info/dependency_links.txt +0 -0
  40. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/code_coordinator.egg-info/entry_points.txt +0 -0
  41. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/code_coordinator.egg-info/requires.txt +0 -0
  42. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/code_coordinator.egg-info/scm_file_list.json +0 -0
  43. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/code_coordinator.egg-info/top_level.txt +0 -0
  44. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/__init__.py +0 -0
  45. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/_board_mapping.py +0 -0
  46. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/agent.py +0 -0
  47. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/agent_app.py +0 -0
  48. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/agent_update.py +0 -0
  49. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/agents/opencode/.gitignore +0 -0
  50. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/agents/opencode/agents/work.md +0 -0
  51. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/agents/opencode/routing.jsonc +0 -0
  52. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/approved_work.py +0 -0
  53. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/audit.py +0 -0
  54. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/auto_loop.py +0 -0
  55. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/backup.py +0 -0
  56. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/block_log.py +0 -0
  57. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/board_schema.py +0 -0
  58. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/board_service.py +0 -0
  59. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/board_wire.py +0 -0
  60. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/brain.py +0 -0
  61. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/branch_model.py +0 -0
  62. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/bug_intake.py +0 -0
  63. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/cargo_cache.py +0 -0
  64. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/ci_fix.py +0 -0
  65. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/ci_github.py +0 -0
  66. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/ci_gitlab.py +0 -0
  67. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/ci_store.py +0 -0
  68. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/claim.py +0 -0
  69. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/claude_setup_token.py +0 -0
  70. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/cli.py +0 -0
  71. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/client.py +0 -0
  72. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/codegen.py +0 -0
  73. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/__init__.py +0 -0
  74. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/_common.py +0 -0
  75. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/acceptance.py +0 -0
  76. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/agent_ops.py +0 -0
  77. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/audit.py +0 -0
  78. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/backup.py +0 -0
  79. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/bugbash.py +0 -0
  80. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/chat.py +0 -0
  81. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/ci.py +0 -0
  82. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/codegen.py +0 -0
  83. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/dispatch.py +0 -0
  84. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/dispatch_workers.py +0 -0
  85. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/dr.py +0 -0
  86. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/drive.py +0 -0
  87. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/drive_queue.py +0 -0
  88. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/gate_a.py +0 -0
  89. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/gates.py +0 -0
  90. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/issues.py +0 -0
  91. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/lifecycle.py +0 -0
  92. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/machine.py +0 -0
  93. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/merge.py +0 -0
  94. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/milestone.py +0 -0
  95. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/plan_followup.py +0 -0
  96. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/plans.py +0 -0
  97. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/portal.py +0 -0
  98. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/pr.py +0 -0
  99. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/repo.py +0 -0
  100. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/report.py +0 -0
  101. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/review.py +0 -0
  102. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/scorecard.py +0 -0
  103. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/sessions.py +0 -0
  104. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/setup.py +0 -0
  105. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/status.py +0 -0
  106. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/store_migrate.py +0 -0
  107. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/terminal.py +0 -0
  108. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/test_gate.py +0 -0
  109. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/tui.py +0 -0
  110. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/comments.py +0 -0
  111. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/config.py +0 -0
  112. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/config_reload.py +0 -0
  113. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/confirm_test.py +0 -0
  114. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/conflict_fix.py +0 -0
  115. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/dao.py +0 -0
  116. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/dashboard/__init__.py +0 -0
  117. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/dashboard/fixture.py +0 -0
  118. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/dashboard/index.html +0 -0
  119. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/dashboard/server.py +0 -0
  120. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/dashboard/terminal.py +0 -0
  121. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/db.py +0 -0
  122. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/dead_end.py +0 -0
  123. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/decomposition_chat.py +0 -0
  124. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/deploy/README.md +0 -0
  125. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/deploy/coord-agent.service +0 -0
  126. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/deploy/coord-backup.service +0 -0
  127. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/deploy/coord-backup.timer +0 -0
  128. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/deploy/coord-db-backup.service +0 -0
  129. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/deploy/coord-db-backup.sh +0 -0
  130. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/deploy/coord-db-backup.timer +0 -0
  131. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/deploy/coord-dr-verify.service +0 -0
  132. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/deploy/coord-dr-verify.timer +0 -0
  133. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/deploy/coord-drive-queue.service +0 -0
  134. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/deploy/coord-drive-queue.timer +0 -0
  135. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/deploy/coord-failure-notify.service +0 -0
  136. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/deploy/coord-fleet-watchdog.service +0 -0
  137. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/deploy/coord-fleet-watchdog.timer +0 -0
  138. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/deploy/coord-notify.service +0 -0
  139. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/deploy/coord-notify.timer +0 -0
  140. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/deploy/coord-release-propagate.service +0 -0
  141. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/deploy/coord-release-propagate.timer +0 -0
  142. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/deploy/coord-release-window.service +0 -0
  143. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/deploy/coord-release-window.timer +0 -0
  144. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/deploy/coord-serve.service +0 -0
  145. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/deploy/coord-web-dist-build.service +0 -0
  146. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/deploy/coord-web-dist-build.timer +0 -0
  147. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/deploy/coord-web.service +0 -0
  148. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/deploy_manifest.py +0 -0
  149. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/deploy_units.py +0 -0
  150. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/deprecation_telemetry.py +0 -0
  151. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/deps.py +0 -0
  152. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/diagnose.py +0 -0
  153. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/dispatch.py +0 -0
  154. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/dispatch_liveness.py +0 -0
  155. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/dist_name.py +0 -0
  156. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/dr_promote.py +0 -0
  157. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/dr_verify.py +0 -0
  158. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/drive.py +0 -0
  159. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/drive_queue.py +0 -0
  160. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/drive_sessions_snapshot.py +0 -0
  161. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/drive_state.py +0 -0
  162. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/events.py +0 -0
  163. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/failure_class.py +0 -0
  164. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/failure_classifier.py +0 -0
  165. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/filelock.py +0 -0
  166. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/fleet_config_health.py +0 -0
  167. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/forge_availability.py +0 -0
  168. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/freshness.py +0 -0
  169. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/gate_a.py +0 -0
  170. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/gate_b.py +0 -0
  171. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/gate_snapshot.py +0 -0
  172. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/gates.py +0 -0
  173. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/gen_board_fixture.py +0 -0
  174. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/github_ops.py +0 -0
  175. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/github_throttle.py +0 -0
  176. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/goal.py +0 -0
  177. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/graph_health.py +0 -0
  178. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/__init__.py +0 -0
  179. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/aggregate.py +0 -0
  180. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/checks/__init__.py +0 -0
  181. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/checks/_ci_pin.py +0 -0
  182. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/checks/agent_install.py +0 -0
  183. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/checks/cargo_targets.py +0 -0
  184. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/checks/claude_binary.py +0 -0
  185. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/checks/config_drift.py +0 -0
  186. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/checks/coord_tui_ci_pin.py +0 -0
  187. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/checks/coord_web_ci_pin.py +0 -0
  188. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/checks/deploy_lane_facts.py +0 -0
  189. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/checks/disk.py +0 -0
  190. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/checks/fleet_board.py +0 -0
  191. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  192. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/checks/fleet_phantom.py +0 -0
  193. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/checks/fleet_unit_drift.py +0 -0
  194. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/checks/graph.py +0 -0
  195. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/checks/graphify_cli.py +0 -0
  196. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/checks/index_lock.py +0 -0
  197. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/checks/issues_sync_staleness.py +0 -0
  198. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/checks/local_machine_identity.py +0 -0
  199. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/checks/plan_usage.py +0 -0
  200. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/checks/pr_churn.py +0 -0
  201. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/checks/release_cordon.py +0 -0
  202. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/checks/repo_state.py +0 -0
  203. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/checks/spawned_coord.py +0 -0
  204. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/checks/stalled_pipeline.py +0 -0
  205. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/checks/timer_active.py +0 -0
  206. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/checks/toolchain.py +0 -0
  207. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/checks/unit_drift.py +0 -0
  208. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/checks/unit_enablement.py +0 -0
  209. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/checks/wedged_drive_queue.py +0 -0
  210. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/checks/worktrees.py +0 -0
  211. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/cli.py +0 -0
  212. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/context.py +0 -0
  213. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/fleet_snapshot.py +0 -0
  214. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/models.py +0 -0
  215. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/pypi.py +0 -0
  216. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/registry.py +0 -0
  217. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/render.py +0 -0
  218. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/units.py +0 -0
  219. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/hooks.py +0 -0
  220. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/housekeeping.py +0 -0
  221. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/interactive.py +0 -0
  222. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/invariant_alarms.py +0 -0
  223. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/issue_store.py +0 -0
  224. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/issues_sync_status.py +0 -0
  225. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/liveness_auditor.py +0 -0
  226. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/machine_fault.py +0 -0
  227. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/machine_metrics.py +0 -0
  228. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/machine_onboard.py +0 -0
  229. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/machine_pause.py +0 -0
  230. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/machine_stats.py +0 -0
  231. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/merge_queue.py +0 -0
  232. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/milestone_chat.py +0 -0
  233. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/milestone_dispatch.py +0 -0
  234. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/milestone_gate.py +0 -0
  235. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/milestone_order.py +0 -0
  236. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/mock_author.py +0 -0
  237. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/models.py +0 -0
  238. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/network.py +0 -0
  239. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/new_issue_chat.py +0 -0
  240. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/notifier/__init__.py +0 -0
  241. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/notifier/baseline.py +0 -0
  242. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/notifier/cli.py +0 -0
  243. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/notifier/collect.py +0 -0
  244. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/notifier/digest.py +0 -0
  245. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/notifier/models.py +0 -0
  246. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/notifier/predicate.py +0 -0
  247. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/notifier/service.py +0 -0
  248. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/notifier/store.py +0 -0
  249. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/notifier/transport.py +0 -0
  250. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/notify.py +0 -0
  251. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/openapi.py +0 -0
  252. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/overlap_fence.py +0 -0
  253. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/overlap_predict.py +0 -0
  254. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/parentage.py +0 -0
  255. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/parentage_github.py +0 -0
  256. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/pipeline.py +0 -0
  257. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/plan_parser.py +0 -0
  258. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/plans.py +0 -0
  259. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/platform_paths.py +0 -0
  260. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/portal_bridge.py +0 -0
  261. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/portal_store.py +0 -0
  262. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/portal_sync.py +0 -0
  263. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/pr_body_lint.py +0 -0
  264. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/prereqs.py +0 -0
  265. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/progress.py +0 -0
  266. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/providers/__init__.py +0 -0
  267. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/providers/base.py +0 -0
  268. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/providers/claude.py +0 -0
  269. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/providers/claude_pty.py +0 -0
  270. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/providers/opencode.py +0 -0
  271. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/queue_diagnose.py +0 -0
  272. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/reconcile.py +0 -0
  273. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/reconcile_tick.py +0 -0
  274. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/refine_chat.py +0 -0
  275. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/release_cordon.py +0 -0
  276. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/release_propagate.py +0 -0
  277. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/release_verify.py +0 -0
  278. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/release_window.py +0 -0
  279. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/repo_dormancy.py +0 -0
  280. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/repo_edit.py +0 -0
  281. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/repo_onboard.py +0 -0
  282. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/rest_schema.py +0 -0
  283. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/restart_cmd.py +0 -0
  284. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/revalidate.py +0 -0
  285. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/review.py +0 -0
  286. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/scorecard.py +0 -0
  287. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/self_health.py +0 -0
  288. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/serve_app.py +0 -0
  289. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  290. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  291. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  292. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  293. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  294. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/skills/portal-followup/SKILL.md +0 -0
  295. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/skills/release-now/SKILL.md +0 -0
  296. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  297. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  298. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/skills/update-issue/SKILL.md +0 -0
  299. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/smoke.py +0 -0
  300. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/smoke_tags.py +0 -0
  301. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/spend_ceiling.py +0 -0
  302. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/split_work.py +0 -0
  303. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/sql.py +0 -0
  304. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/stage_projection.py +0 -0
  305. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/state.py +0 -0
  306. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/store_migrate.py +0 -0
  307. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/store_parity.py +0 -0
  308. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/templates/deploy-cloudflare.node.yml +0 -0
  309. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/test_author.py +0 -0
  310. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/test_chat.py +0 -0
  311. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/test_orchestrator.py +0 -0
  312. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/test_report.py +0 -0
  313. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/tui_pty_driver.py +0 -0
  314. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/tui_release.py +0 -0
  315. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/uat_checks.py +0 -0
  316. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/usage.py +0 -0
  317. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/usage_limits.py +0 -0
  318. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/usage_rollup.py +0 -0
  319. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/worker_events.py +0 -0
  320. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coordinator.example.yml +0 -0
  321. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/deploy/coord-agent.service +0 -0
  322. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/deploy/coord-backup.service +0 -0
  323. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/deploy/coord-backup.timer +0 -0
  324. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/deploy/coord-db-backup.service +0 -0
  325. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/deploy/coord-db-backup.sh +0 -0
  326. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/deploy/coord-db-backup.timer +0 -0
  327. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/deploy/coord-dr-verify.service +0 -0
  328. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/deploy/coord-dr-verify.timer +0 -0
  329. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/deploy/coord-drive-queue.service +0 -0
  330. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/deploy/coord-drive-queue.timer +0 -0
  331. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/deploy/coord-failure-notify.service +0 -0
  332. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/deploy/coord-failure-notify.sh +0 -0
  333. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/deploy/coord-fleet-watchdog.service +0 -0
  334. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/deploy/coord-fleet-watchdog.timer +0 -0
  335. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/deploy/coord-notify.service +0 -0
  336. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/deploy/coord-notify.timer +0 -0
  337. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/deploy/coord-release-propagate.service +0 -0
  338. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/deploy/coord-release-propagate.timer +0 -0
  339. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/deploy/coord-release-window.service +0 -0
  340. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/deploy/coord-release-window.timer +0 -0
  341. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/deploy/coord-serve.service +0 -0
  342. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/deploy/coord-web-dist-build.service +0 -0
  343. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/deploy/coord-web-dist-build.sh +0 -0
  344. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/deploy/coord-web-dist-build.timer +0 -0
  345. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/deploy/coord-web-rollback.sh +0 -0
  346. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/deploy/coord-web.service +0 -0
  347. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/deploy/node-shim.sh +0 -0
  348. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/ADR_COORD_TUI_CI.md +0 -0
  349. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  350. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/ADR_COORD_WEB_CI.md +0 -0
  351. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/ADR_COORD_WEB_DIST.md +0 -0
  352. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
  353. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/AGENT_OPERATIONS.md +0 -0
  354. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/ARCHITECTURE.md +0 -0
  355. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/ARCH_SECURITY_GATES.md +0 -0
  356. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/COCKPIT.md +0 -0
  357. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/CONTROL_CENTER.md +0 -0
  358. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/COST_DISCIPLINE.md +0 -0
  359. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/CROSS_PLATFORM.md +0 -0
  360. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/CUSTOMER_FACING_APPS.md +0 -0
  361. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/CUSTOMER_PORTAL.md +0 -0
  362. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/DATA_STORE_SELECTION.md +0 -0
  363. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/DISASTER_RECOVERY.md +0 -0
  364. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/DRIVE_QUEUE.md +0 -0
  365. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/EPHEMERAL_WORKERS.md +0 -0
  366. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/FORGE_MIGRATION.md +0 -0
  367. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/GRAPHIFY_SETUP.md +0 -0
  368. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/ISSUE_GUIDANCE.md +0 -0
  369. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/MAC_MINI.md +0 -0
  370. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  371. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/NOTIFIER.md +0 -0
  372. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/OPENCODE_VERIFICATION.md +0 -0
  373. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/OPERATING_GOTCHAS.md +0 -0
  374. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/OPERATOR_GUIDES.md +0 -0
  375. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/ORACLE_LOOP.md +0 -0
  376. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/PHONE_WEBAPP.md +0 -0
  377. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/PIPELINE_V2.md +0 -0
  378. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/PLATFORM_EVOLUTION.md +0 -0
  379. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/SECOND_BACKEND.md +0 -0
  380. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/STORE_SERVICE.md +0 -0
  381. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  382. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/WEB_CONTROL_CENTER.md +0 -0
  383. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/WSL_WINDOWS_WORKER.md +0 -0
  384. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/mocks/web/README.md +0 -0
  385. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/mocks/web/_tokens.css +0 -0
  386. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/mocks/web/issue-detail.html +0 -0
  387. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/mocks/web/pipeline-narrow.html +0 -0
  388. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/mocks/web/pipeline-wide.html +0 -0
  389. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/graphify-out/.gitignore +0 -0
  390. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/install-agent.sh +0 -0
  391. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/pyproject.toml +0 -0
  392. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/audit_review_verdict_overrides.py +0 -0
  393. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  394. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/azure-workers/build-worker-image.sh +0 -0
  395. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/azure-workers/coordinator-machine.py +0 -0
  396. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/azure-workers/dr-down.sh +0 -0
  397. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/azure-workers/dr-up.sh +0 -0
  398. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/azure-workers/epic-down.sh +0 -0
  399. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/azure-workers/epic-up.sh +0 -0
  400. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/azure-workers/preflight.sh +0 -0
  401. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/azure-workers/provision-server.sh +0 -0
  402. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/azure-workers/provision-worker.sh +0 -0
  403. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  404. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  405. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/azure-workers/throwaway-vm.sh +0 -0
  406. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/azure-workers/verify-github-token.sh +0 -0
  407. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/check_gh_argv_containment.py +0 -0
  408. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/codegen.py +0 -0
  409. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/coord-test-runner.sh +0 -0
  410. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
  411. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
  412. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
  413. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
  414. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/coord-venv-rollback.sh +0 -0
  415. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/drive-batch.sh +0 -0
  416. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/extract-coord-tui.sh +0 -0
  417. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/fleet_watchdog.py +0 -0
  418. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/gen_board_fixture.py +0 -0
  419. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/gen_mock_index.py +0 -0
  420. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/lib/provision-core.sh +0 -0
  421. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/next_release_tag.py +0 -0
  422. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/provision-machine.sh +0 -0
  423. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/run_tests_in_populated_home.sh +0 -0
  424. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/run_tests_without_gh.sh +0 -0
  425. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/setup-macmini.sh +0 -0
  426. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/smoke_437_interactive.py +0 -0
  427. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/verify-provision-noble.sh +0 -0
  428. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/verify_878_review_capture.py +0 -0
  429. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/verify_release_published.py +0 -0
  430. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/verify_release_wheel.py +0 -0
  431. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/setup.cfg +0 -0
  432. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/SMOKE_SET.md +0 -0
  433. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/__init__.py +0 -0
  434. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/acceptance/ms-37/conftest.py +0 -0
  435. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/acceptance/ms-37/contract.md +0 -0
  436. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/acceptance/ms-37/manifest.yml +0 -0
  437. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  438. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  439. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/acceptance/ms-51/contract.md +0 -0
  440. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  441. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  442. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/acceptance/ms-51/manifest.yml +0 -0
  443. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  444. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/acceptance/ms-51/tsconfig.json +0 -0
  445. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  446. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/backends.py +0 -0
  447. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/conftest.py +0 -0
  448. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/fixtures/board-pipeline-basic.json +0 -0
  449. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  450. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  451. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  452. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  453. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/fixtures/playwright/all_pass.json +0 -0
  454. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  455. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/fixtures/playwright/mixed_fail.json +0 -0
  456. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  457. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  458. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/fixtures/playwright/skip.json +0 -0
  459. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/fixtures/playwright/truncated.json +0 -0
  460. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  461. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  462. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  463. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  464. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/fixtures/test_report/pytest_error_log_record.txt +0 -0
  465. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  466. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  467. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  468. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  469. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_agent.py +0 -0
  470. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_agent_api_error.py +0 -0
  471. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_agent_app.py +0 -0
  472. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_agent_branch_base.py +0 -0
  473. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_agent_branch_capture.py +0 -0
  474. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_agent_config_free_1712.py +0 -0
  475. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_agent_deploy_units_endpoint.py +0 -0
  476. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_agent_dirty_worktree.py +0 -0
  477. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  478. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_agent_graph_self_heal.py +0 -0
  479. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_agent_health_h3.py +0 -0
  480. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_agent_idle_restart.py +0 -0
  481. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_agent_push_failure.py +0 -0
  482. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_agent_reap.py +0 -0
  483. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_agent_repos_and_pull.py +0 -0
  484. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_agent_restart_services_endpoint.py +0 -0
  485. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_agent_skills_self_heal.py +0 -0
  486. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_agent_startup_diagnostics.py +0 -0
  487. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_agent_update.py +0 -0
  488. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_agent_update_bluegreen.py +0 -0
  489. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_agent_usage_limit.py +0 -0
  490. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_agent_zero_commit.py +0 -0
  491. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_ambient_home_isolation.py +0 -0
  492. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_approve_capability_reroute_3241.py +0 -0
  493. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_approve_dependency_busy_2804.py +0 -0
  494. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_approve_reject_plan.py +0 -0
  495. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_approve_usage_gate.py +0 -0
  496. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_approved_work_2532.py +0 -0
  497. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_approved_work_2996.py +0 -0
  498. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_assignment_already_recorded_daemon.py +0 -0
  499. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_audit_log.py +0 -0
  500. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_audit_outcome.py +0 -0
  501. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_audit_query.py +0 -0
  502. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_auto_loop.py +0 -0
  503. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_auto_release_publish_2035.py +0 -0
  504. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_backend_selection.py +0 -0
  505. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_backup.py +0 -0
  506. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_base_checkout_restore.py +0 -0
  507. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_block_log.py +0 -0
  508. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_board_cap_762.py +0 -0
  509. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_board_fixture.py +0 -0
  510. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_board_read_path.py +0 -0
  511. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_board_schema.py +0 -0
  512. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_board_service.py +0 -0
  513. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_board_state.py +0 -0
  514. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_board_wire.py +0 -0
  515. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_brain.py +0 -0
  516. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_branch_model.py +0 -0
  517. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_bug_intake.py +0 -0
  518. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_build_worker_image_env_update.py +0 -0
  519. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cargo_cache.py +0 -0
  520. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_check_gh_argv_containment.py +0 -0
  521. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_ci_acceptance_gate_1950.py +0 -0
  522. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_ci_fix.py +0 -0
  523. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_ci_github.py +0 -0
  524. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_ci_gitlab.py +0 -0
  525. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_ci_parity_2091.py +0 -0
  526. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_ci_store.py +0 -0
  527. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_claim.py +0 -0
  528. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_claude_md_budget.py +0 -0
  529. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_claude_setup_token.py +0 -0
  530. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_acceptance.py +0 -0
  531. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_assign.py +0 -0
  532. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  533. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_assign_interactive_remote.py +0 -0
  534. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_assign_provider.py +0 -0
  535. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  536. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_audit.py +0 -0
  537. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_chat_continue.py +0 -0
  538. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_ci.py +0 -0
  539. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_codegen.py +0 -0
  540. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_decide.py +0 -0
  541. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_diagnose_capability_rules.py +0 -0
  542. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_diagnose_config_provenance.py +0 -0
  543. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_diagnose_forge_availability.py +0 -0
  544. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_diagnose_graph.py +0 -0
  545. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_diagnose_self.py +0 -0
  546. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_diagnose_test_coverage.py +0 -0
  547. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_doctor.py +0 -0
  548. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_doctor_config_free_1801.py +0 -0
  549. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  550. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_doctor_store_backend_3084.py +0 -0
  551. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_drive.py +0 -0
  552. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_drive_queue.py +0 -0
  553. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_escalate.py +0 -0
  554. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_fix_headless_review.py +0 -0
  555. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_gate_a.py +0 -0
  556. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_install_drift.py +0 -0
  557. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_install_skills.py +0 -0
  558. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_issue_comment.py +0 -0
  559. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_issue_create_label.py +0 -0
  560. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_issue_reopen.py +0 -0
  561. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_issue_view_list.py +0 -0
  562. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_issues.py +0 -0
  563. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_merge.py +0 -0
  564. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_milestone_assign.py +0 -0
  565. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_milestone_capture.py +0 -0
  566. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_milestone_chat_add_child.py +0 -0
  567. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_milestone_dispatch.py +0 -0
  568. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_milestone_gate_b.py +0 -0
  569. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_milestone_gate_c.py +0 -0
  570. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_milestone_order.py +0 -0
  571. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  572. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_milestone_ship.py +0 -0
  573. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_network.py +0 -0
  574. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_new_issue_chat.py +0 -0
  575. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_plans.py +0 -0
  576. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_portal.py +0 -0
  577. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_pr.py +0 -0
  578. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_pull_artifact.py +0 -0
  579. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_queue.py +0 -0
  580. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_reattach_sessions.py +0 -0
  581. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_refine_board.py +0 -0
  582. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_release_preflight.py +0 -0
  583. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_release_propagate.py +0 -0
  584. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_release_window.py +0 -0
  585. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_repo_2220.py +0 -0
  586. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
  587. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_scorecard.py +0 -0
  588. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_serve_store_backend_3084.py +0 -0
  589. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_set_review_findings.py +0 -0
  590. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_status_advisory_terminal.py +0 -0
  591. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_status_contested_tag.py +0 -0
  592. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_status_invariant_alarms.py +0 -0
  593. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_status_machine_fault.py +0 -0
  594. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_status_merge_queue.py +0 -0
  595. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_status_provider.py +0 -0
  596. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_status_retried_3340.py +0 -0
  597. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_status_review_finalizing.py +0 -0
  598. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_status_supervisor_3366.py +0 -0
  599. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_status_test_failed_tag.py +0 -0
  600. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_status_usage_limit.py +0 -0
  601. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_sync_comments_873.py +0 -0
  602. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_test_plan.py +0 -0
  603. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_track.py +0 -0
  604. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_tui_update.py +0 -0
  605. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_wait.py +0 -0
  606. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_client.py +0 -0
  607. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_client_base_install.py +0 -0
  608. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_client_config_cache_atomic_3052.py +0 -0
  609. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_client_resource_migration_1946.py +0 -0
  610. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_commands_common.py +0 -0
  611. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_comments.py +0 -0
  612. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_completion_summary.py +0 -0
  613. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_config.py +0 -0
  614. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_config_acceptance.py +0 -0
  615. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_config_audit.py +0 -0
  616. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_config_drift_check.py +0 -0
  617. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_config_effective.py +0 -0
  618. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_config_pricing.py +0 -0
  619. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  620. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_config_usage_gate.py +0 -0
  621. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_confirm_test.py +0 -0
  622. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_conflict_fix.py +0 -0
  623. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_conflict_fix_semantic.py +0 -0
  624. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
  625. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_coord_test.py +0 -0
  626. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
  627. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_coord_test_runner_baseline.py +0 -0
  628. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_coord_test_runner_populated_home.py +0 -0
  629. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_coord_test_runner_routing.py +0 -0
  630. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_coord_test_runner_toolchain.py +0 -0
  631. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_coord_uat.py +0 -0
  632. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_coord_web_sse_restart_live.py +0 -0
  633. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_coordinator_machine.py +0 -0
  634. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cross_platform_imports.py +0 -0
  635. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_dao.py +0 -0
  636. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_dashboard.py +0 -0
  637. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_dashboard_api.py +0 -0
  638. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_dashboard_fixture.py +0 -0
  639. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_dashboard_server.py +0 -0
  640. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_dashboard_terminal.py +0 -0
  641. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_dashboard_terminal_live.py +0 -0
  642. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_db.py +0 -0
  643. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_dead_end.py +0 -0
  644. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_decomposition_chat.py +0 -0
  645. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_deploy_coord_db_backup.py +0 -0
  646. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_deploy_coord_web_dist.py +0 -0
  647. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_deploy_coord_web_rollback.py +0 -0
  648. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_deploy_db_backup_unit.py +0 -0
  649. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_deploy_drive_queue_unit.py +0 -0
  650. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_deploy_failure_notify_unit.py +0 -0
  651. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_deploy_manifest.py +0 -0
  652. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_deploy_notify_unit.py +0 -0
  653. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_deploy_units_lane.py +0 -0
  654. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_deploy_web_unit.py +0 -0
  655. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_deprecation_telemetry.py +0 -0
  656. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_deps.py +0 -0
  657. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_diagnose.py +0 -0
  658. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_dispatch.py +0 -0
  659. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_dispatch_liveness.py +0 -0
  660. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_dispatch_target_validation.py +0 -0
  661. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_dispatch_workers.py +0 -0
  662. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_dist_name.py +0 -0
  663. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_done_housekeeping.py +0 -0
  664. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_dr_azure_scripts.py +0 -0
  665. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_dr_promote.py +0 -0
  666. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_dr_verify.py +0 -0
  667. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_drive.py +0 -0
  668. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_drive_machine_fault.py +0 -0
  669. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_drive_queue.py +0 -0
  670. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_drive_queue_blocked_rendering.py +0 -0
  671. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_drive_queue_launch_argv.py +0 -0
  672. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_drive_queue_max_parallel_config.py +0 -0
  673. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
  674. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_drive_queue_roll_pending.py +0 -0
  675. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
  676. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_drive_sessions_snapshot.py +0 -0
  677. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_drive_state.py +0 -0
  678. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_drive_tmux.py +0 -0
  679. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_epic_up_capability_detection.py +0 -0
  680. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  681. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_epic_up_image_provenance.py +0 -0
  682. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_errors.py +0 -0
  683. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_events.py +0 -0
  684. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_failure_class.py +0 -0
  685. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_failure_classifier.py +0 -0
  686. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_filelock.py +0 -0
  687. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  688. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_fix_escalation_classifier.py +0 -0
  689. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_fix_of_force_override.py +0 -0
  690. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_fleet_config_health.py +0 -0
  691. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_fleet_health_probes.py +0 -0
  692. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_fleet_health_snapshot.py +0 -0
  693. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_fleet_watchdog.py +0 -0
  694. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_forge_availability.py +0 -0
  695. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_freshness.py +0 -0
  696. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_gate_a.py +0 -0
  697. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_gate_b.py +0 -0
  698. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_gate_snapshot_staleness.py +0 -0
  699. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_gates.py +0 -0
  700. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  701. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_gen_mock_index.py +0 -0
  702. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_generated_rust_fixture.py +0 -0
  703. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_generated_rust_requests.py +0 -0
  704. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_generated_types_fixture.py +0 -0
  705. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_github_ops.py +0 -0
  706. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_github_throttle.py +0 -0
  707. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_goal.py +0 -0
  708. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_graph_health.py +0 -0
  709. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_graph_selfheal_absent_2237.py +0 -0
  710. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_handoff.py +0 -0
  711. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_health_checks.py +0 -0
  712. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_health_cli.py +0 -0
  713. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_health_cli_graph.py +0 -0
  714. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_health_config.py +0 -0
  715. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_health_context.py +0 -0
  716. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_health_coord_tui_ci_pin.py +0 -0
  717. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_health_coord_web_ci_pin.py +0 -0
  718. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_health_deploy_lane_facts.py +0 -0
  719. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_health_fix.py +0 -0
  720. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_health_incident_regression.py +0 -0
  721. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_health_issues_sync_staleness.py +0 -0
  722. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_health_pr_churn.py +0 -0
  723. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_health_pypi.py +0 -0
  724. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_health_registry.py +0 -0
  725. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_health_release_cordon_probe.py +0 -0
  726. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_health_timer_active.py +0 -0
  727. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_health_toolchain.py +0 -0
  728. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_health_unit_drift.py +0 -0
  729. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_health_unit_enablement.py +0 -0
  730. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_health_wedged_drive_queue.py +0 -0
  731. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_hooks.py +0 -0
  732. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_housekeeping.py +0 -0
  733. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_human_attended_437.py +0 -0
  734. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_init.py +0 -0
  735. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_install_agent_venv_2911.py +0 -0
  736. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_integration.py +0 -0
  737. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_interactive.py +0 -0
  738. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_interactive_briefing_echo.py +0 -0
  739. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_interactive_pane_log_2541.py +0 -0
  740. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_interactive_prefill_state.py +0 -0
  741. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_interactive_session_relaunch.py +0 -0
  742. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_interactive_test_verdict_backstop.py +0 -0
  743. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_interactive_token_attribution.py +0 -0
  744. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_interactive_worktree.py +0 -0
  745. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_invariant_alarms.py +0 -0
  746. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_issue_store_seam.py +0 -0
  747. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_issues_sync_status.py +0 -0
  748. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_liveness_auditor.py +0 -0
  749. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_liveness_notify.py +0 -0
  750. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_lock_contention_ratchet.py +0 -0
  751. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_machine_fault.py +0 -0
  752. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_machine_metrics.py +0 -0
  753. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_machine_onboard.py +0 -0
  754. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_machine_pause.py +0 -0
  755. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_machine_stats.py +0 -0
  756. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_merge_queue.py +0 -0
  757. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_merge_verify.py +0 -0
  758. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_milestone_chat.py +0 -0
  759. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_milestone_dispatch.py +0 -0
  760. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_milestone_gate.py +0 -0
  761. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_milestone_order.py +0 -0
  762. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_milestone_seam.py +0 -0
  763. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_mock_author.py +0 -0
  764. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_model_tiering.py +0 -0
  765. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_models.py +0 -0
  766. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_models_config_labels.py +0 -0
  767. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_needs_attention.py +0 -0
  768. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_network.py +0 -0
  769. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_new_issue_chat.py +0 -0
  770. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_next_release_tag.py +0 -0
  771. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_node_shim.py +0 -0
  772. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_notifier_baseline.py +0 -0
  773. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_notifier_cli.py +0 -0
  774. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_notifier_collect.py +0 -0
  775. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_notifier_config.py +0 -0
  776. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_notifier_drive_seam.py +0 -0
  777. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_notifier_isolation.py +0 -0
  778. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_notifier_predicate.py +0 -0
  779. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_notifier_quiet_hours.py +0 -0
  780. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_notifier_service.py +0 -0
  781. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_notify.py +0 -0
  782. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_notify_drain.py +0 -0
  783. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_openapi.py +0 -0
  784. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_operational_defaults.py +0 -0
  785. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_overlap_fence.py +0 -0
  786. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_overlap_predict.py +0 -0
  787. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_packaged_deploy_units.py +0 -0
  788. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_parentage.py +0 -0
  789. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_paste_landed.py +0 -0
  790. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
  791. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_pipeline.py +0 -0
  792. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_plan_followup_approve_plan_command.py +0 -0
  793. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_plan_followup_pr_command.py +0 -0
  794. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_plan_followup_review_command.py +0 -0
  795. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_plan_only.py +0 -0
  796. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_plan_parser.py +0 -0
  797. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_platform_paths.py +0 -0
  798. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_portal_bridge.py +0 -0
  799. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_portal_config.py +0 -0
  800. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_portal_store.py +0 -0
  801. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_portal_sync.py +0 -0
  802. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_pr_body_lint.py +0 -0
  803. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_prereqs.py +0 -0
  804. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_production_db_guard.py +0 -0
  805. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_progress.py +0 -0
  806. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_provider_seam.py +0 -0
  807. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_providers.py +0 -0
  808. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_providers_config_labels.py +0 -0
  809. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_providers_pty.py +0 -0
  810. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_provision_core.py +0 -0
  811. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_provision_machine.py +0 -0
  812. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_py_rust_mirror_inventory.py +0 -0
  813. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_quiet_hours.py +0 -0
  814. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_quiet_hours_store_2146.py +0 -0
  815. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_reap_merged_sessions.py +0 -0
  816. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_reap_stale_interactive_tick.py +0 -0
  817. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_reconcile.py +0 -0
  818. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_reconcile_branch.py +0 -0
  819. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_reconcile_completions.py +0 -0
  820. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
  821. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_reconcile_merges.py +0 -0
  822. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_reconcile_no_agent_record.py +0 -0
  823. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_reconcile_tick.py +0 -0
  824. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_reconcile_usage_limit_done.py +0 -0
  825. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_refine_chat.py +0 -0
  826. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_release_cordon_2101.py +0 -0
  827. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  828. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_release_cordon_deadlock_2240.py +0 -0
  829. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_release_cordon_drain_stall_3336.py +0 -0
  830. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_release_cordon_stuck_2490.py +0 -0
  831. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_release_propagate.py +0 -0
  832. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_release_propagate_threshold.py +0 -0
  833. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_release_roll_between_legs_2854.py +0 -0
  834. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_release_roll_window_handoff.py +0 -0
  835. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_release_unified_1242.py +0 -0
  836. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_release_verify.py +0 -0
  837. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_release_window.py +0 -0
  838. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_remote_auto_prune.py +0 -0
  839. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_remote_interactive_reaper.py +0 -0
  840. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_repo_add.py +0 -0
  841. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_repo_dormancy.py +0 -0
  842. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_repo_edit_2220.py +0 -0
  843. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_repo_graph_fleet_2237.py +0 -0
  844. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_repo_max_parallel_3423.py +0 -0
  845. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_repo_onboard_2220.py +0 -0
  846. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_report_result_push.py +0 -0
  847. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_reports.py +0 -0
  848. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_restart_cmd.py +0 -0
  849. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_retry.py +0 -0
  850. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_retry_advisory_1606.py +0 -0
  851. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_retry_escalation_classify_3360.py +0 -0
  852. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_retry_type_1636.py +0 -0
  853. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_revalidate.py +0 -0
  854. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_review.py +0 -0
  855. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_review_end_review_without_verdict.py +0 -0
  856. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_review_parse_failure_diagnostic.py +0 -0
  857. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_review_reaffirm.py +0 -0
  858. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_review_state.py +0 -0
  859. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_review_verdict_backstop.py +0 -0
  860. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_review_verdict_override_audit.py +0 -0
  861. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_review_verdict_relay.py +0 -0
  862. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_review_zero_commits.py +0 -0
  863. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_scoped_review_wiring.py +0 -0
  864. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_scorecard.py +0 -0
  865. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_self_health.py +0 -0
  866. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_serve.py +0 -0
  867. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_serve_app.py +0 -0
  868. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_serve_app_board_trim.py +0 -0
  869. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_serve_rest_routes.py +0 -0
  870. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_session.py +0 -0
  871. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_slice_issue_attribution.py +0 -0
  872. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_smoke.py +0 -0
  873. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_smoke_fanout_manifest_3333.py +0 -0
  874. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_smoke_live_checkout_restore.py +0 -0
  875. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_smoke_workflow.py +0 -0
  876. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_spend_ceiling.py +0 -0
  877. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_spend_ceiling_coordinator.py +0 -0
  878. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_split.py +0 -0
  879. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_split_work.py +0 -0
  880. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_sql_dialect.py +0 -0
  881. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_sqlite_connect_ratchet.py +0 -0
  882. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_stage_projection.py +0 -0
  883. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_stale_busy_reviewer_697.py +0 -0
  884. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_stalled_pipeline.py +0 -0
  885. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_state.py +0 -0
  886. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_state_review_findings_daemon.py +0 -0
  887. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_status_fleet_footer.py +0 -0
  888. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_stop_1567.py +0 -0
  889. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_store_contract.py +0 -0
  890. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_store_migrate.py +0 -0
  891. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_stuck.py +0 -0
  892. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
  893. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_terminal_command.py +0 -0
  894. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_test_author.py +0 -0
  895. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_test_chat.py +0 -0
  896. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_test_orchestrator.py +0 -0
  897. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_test_report.py +0 -0
  898. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_test_verdict_parsing.py +0 -0
  899. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_test_verdict_transcript_floor.py +0 -0
  900. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_text_io_encoding_audit.py +0 -0
  901. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_thin_client_board_audit.py +0 -0
  902. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_thin_client_config_load_1080.py +0 -0
  903. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_thin_client_daemon_routing_906.py +0 -0
  904. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_throwaway_vm.py +0 -0
  905. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_tmux_host.py +0 -0
  906. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_tmux_session.py +0 -0
  907. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_transcript_floor.py +0 -0
  908. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_tui_pty_driver.py +0 -0
  909. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_uat_checks.py +0 -0
  910. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_usage.py +0 -0
  911. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_usage_limits.py +0 -0
  912. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_usage_rollup.py +0 -0
  913. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_venv_live_install_2121.py +0 -0
  914. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_version_single_source.py +0 -0
  915. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_watch.py +0 -0
  916. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  917. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_worker_env_venv_isolation.py +0 -0
  918. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_worker_events.py +0 -0
  919. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_worker_image_pin_sync.py +0 -0
  920. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_worker_safety.py +0 -0
  921. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_worker_test_scoping.py +0 -0
  922. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_worktree.py +0 -0
  923. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  924. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_write_parity.py +0 -0
  925. {code_coordinator-0.5.553 → code_coordinator-0.5.554}/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.553
3
+ Version: 0.5.554
4
4
  Summary: Coordinate Claude Code workers across multiple machines and repos.
5
5
  Author-email: John Donaghy <johnfdonaghy@gmail.com>
6
6
  License-Expression: LicenseRef-FSL-1.1-MIT
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-coordinator
3
- Version: 0.5.553
3
+ Version: 0.5.554
4
4
  Summary: Coordinate Claude Code workers across multiple machines and repos.
5
5
  Author-email: John Donaghy <johnfdonaghy@gmail.com>
6
6
  License-Expression: LicenseRef-FSL-1.1-MIT
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "0.5.553",
2
+ "tag": "0.5.554",
3
3
  "distance": 0,
4
- "node": "g08b8bc7ce4b5def5fdf426d91f30704832a6c88b",
4
+ "node": "g9153537fcc25cf8e03c74a83899452ecc73a6f92",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-10-01"
@@ -957,13 +957,22 @@ def build_verdict(
957
957
  passed = sum(1 for t in tests if t.get("status") == "pass")
958
958
  failed = sum(1 for t in tests if t.get("status") == "fail")
959
959
  skipped = sum(1 for t in tests if t.get("status") == "skip")
960
+ # #3510: a session precheck (win-native/mac-native/gtk-native) that
961
+ # finds a locked/absent GUI reports a distinct "unavailable" status,
962
+ # not "fail" — it's an environment condition, not an app bug. It must
963
+ # still block `green`/`ci_green`: an unconfirmed result is not a pass
964
+ # (epic #2096's "a gate must be able to fail" / "unconfirmed success
965
+ # is a defect"). Counted and reported separately so callers can tell
966
+ # "the app is broken" apart from "go unlock the host".
967
+ unavailable = sum(1 for t in tests if t.get("status") == "unavailable")
960
968
  payload: dict[str, Any] = {
961
969
  "scope": scope,
962
970
  "total": len(tests),
963
971
  "passed": passed,
964
972
  "failed": failed,
965
973
  "skipped": skipped,
966
- "green": failed == 0 and len(tests) > 0,
974
+ "unavailable": unavailable,
975
+ "green": failed == 0 and unavailable == 0 and len(tests) > 0,
967
976
  "tests": tests,
968
977
  }
969
978
  if issue_number is not None:
@@ -1038,12 +1047,18 @@ def apply_expected_red(verdict: dict[str, Any], expected_red_ids: "set[str]") ->
1038
1047
  real_failures = sum(
1039
1048
  1 for t in tests if t.get("status") == "fail" and t["id"] not in expected_red_ids
1040
1049
  )
1050
+ # #3510: an `unavailable` entry (locked/absent GUI session) is never
1051
+ # expected-red-eligible — it isn't a test failure to excuse, it's a
1052
+ # precheck that never ran anything — so it always counts against
1053
+ # `ci_green` just like it does against `green` in build_verdict.
1054
+ unavailable = verdict.get("unavailable", 0)
1041
1055
  verdict["unexpected_green"] = unexpected_green
1042
1056
  verdict["expected_red_still_red"] = expected_red_still_red
1043
1057
  verdict["missing_expected_red_ids"] = missing_expected_red_ids
1044
1058
  verdict["ci_green"] = (
1045
1059
  len(tests) > 0
1046
1060
  and real_failures == 0
1061
+ and unavailable == 0
1047
1062
  and not unexpected_green
1048
1063
  and not missing_expected_red_ids
1049
1064
  )
@@ -782,7 +782,15 @@ def _run_win_native(run_command: str, cwd: str, entrypoint: str, *, timeout: int
782
782
  except WinNativeRuntimeError as e:
783
783
  raise DriverError(f"win-native driver could not run: {e}") from e
784
784
 
785
- exit_code = 0 if tests and all(t.get("status") != "fail" for t in tests) else 1
785
+ # #3510: a locked/absent interactive session reports a distinct
786
+ # "unavailable" status (coord.win_native_driver's session precheck),
787
+ # not "fail" — it must still fail this exit code rather than read as a
788
+ # silent pass. An unconfirmed result is not a pass.
789
+ exit_code = (
790
+ 0
791
+ if tests and all(t.get("status") not in ("fail", "unavailable") for t in tests)
792
+ else 1
793
+ )
786
794
  raw_output = "\n".join(
787
795
  f"{t.get('status')}: {t.get('id')} {t.get('message', '')}".rstrip()
788
796
  for t in tests
@@ -843,7 +851,14 @@ def _run_mac_native(run_command: str, cwd: str, entrypoint: str, *, timeout: int
843
851
  except MacNativeRuntimeError as e:
844
852
  raise DriverError(f"mac-native driver could not run: {e}") from e
845
853
 
846
- exit_code = 0 if tests and all(t.get("status") != "fail" for t in tests) else 1
854
+ # #3510: a locked/absent GUI session reports a distinct "unavailable"
855
+ # status (coord.mac_native_driver's session precheck), not "fail" —
856
+ # it must still fail this exit code rather than read as a silent pass.
857
+ exit_code = (
858
+ 0
859
+ if tests and all(t.get("status") not in ("fail", "unavailable") for t in tests)
860
+ else 1
861
+ )
847
862
  raw_output = "\n".join(
848
863
  f"{t.get('status')}: {t.get('id')} {t.get('message', '')}".rstrip()
849
864
  for t in tests
@@ -904,7 +919,15 @@ def _run_gtk_native(run_command: str, cwd: str, entrypoint: str, *, timeout: int
904
919
  except GtkNativeRuntimeError as e:
905
920
  raise DriverError(f"gtk-native driver could not run: {e}") from e
906
921
 
907
- exit_code = 0 if tests and all(t.get("status") != "fail" for t in tests) else 1
922
+ # #3510: a missing $DISPLAY/$WAYLAND_DISPLAY reports a distinct
923
+ # "unavailable" status (coord.gtk_native_driver's session precheck),
924
+ # not "fail" — it must still fail this exit code rather than read as a
925
+ # silent pass.
926
+ exit_code = (
927
+ 0
928
+ if tests and all(t.get("status") not in ("fail", "unavailable") for t in tests)
929
+ else 1
930
+ )
908
931
  raw_output = "\n".join(
909
932
  f"{t.get('status')}: {t.get('id')} {t.get('message', '')}".rstrip()
910
933
  for t in tests
@@ -45,6 +45,20 @@ routing does — a lane only exists when some configured machine actually
45
45
  carries the driver's declared ``capability``, so a repo with no capable
46
46
  machine for a platform silently gets no lane rather than a lane that can
47
47
  never run.
48
+
49
+ **#3510: an unavailable lane is not a bug finding.** When a win-native/
50
+ mac-native/gtk-native lane's own driver reports a locked or absent GUI
51
+ session (or no usable display), an explorer that sets
52
+ :attr:`ExploreOutcome.unavailable` causes :func:`run_bugbash` to skip that
53
+ lane for the round (:attr:`RoundReport.unavailable_lanes`) rather than
54
+ running the exploration checklist against it or filing any finding from it
55
+ — a locked desktop is an environment condition for the operator to fix,
56
+ not evidence of an app bug. This engine-level behavior is unit-tested
57
+ against a fake explorer in ``tests/test_bugbash.py``; the production
58
+ explorer (:func:`coord.commands.bugbash._dispatch_and_await_lane`) does
59
+ not itself set ``unavailable`` yet — see its own module docstring's
60
+ "KNOWN GAP" note — so a live ``coord bugbash`` run does not currently
61
+ benefit from this skip until that wiring lands.
48
62
  """
49
63
 
50
64
  from __future__ import annotations
@@ -426,12 +440,31 @@ class ExploreOutcome:
426
440
  there were findings," the second means "we looked, and there weren't
427
441
  any" — :func:`run_bugbash` keeps them distinguishable in
428
442
  :attr:`RoundReport.lane_failures` and its termination reason, rather
429
- than collapsing both into "zero findings"."""
443
+ than collapsing both into "zero findings".
444
+
445
+ ``unavailable`` is a THIRD, separate outcome (#3510): the lane's own
446
+ native driver observed a locked/absent GUI session (win-native/
447
+ mac-native) or no usable display (gtk-native) and ran no exploration at
448
+ all — a host/environment condition, never a bug finding and never a
449
+ dispatch/poll failure. An explorer that sets ``unavailable=True`` (as
450
+ the fake explorers in ``tests/test_bugbash.py`` do, modeling a
451
+ dispatched worker whose Tier-2 lane result came back
452
+ ``status="unavailable"`` — see ``coord.win_native_driver``'s/
453
+ ``coord.mac_native_driver``'s/``coord.gtk_native_driver``'s own
454
+ precheck) causes :func:`run_bugbash` to skip that lane for the round —
455
+ recording it in :attr:`RoundReport.unavailable_lanes` instead of
456
+ :attr:`RoundReport.lane_failures` — and never file findings from it
457
+ this round, even defensively, regardless of what ``findings`` carries.
458
+ The production explorer,
459
+ :func:`coord.commands.bugbash._dispatch_and_await_lane`, does not yet
460
+ set this flag (tracked as a KNOWN GAP in that module's docstring) —
461
+ today this is exercised only at the engine/unit-test level."""
430
462
 
431
463
  findings: tuple[Finding, ...] = ()
432
464
  cost: float = 0.0
433
465
  notes: str = ""
434
466
  ok: bool = True
467
+ unavailable: bool = False
435
468
 
436
469
 
437
470
  #: ``(lane, round_num) -> ExploreOutcome`` — "go run this lane's
@@ -628,6 +661,16 @@ class RoundReport:
628
661
  #: a lane skipped for having blown its per-lane cost cap was never
629
662
  #: asked a question this round, so it can't have failed to answer one).
630
663
  lane_failures: dict[str, str] = field(default_factory=dict)
664
+ #: ``{platform: notes}`` for every lane explored this round whose
665
+ #: :attr:`ExploreOutcome.unavailable` was ``True`` (#3510) — a locked or
666
+ #: absent GUI session (win-native/mac-native) or no usable display
667
+ #: (gtk-native). Distinct from :attr:`lane_failures`: this is a verified
668
+ #: observation (the native driver's own session precheck ran and
669
+ #: reported it), not a dispatch/poll/log failure — but it is ALSO not a
670
+ #: verified "ran the checklist and found nothing" either, so it is
671
+ #: tracked separately rather than folded into either bucket. No
672
+ #: findings are ever filed from a lane recorded here this round.
673
+ unavailable_lanes: dict[str, str] = field(default_factory=dict)
631
674
 
632
675
  @property
633
676
  def explored_lanes(self) -> set[str]:
@@ -643,10 +686,27 @@ class RoundReport:
643
686
  not a clean pass" signal (#2096). A round with nothing explored at
644
687
  all (e.g. every lane skipped on its cost cap) is NOT reported as
645
688
  "all failed" — there is nothing to distrust, just nothing that
646
- ran."""
689
+ ran. Does NOT count an ``unavailable`` lane as failed — see
690
+ :attr:`all_explored_lanes_unavailable_or_failed` for the combined
691
+ check."""
647
692
  explored = self.explored_lanes
648
693
  return bool(explored) and explored <= set(self.lane_failures)
649
694
 
695
+ @property
696
+ def all_explored_lanes_unavailable_or_failed(self) -> bool:
697
+ """``True`` when every lane explored this round either failed to
698
+ dispatch/poll/log OR reported its GUI session/display unavailable
699
+ (#3510) — i.e. NONE of them actually ran the exploration checklist.
700
+ Used by :func:`run_bugbash` to pick the ``"lanes_unavailable"``
701
+ termination reason over a false ``"zero_findings"`` clean-pass read
702
+ when every lane this round was simply locked/absent rather than
703
+ genuinely explored (#2096: zero findings is only a clean pass when
704
+ something was actually observed to run)."""
705
+ explored = self.explored_lanes
706
+ return bool(explored) and explored <= (
707
+ set(self.lane_failures) | set(self.unavailable_lanes)
708
+ )
709
+
650
710
 
651
711
  @dataclass
652
712
  class BugbashReport:
@@ -677,6 +737,15 @@ class BugbashReport:
677
737
  part of what it observed along the way was unverified (#2096)."""
678
738
  return any(r.lane_failures for r in self.rounds)
679
739
 
740
+ @property
741
+ def any_lane_unavailable(self) -> bool:
742
+ """``True`` if ANY round recorded a lane as unavailable (#3510) —
743
+ surfaced regardless of whether it happened to be the terminating
744
+ round, so an operator glancing at a run that otherwise filed/found
745
+ plenty still sees that one platform was locked/absent the whole
746
+ time and needs attention, not a bug report."""
747
+ return any(r.unavailable_lanes for r in self.rounds)
748
+
680
749
 
681
750
  def run_bugbash(
682
751
  config: BugbashConfig,
@@ -701,14 +770,24 @@ def run_bugbash(
701
770
  ``new_count``/cost, never inferred from "no exception was raised":
702
771
 
703
772
  - ``"zero_findings"`` — this round's non-duplicate finding count is 0,
704
- AND at least one explored lane actually completed
705
- (``RoundReport.all_explored_lanes_failed`` is ``False``) — a genuine
706
- observed clean pass.
773
+ AND at least one explored lane actually completed its checklist
774
+ (neither ``RoundReport.all_explored_lanes_failed`` nor
775
+ ``RoundReport.all_explored_lanes_unavailable_or_failed`` is ``True``)
776
+ — a genuine observed clean pass.
707
777
  - ``"lane_failure"`` — this round's non-duplicate finding count is ALSO
708
778
  0, but every lane explored this round came back ``ok=False``
709
779
  (dispatch/poll/log failure) — #2096: a fleet-wide dispatch outage
710
780
  must never be reported identically to a clean bugbash pass. Check
711
781
  ``BugbashReport.rounds[-1].lane_failures`` for what actually broke.
782
+ - ``"lanes_unavailable"`` — this round's non-duplicate finding count is
783
+ ALSO 0, no lane came back a dispatch/poll/log failure, but every lane
784
+ explored this round reported its GUI session/display unavailable
785
+ (#3510: locked or absent, e.g. a locked dell64) — a different reason
786
+ from ``"lane_failure"`` (the explorer DID run and DID get a verified
787
+ answer, it's just "the host is locked", not "I don't know"), and
788
+ still not a clean pass either, since nothing was actually exercised
789
+ against the app. Check ``BugbashReport.rounds[-1].unavailable_lanes``
790
+ for which host needs unlocking.
712
791
  - ``"cost_cap"`` — cumulative cost has reached ``cost_cap_total``.
713
792
  - ``"round_cap"`` — ``config.max_rounds`` rounds ran without either of
714
793
  the above firing.
@@ -730,6 +809,16 @@ def run_bugbash(
730
809
  lane_cost[lane.platform] += outcome.cost
731
810
  report.lane_cost[lane.platform] = lane_cost[lane.platform]
732
811
  total_cost += outcome.cost
812
+ if outcome.unavailable:
813
+ # #3510: a locked/absent GUI session (or missing display)
814
+ # is a host condition, not a finding — recorded separately
815
+ # from both a clean pass and a dispatch/poll failure, and
816
+ # NEVER contributes findings this round, even defensively
817
+ # if the explorer happened to also hand some back.
818
+ report.unavailable_lanes[lane.platform] = (
819
+ outcome.notes or "lane unavailable — no usable GUI session/display"
820
+ )
821
+ continue
733
822
  report.findings.extend(outcome.findings)
734
823
  if not outcome.ok:
735
824
  # #2096: this lane's "findings" (almost certainly empty) are
@@ -788,11 +877,20 @@ def run_bugbash(
788
877
 
789
878
  if report.new_count == 0:
790
879
  # #2096: "zero findings" is only a genuine clean-pass verdict
791
- # when at least one lane was actually verified to have run this
792
- # round. A round where every explored lane failed to dispatch,
793
- # poll, or fetch its log gets its own distinct reason instead —
794
- # see RoundReport.lane_failures for what broke.
795
- reason = "lane_failure" if report.all_explored_lanes_failed else "zero_findings"
880
+ # when at least one lane was actually verified to have RUN THE
881
+ # CHECKLIST this round. A round where every explored lane failed
882
+ # to dispatch/poll/fetch its log gets "lane_failure"; a round
883
+ # where every explored lane instead reported its session/display
884
+ # unavailable (#3510 — locked or absent, never a dispatch
885
+ # failure) gets its own distinct "lanes_unavailable" reason, in
886
+ # that priority order since a round can't be "all failed" AND
887
+ # "all unavailable" (each lane only sets one of the two).
888
+ if report.all_explored_lanes_failed:
889
+ reason = "lane_failure"
890
+ elif report.all_explored_lanes_unavailable_or_failed:
891
+ reason = "lanes_unavailable"
892
+ else:
893
+ reason = "zero_findings"
796
894
  break
797
895
  if total_cost >= config.cost_cap_total:
798
896
  reason = "cost_cap"
@@ -4551,6 +4551,12 @@ def _load_release_gate_observations(
4551
4551
  passed=_require_bool(entry["passed"], field_name="lanes[].passed"),
4552
4552
  detail=entry.get("detail", ""),
4553
4553
  checked_at=entry.get("checked_at"),
4554
+ # #3510: a locked/absent GUI session or missing display, as
4555
+ # reported by the native driver's own session precheck — never
4556
+ # coerced from a truthy non-bool, same discipline as `passed`.
4557
+ unavailable=_require_bool(
4558
+ entry.get("unavailable", False), field_name="lanes[].unavailable",
4559
+ ),
4554
4560
  )
4555
4561
  for entry in payload.get("lanes", []) or []
4556
4562
  ]
@@ -4576,7 +4582,10 @@ def _gate_verdict_to_dict(verdict: "Any") -> dict[str, Any]:
4576
4582
  "gate_passed": verdict.gate_passed,
4577
4583
  "effective_passed": verdict.effective_passed,
4578
4584
  "steps": [
4579
- {"name": s.name, "passed": s.passed, "detail": s.detail}
4585
+ {
4586
+ "name": s.name, "passed": s.passed, "detail": s.detail,
4587
+ "unavailable": s.unavailable,
4588
+ }
4580
4589
  for s in verdict.steps
4581
4590
  ],
4582
4591
  "override": None if verdict.override is None else {
@@ -4590,7 +4599,15 @@ def _gate_verdict_to_dict(verdict: "Any") -> dict[str, Any]:
4590
4599
  def _render_gate_verdict(verdict: "Any") -> str:
4591
4600
  lines = [f"release gate: {verdict.repo} @ {verdict.release_sha}"]
4592
4601
  for step in verdict.steps:
4593
- marker = "PASS" if step.passed else "FAIL"
4602
+ # #3510: a locked/absent GUI session is blocking but is NOT the app
4603
+ # failing — labeled distinctly so an operator knows to unlock the
4604
+ # host rather than go debug the app.
4605
+ if step.unavailable:
4606
+ marker = "UNAVAILABLE"
4607
+ elif step.passed:
4608
+ marker = "PASS"
4609
+ else:
4610
+ marker = "FAIL"
4594
4611
  lines.append(f" [{marker}] {step.name}: {step.detail}")
4595
4612
  if verdict.override is not None:
4596
4613
  lines.append(
@@ -106,6 +106,18 @@ child. See ``tests/test_gtk_native_driver.py``'s
106
106
  regression guard, mirroring :mod:`coord.win_native_driver`'s
107
107
  ``test_no_image_name_kill_path_exists_in_the_module`` and
108
108
  :mod:`coord.mac_native_driver`'s own equivalent.
109
+
110
+ **Missing-display precheck (#3510).** Unlike ``win-native``/``mac-native``,
111
+ a missing display here means no ``$DISPLAY``/``$WAYLAND_DISPLAY`` at all —
112
+ no Xvfb/compositor session is up on this host. That's a host-provisioning
113
+ condition, not an app bug, so before :meth:`NativeRunner.run` launches
114
+ anything it calls :meth:`GtkCalls.session_available`. When unavailable, the
115
+ run returns a single ``status="unavailable"`` result — never a ``"fail"``
116
+ — and no step (not even ``launch``) runs. ``LinuxGtkCalls`` itself no
117
+ longer raises at construction time for a missing display (that check moved
118
+ into :meth:`LinuxGtkCalls.session_available` so it's always reachable
119
+ through the seam, including from a fake in tests) — only a non-Linux host
120
+ is still a construction-time :class:`GtkNativeRuntimeError`.
109
121
  """
110
122
 
111
123
  from __future__ import annotations
@@ -129,10 +141,12 @@ class GtkNativeSpecError(Exception):
129
141
 
130
142
 
131
143
  class GtkNativeRuntimeError(Exception):
132
- """Raised when the native driver itself can't run: not on Linux, no
133
- ``$DISPLAY`` available, a missing ``xdotool``/``xwd`` binary or AT-SPI
134
- binding, the launched process/window never appearing, or a step
135
- referencing a window before any ``launch`` step ran."""
144
+ """Raised when the native driver itself can't run: not on Linux, a
145
+ missing ``xdotool``/``xwd`` binary or AT-SPI binding, the launched
146
+ process/window never appearing, or a step referencing a window before
147
+ any ``launch`` step ran. A missing ``$DISPLAY``/``$WAYLAND_DISPLAY`` is
148
+ NOT one of these (#3510) — that is an "unavailable" lane verdict via
149
+ :meth:`GtkCalls.session_available`, never a raised exception."""
136
150
 
137
151
 
138
152
  # ── native spec model ───────────────────────────────────────────────────────
@@ -314,6 +328,16 @@ class GtkCalls(Protocol):
314
328
 
315
329
  def kill(self, pid: int) -> None: ...
316
330
 
331
+ def session_available(self) -> tuple[bool, str]:
332
+ """``(True, "")`` when a usable display is present for this driver
333
+ to launch into; ``(False, reason)`` when neither ``$DISPLAY`` nor
334
+ ``$WAYLAND_DISPLAY`` is set (#3510) — checked by
335
+ :meth:`NativeRunner.run` BEFORE any step (including ``launch``)
336
+ runs, so a missing display is reported as ``status="unavailable"``
337
+ rather than a failed step. Never raises — a probe failure here is
338
+ itself an "unavailable" verdict, not a crash."""
339
+ ...
340
+
317
341
 
318
342
  def _find_a11y_match(elements: list[dict], role: str, name: str) -> dict | None:
319
343
  """The first *elements* entry whose ``role`` matches exactly
@@ -368,7 +392,19 @@ class NativeRunner:
368
392
  self._window_id: int | None = None
369
393
 
370
394
  def run(self, spec: NativeSpec) -> list[dict]:
395
+ """Run *spec*, first checking :meth:`GtkCalls.session_available`
396
+ (#3510). A missing display is a host-provisioning condition, not an
397
+ app bug: when unavailable, this returns a single
398
+ ``status="unavailable"`` entry and runs NO step at all (not even
399
+ ``launch``) — never folding it into an ordinary ``"fail"``."""
371
400
  self._spec = spec
401
+ available, reason = self._calls.session_available()
402
+ if not available:
403
+ return [{
404
+ "id": "session",
405
+ "status": "unavailable",
406
+ "message": reason or "no usable display is available",
407
+ }]
372
408
  results: list[dict] = []
373
409
  try:
374
410
  for step in spec.steps:
@@ -557,12 +593,14 @@ class LinuxGtkCalls:
557
593
  ``python3-gi``) for the accessibility tree, and ``xwd`` (ships with every
558
594
  X11 install) for window captures.
559
595
 
560
- Linux-only, and requires a live ``$DISPLAY``: raises
561
- :class:`GtkNativeRuntimeError` at construction otherwise, mirroring
562
- :class:`coord.mac_native_driver.MacOSCalls`'s/
563
- :class:`coord.win_native_driver.Win32Calls`'s own platform guards. This
564
- driver never starts its own ``Xvfb`` — see the module docstring's
565
- "headless by construction" note.
596
+ Linux-only: raises :class:`GtkNativeRuntimeError` at construction on any
597
+ other platform, mirroring :class:`coord.mac_native_driver.MacOSCalls`'s/
598
+ :class:`coord.win_native_driver.Win32Calls`'s own platform guards. A
599
+ missing ``$DISPLAY``/``$WAYLAND_DISPLAY`` is NOT a construction-time
600
+ raise (#3510) — see :meth:`session_available`, checked by
601
+ :class:`NativeRunner` before any step runs. This driver never starts its
602
+ own ``Xvfb`` — see the module docstring's "headless by construction"
603
+ note.
566
604
  """
567
605
 
568
606
  def __init__(self) -> None:
@@ -572,11 +610,25 @@ class LinuxGtkCalls:
572
610
  "runs on a real Linux host with a display (e.g. a fleet "
573
611
  "host running a persistent Xvfb session)"
574
612
  )
575
- if not os.environ.get("DISPLAY"):
576
- raise GtkNativeRuntimeError(
577
- "gtk-native needs $DISPLAY set — no headless compositor or "
578
- "Xvfb session appears to be running on this host"
579
- )
613
+ # Deliberately NOT a construction-time raise for a missing display
614
+ # (#3510) — that is an "unavailable" lane verdict, not a driver
615
+ # construction failure, and is checked (and reachable through the
616
+ # same `GtkCalls` seam a test's fake implements) via
617
+ # :meth:`session_available`, called by `NativeRunner.run` before any
618
+ # step — see the module docstring's "missing-display precheck".
619
+
620
+ # -- session precheck (#3510) --
621
+
622
+ def session_available(self) -> tuple[bool, str]:
623
+ """Real check: either ``$DISPLAY`` (X11) or ``$WAYLAND_DISPLAY``
624
+ (Wayland) must be set — no headless compositor or Xvfb session
625
+ appears to be running on this host otherwise."""
626
+ if os.environ.get("DISPLAY") or os.environ.get("WAYLAND_DISPLAY"):
627
+ return True, ""
628
+ return False, (
629
+ "neither $DISPLAY nor $WAYLAND_DISPLAY is set — no headless "
630
+ "compositor or Xvfb session appears to be running on this host"
631
+ )
580
632
 
581
633
  # -- process lifecycle --
582
634
 
@@ -772,6 +824,12 @@ def run_native_spec(
772
824
  assertion fails) do NOT raise — they're folded into the returned list
773
825
  as a ``status="fail"`` entry, the same "partial results, not a crash"
774
826
  contract :func:`coord.mac_native_driver.run_native_spec` already gives.
827
+
828
+ When *calls* reports no usable display
829
+ (:meth:`GtkCalls.session_available`, #3510), the returned list is a
830
+ single ``status="unavailable"`` entry and no step runs — a distinct
831
+ verdict from ``"fail"``, since a missing display is a host-provisioning
832
+ condition, not an app bug.
775
833
  """
776
834
  spec = parse_native_spec(spec_text)
777
835
  resolved_calls = calls if calls is not None else LinuxGtkCalls()
@@ -84,6 +84,16 @@ own child. See ``tests/test_mac_native_driver.py``'s
84
84
  ``test_no_name_based_kill_path_exists_in_the_module`` — a source-level
85
85
  regression guard, mirroring :mod:`coord.win_native_driver`'s own
86
86
  ``test_no_image_name_kill_path_exists_in_the_module``.
87
+
88
+ **Locked/absent session precheck (#3510).** The same vimcode#1629 class of
89
+ problem applies here: a locked screen or no GUI session (headless/SSH-only)
90
+ is an environment condition, not an app bug. Before :meth:`NativeRunner.run`
91
+ launches anything it calls :meth:`MacCalls.session_available` — real check:
92
+ ``CGSessionCopyCurrentDictionary`` must return a session, with
93
+ ``CGSSessionScreenIsLocked`` false and ``kCGSessionOnConsoleKey`` true. When
94
+ unavailable, the run returns a single ``status="unavailable"`` result —
95
+ never a ``"fail"`` — and no step (not even ``launch``) runs. See
96
+ :mod:`coord.win_native_driver`'s own module docstring for the same shape.
87
97
  """
88
98
 
89
99
  from __future__ import annotations
@@ -293,6 +303,17 @@ class MacCalls(Protocol):
293
303
 
294
304
  def kill(self, pid: int) -> None: ...
295
305
 
306
+ def session_available(self) -> tuple[bool, str]:
307
+ """``(True, "")`` when an unlocked GUI session is present for this
308
+ driver to launch into; ``(False, reason)`` when the screen is
309
+ locked or no GUI session exists (#3510) — checked by
310
+ :meth:`NativeRunner.run` BEFORE any step (including ``launch``)
311
+ runs, so a locked/absent session is reported as
312
+ ``status="unavailable"`` rather than a failed step. Never raises —
313
+ a probe failure here is itself an "unavailable" verdict, not a
314
+ crash."""
315
+ ...
316
+
296
317
 
297
318
  def _find_a11y_match(elements: list[dict], role: str, name: str) -> dict | None:
298
319
  """The first *elements* entry whose ``role`` matches exactly
@@ -345,7 +366,19 @@ class NativeRunner:
345
366
  self._window_id: int | None = None
346
367
 
347
368
  def run(self, spec: NativeSpec) -> list[dict]:
369
+ """Run *spec*, first checking :meth:`MacCalls.session_available`
370
+ (#3510). A locked screen or absent GUI session is an environment
371
+ condition, not an app bug: when unavailable, this returns a single
372
+ ``status="unavailable"`` entry and runs NO step at all (not even
373
+ ``launch``) — never folding it into an ordinary ``"fail"``."""
348
374
  self._spec = spec
375
+ available, reason = self._calls.session_available()
376
+ if not available:
377
+ return [{
378
+ "id": "session",
379
+ "status": "unavailable",
380
+ "message": reason or "no unlocked GUI session is available",
381
+ }]
349
382
  results: list[dict] = []
350
383
  try:
351
384
  for step in spec.steps:
@@ -577,6 +610,31 @@ class MacOSCalls:
577
610
  except ProcessLookupError:
578
611
  pass
579
612
 
613
+ # -- session precheck (#3510) --
614
+
615
+ def session_available(self) -> tuple[bool, str]:
616
+ """Real check: ``CGSessionCopyCurrentDictionary`` must return an
617
+ actual session dictionary (``None``/empty means no GUI session is
618
+ logged in at all — headless or SSH-only), its
619
+ ``CGSSessionScreenIsLocked`` key must be false, and its
620
+ ``kCGSessionOnConsoleKey`` must be true (fast-user-switched-away
621
+ sessions are not on the console)."""
622
+ quartz = self._quartz
623
+ session_info = quartz.CGSessionCopyCurrentDictionary()
624
+ if not session_info:
625
+ return False, (
626
+ "CGSessionCopyCurrentDictionary returned no session — no "
627
+ "GUI session is active on this host (headless, SSH-only, "
628
+ "or nobody logged in)"
629
+ )
630
+ if bool(session_info.get("CGSSessionScreenIsLocked", False)):
631
+ return False, "the screen is locked (CGSSessionScreenIsLocked)"
632
+ if not bool(session_info.get("kCGSessionOnConsoleKey", True)):
633
+ return False, (
634
+ "the session is not on the console (fast user switched away)"
635
+ )
636
+ return True, ""
637
+
580
638
  def find_top_window(self, pid: int, timeout_s: float) -> int:
581
639
  quartz = self._quartz
582
640
  deadline = time.monotonic() + timeout_s
@@ -785,6 +843,12 @@ def run_native_spec(
785
843
  assertion fails) do NOT raise — they're folded into the returned list
786
844
  as a ``status="fail"`` entry, the same "partial results, not a crash"
787
845
  contract :func:`coord.win_native_driver.run_native_spec` already gives.
846
+
847
+ When *calls* reports a locked screen or no GUI session
848
+ (:meth:`MacCalls.session_available`, #3510), the returned list is a
849
+ single ``status="unavailable"`` entry and no step runs — a distinct
850
+ verdict from ``"fail"``, since a locked screen is an environment
851
+ condition, not an app bug.
788
852
  """
789
853
  spec = parse_native_spec(spec_text)
790
854
  resolved_calls = calls if calls is not None else MacOSCalls()