code-coordinator 0.5.538__tar.gz → 0.5.540__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 (912) hide show
  1. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/code_coordinator.egg-info/SOURCES.txt +1 -0
  4. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/code_coordinator.egg-info/scm_file_list.json +1 -0
  5. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/code_coordinator.egg-info/scm_version.json +2 -2
  6. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/smoke.py +25 -109
  7. code_coordinator-0.5.540/coord/smoke_tags.py +140 -0
  8. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/stage_projection.py +88 -2
  9. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/scripts/fleet_watchdog.py +6 -1
  10. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_fleet_watchdog.py +56 -0
  11. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_stage_projection.py +174 -0
  12. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/.claude/commands/board.md +0 -0
  13. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/.claude/commands/complete-session.md +0 -0
  14. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/.claude/commands/coordinator.md +0 -0
  15. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/.githooks/_lib.sh +0 -0
  16. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/.githooks/post-checkout +0 -0
  17. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/.githooks/post-commit +0 -0
  18. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/.githooks/post-merge +0 -0
  19. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  20. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/.github/coord-ci-acceptance.yml +0 -0
  21. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/.github/workflows/auto-release.yml +0 -0
  22. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/.github/workflows/publish.yml +0 -0
  23. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/.github/workflows/test.yml +0 -0
  24. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/.gitignore +0 -0
  25. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/CLAUDE.md +0 -0
  26. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/GOAL.md +0 -0
  27. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/LICENSE +0 -0
  28. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/MANIFEST.in +0 -0
  29. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/README.md +0 -0
  30. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/code_coordinator.egg-info/dependency_links.txt +0 -0
  31. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/code_coordinator.egg-info/entry_points.txt +0 -0
  32. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/code_coordinator.egg-info/requires.txt +0 -0
  33. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/code_coordinator.egg-info/top_level.txt +0 -0
  34. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/__init__.py +0 -0
  35. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/_board_mapping.py +0 -0
  36. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/acceptance.py +0 -0
  37. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/acceptance_drivers.py +0 -0
  38. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/agent.py +0 -0
  39. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/agent_app.py +0 -0
  40. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/agent_update.py +0 -0
  41. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/agents/opencode/.gitignore +0 -0
  42. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/agents/opencode/agents/work.md +0 -0
  43. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/agents/opencode/routing.jsonc +0 -0
  44. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/approved_work.py +0 -0
  45. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/audit.py +0 -0
  46. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/auto_loop.py +0 -0
  47. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/backup.py +0 -0
  48. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/block_log.py +0 -0
  49. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/board_schema.py +0 -0
  50. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/board_service.py +0 -0
  51. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/board_wire.py +0 -0
  52. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/brain.py +0 -0
  53. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/branch_model.py +0 -0
  54. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/bug_intake.py +0 -0
  55. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/cargo_cache.py +0 -0
  56. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/ci_fix.py +0 -0
  57. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/ci_github.py +0 -0
  58. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/ci_gitlab.py +0 -0
  59. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/ci_store.py +0 -0
  60. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/claim.py +0 -0
  61. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/claude_setup_token.py +0 -0
  62. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/cli.py +0 -0
  63. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/client.py +0 -0
  64. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/codegen.py +0 -0
  65. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/commands/__init__.py +0 -0
  66. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/commands/_common.py +0 -0
  67. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/commands/acceptance.py +0 -0
  68. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/commands/agent_ops.py +0 -0
  69. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/commands/audit.py +0 -0
  70. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/commands/backup.py +0 -0
  71. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/commands/chat.py +0 -0
  72. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/commands/ci.py +0 -0
  73. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/commands/codegen.py +0 -0
  74. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/commands/dispatch.py +0 -0
  75. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/commands/dispatch_workers.py +0 -0
  76. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/commands/dr.py +0 -0
  77. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/commands/drive.py +0 -0
  78. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/commands/drive_queue.py +0 -0
  79. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/commands/gate_a.py +0 -0
  80. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/commands/gates.py +0 -0
  81. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/commands/issues.py +0 -0
  82. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/commands/lifecycle.py +0 -0
  83. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/commands/machine.py +0 -0
  84. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/commands/merge.py +0 -0
  85. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/commands/milestone.py +0 -0
  86. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/commands/plan_followup.py +0 -0
  87. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/commands/plans.py +0 -0
  88. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/commands/portal.py +0 -0
  89. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/commands/pr.py +0 -0
  90. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/commands/release.py +0 -0
  91. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/commands/repo.py +0 -0
  92. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/commands/report.py +0 -0
  93. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/commands/review.py +0 -0
  94. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/commands/scorecard.py +0 -0
  95. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/commands/sessions.py +0 -0
  96. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/commands/setup.py +0 -0
  97. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/commands/status.py +0 -0
  98. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/commands/store_migrate.py +0 -0
  99. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/commands/terminal.py +0 -0
  100. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/commands/test_gate.py +0 -0
  101. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/commands/tui.py +0 -0
  102. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/comments.py +0 -0
  103. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/config.py +0 -0
  104. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/config_reload.py +0 -0
  105. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/confirm_test.py +0 -0
  106. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/conflict_fix.py +0 -0
  107. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/dao.py +0 -0
  108. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/dashboard/__init__.py +0 -0
  109. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/dashboard/fixture.py +0 -0
  110. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/dashboard/index.html +0 -0
  111. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/dashboard/server.py +0 -0
  112. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/dashboard/terminal.py +0 -0
  113. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/db.py +0 -0
  114. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/dead_end.py +0 -0
  115. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/decomposition_chat.py +0 -0
  116. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/deploy/README.md +0 -0
  117. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/deploy/coord-agent.service +0 -0
  118. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/deploy/coord-backup.service +0 -0
  119. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/deploy/coord-backup.timer +0 -0
  120. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/deploy/coord-db-backup.service +0 -0
  121. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/deploy/coord-db-backup.sh +0 -0
  122. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/deploy/coord-db-backup.timer +0 -0
  123. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/deploy/coord-dr-verify.service +0 -0
  124. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/deploy/coord-dr-verify.timer +0 -0
  125. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/deploy/coord-drive-queue.service +0 -0
  126. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/deploy/coord-drive-queue.timer +0 -0
  127. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/deploy/coord-failure-notify.service +0 -0
  128. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/deploy/coord-fleet-watchdog.service +0 -0
  129. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/deploy/coord-fleet-watchdog.timer +0 -0
  130. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/deploy/coord-notify.service +0 -0
  131. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/deploy/coord-notify.timer +0 -0
  132. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/deploy/coord-release-propagate.service +0 -0
  133. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/deploy/coord-release-propagate.timer +0 -0
  134. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/deploy/coord-release-window.service +0 -0
  135. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/deploy/coord-release-window.timer +0 -0
  136. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/deploy/coord-serve.service +0 -0
  137. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/deploy/coord-web-dist-build.service +0 -0
  138. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/deploy/coord-web-dist-build.timer +0 -0
  139. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/deploy/coord-web.service +0 -0
  140. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/deploy_manifest.py +0 -0
  141. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/deploy_units.py +0 -0
  142. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/deprecation_telemetry.py +0 -0
  143. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/deps.py +0 -0
  144. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/diagnose.py +0 -0
  145. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/dispatch.py +0 -0
  146. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/dispatch_liveness.py +0 -0
  147. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/dist_name.py +0 -0
  148. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/dr_promote.py +0 -0
  149. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/dr_verify.py +0 -0
  150. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/drive.py +0 -0
  151. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/drive_queue.py +0 -0
  152. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/drive_sessions_snapshot.py +0 -0
  153. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/drive_state.py +0 -0
  154. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/events.py +0 -0
  155. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/failure_class.py +0 -0
  156. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/failure_classifier.py +0 -0
  157. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/filelock.py +0 -0
  158. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/fleet_config_health.py +0 -0
  159. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/forge_availability.py +0 -0
  160. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/freshness.py +0 -0
  161. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/gate_a.py +0 -0
  162. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/gate_b.py +0 -0
  163. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/gate_snapshot.py +0 -0
  164. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/gates.py +0 -0
  165. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/gen_board_fixture.py +0 -0
  166. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/github_ops.py +0 -0
  167. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/github_throttle.py +0 -0
  168. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/goal.py +0 -0
  169. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/graph_health.py +0 -0
  170. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/health/__init__.py +0 -0
  171. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/health/aggregate.py +0 -0
  172. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/health/checks/__init__.py +0 -0
  173. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/health/checks/_ci_pin.py +0 -0
  174. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/health/checks/agent_install.py +0 -0
  175. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/health/checks/cargo_targets.py +0 -0
  176. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/health/checks/claude_binary.py +0 -0
  177. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/health/checks/config_drift.py +0 -0
  178. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/health/checks/coord_tui_ci_pin.py +0 -0
  179. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/health/checks/coord_web_ci_pin.py +0 -0
  180. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/health/checks/deploy_lane_facts.py +0 -0
  181. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/health/checks/disk.py +0 -0
  182. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/health/checks/fleet_board.py +0 -0
  183. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  184. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/health/checks/fleet_phantom.py +0 -0
  185. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/health/checks/fleet_unit_drift.py +0 -0
  186. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/health/checks/graph.py +0 -0
  187. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/health/checks/graphify_cli.py +0 -0
  188. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/health/checks/index_lock.py +0 -0
  189. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/health/checks/issues_sync_staleness.py +0 -0
  190. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/health/checks/local_machine_identity.py +0 -0
  191. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/health/checks/plan_usage.py +0 -0
  192. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/health/checks/pr_churn.py +0 -0
  193. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/health/checks/release_cordon.py +0 -0
  194. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/health/checks/repo_state.py +0 -0
  195. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/health/checks/spawned_coord.py +0 -0
  196. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/health/checks/stalled_pipeline.py +0 -0
  197. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/health/checks/timer_active.py +0 -0
  198. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/health/checks/toolchain.py +0 -0
  199. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/health/checks/unit_drift.py +0 -0
  200. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/health/checks/unit_enablement.py +0 -0
  201. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/health/checks/wedged_drive_queue.py +0 -0
  202. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/health/checks/worktrees.py +0 -0
  203. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/health/cli.py +0 -0
  204. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/health/context.py +0 -0
  205. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/health/fleet_snapshot.py +0 -0
  206. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/health/models.py +0 -0
  207. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/health/pypi.py +0 -0
  208. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/health/registry.py +0 -0
  209. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/health/render.py +0 -0
  210. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/health/units.py +0 -0
  211. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/hooks.py +0 -0
  212. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/housekeeping.py +0 -0
  213. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/interactive.py +0 -0
  214. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/invariant_alarms.py +0 -0
  215. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/issue_store.py +0 -0
  216. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/issues_sync_status.py +0 -0
  217. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/liveness_auditor.py +0 -0
  218. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/machine_fault.py +0 -0
  219. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/machine_metrics.py +0 -0
  220. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/machine_onboard.py +0 -0
  221. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/machine_pause.py +0 -0
  222. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/machine_stats.py +0 -0
  223. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/merge_queue.py +0 -0
  224. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/milestone_chat.py +0 -0
  225. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/milestone_dispatch.py +0 -0
  226. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/milestone_gate.py +0 -0
  227. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/milestone_order.py +0 -0
  228. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/mock_author.py +0 -0
  229. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/models.py +0 -0
  230. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/network.py +0 -0
  231. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/new_issue_chat.py +0 -0
  232. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/notifier/__init__.py +0 -0
  233. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/notifier/baseline.py +0 -0
  234. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/notifier/cli.py +0 -0
  235. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/notifier/collect.py +0 -0
  236. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/notifier/digest.py +0 -0
  237. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/notifier/models.py +0 -0
  238. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/notifier/predicate.py +0 -0
  239. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/notifier/service.py +0 -0
  240. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/notifier/store.py +0 -0
  241. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/notifier/transport.py +0 -0
  242. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/notify.py +0 -0
  243. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/openapi.py +0 -0
  244. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/overlap_fence.py +0 -0
  245. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/overlap_predict.py +0 -0
  246. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/parentage.py +0 -0
  247. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/parentage_github.py +0 -0
  248. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/pipeline.py +0 -0
  249. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/plan_parser.py +0 -0
  250. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/plans.py +0 -0
  251. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/platform_paths.py +0 -0
  252. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/portal_bridge.py +0 -0
  253. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/portal_store.py +0 -0
  254. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/portal_sync.py +0 -0
  255. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/pr_body_lint.py +0 -0
  256. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/prereqs.py +0 -0
  257. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/progress.py +0 -0
  258. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/providers/__init__.py +0 -0
  259. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/providers/base.py +0 -0
  260. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/providers/claude.py +0 -0
  261. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/providers/claude_pty.py +0 -0
  262. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/providers/opencode.py +0 -0
  263. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/queue_diagnose.py +0 -0
  264. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/reconcile.py +0 -0
  265. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/reconcile_tick.py +0 -0
  266. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/refine_chat.py +0 -0
  267. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/release_cordon.py +0 -0
  268. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/release_propagate.py +0 -0
  269. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/release_verify.py +0 -0
  270. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/release_window.py +0 -0
  271. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/repo_dormancy.py +0 -0
  272. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/repo_edit.py +0 -0
  273. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/repo_onboard.py +0 -0
  274. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/reports.py +0 -0
  275. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/rest_schema.py +0 -0
  276. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/restart_cmd.py +0 -0
  277. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/revalidate.py +0 -0
  278. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/review.py +0 -0
  279. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/scorecard.py +0 -0
  280. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/self_health.py +0 -0
  281. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/serve_app.py +0 -0
  282. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  283. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  284. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  285. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  286. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  287. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/skills/portal-followup/SKILL.md +0 -0
  288. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/skills/release-now/SKILL.md +0 -0
  289. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  290. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  291. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/skills/update-issue/SKILL.md +0 -0
  292. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/spend_ceiling.py +0 -0
  293. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/split_work.py +0 -0
  294. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/sql.py +0 -0
  295. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/state.py +0 -0
  296. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/store_migrate.py +0 -0
  297. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/store_parity.py +0 -0
  298. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/templates/deploy-cloudflare.node.yml +0 -0
  299. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/test_author.py +0 -0
  300. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/test_chat.py +0 -0
  301. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/test_orchestrator.py +0 -0
  302. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/test_report.py +0 -0
  303. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/tui_release.py +0 -0
  304. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/uat_checks.py +0 -0
  305. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/usage.py +0 -0
  306. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/usage_limits.py +0 -0
  307. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/usage_rollup.py +0 -0
  308. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coord/worker_events.py +0 -0
  309. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/coordinator.example.yml +0 -0
  310. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/deploy/coord-agent.service +0 -0
  311. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/deploy/coord-backup.service +0 -0
  312. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/deploy/coord-backup.timer +0 -0
  313. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/deploy/coord-db-backup.service +0 -0
  314. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/deploy/coord-db-backup.sh +0 -0
  315. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/deploy/coord-db-backup.timer +0 -0
  316. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/deploy/coord-dr-verify.service +0 -0
  317. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/deploy/coord-dr-verify.timer +0 -0
  318. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/deploy/coord-drive-queue.service +0 -0
  319. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/deploy/coord-drive-queue.timer +0 -0
  320. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/deploy/coord-failure-notify.service +0 -0
  321. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/deploy/coord-failure-notify.sh +0 -0
  322. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/deploy/coord-fleet-watchdog.service +0 -0
  323. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/deploy/coord-fleet-watchdog.timer +0 -0
  324. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/deploy/coord-notify.service +0 -0
  325. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/deploy/coord-notify.timer +0 -0
  326. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/deploy/coord-release-propagate.service +0 -0
  327. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/deploy/coord-release-propagate.timer +0 -0
  328. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/deploy/coord-release-window.service +0 -0
  329. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/deploy/coord-release-window.timer +0 -0
  330. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/deploy/coord-serve.service +0 -0
  331. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/deploy/coord-web-dist-build.service +0 -0
  332. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/deploy/coord-web-dist-build.sh +0 -0
  333. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/deploy/coord-web-dist-build.timer +0 -0
  334. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/deploy/coord-web-rollback.sh +0 -0
  335. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/deploy/coord-web.service +0 -0
  336. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/deploy/node-shim.sh +0 -0
  337. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/docs/ADR_COORD_TUI_CI.md +0 -0
  338. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  339. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/docs/ADR_COORD_WEB_CI.md +0 -0
  340. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/docs/ADR_COORD_WEB_DIST.md +0 -0
  341. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
  342. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/docs/AGENT_OPERATIONS.md +0 -0
  343. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/docs/ARCHITECTURE.md +0 -0
  344. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/docs/ARCH_SECURITY_GATES.md +0 -0
  345. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/docs/COCKPIT.md +0 -0
  346. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/docs/CONTROL_CENTER.md +0 -0
  347. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/docs/COST_DISCIPLINE.md +0 -0
  348. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/docs/CROSS_PLATFORM.md +0 -0
  349. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/docs/CUSTOMER_FACING_APPS.md +0 -0
  350. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/docs/CUSTOMER_PORTAL.md +0 -0
  351. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/docs/DATA_STORE_SELECTION.md +0 -0
  352. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/docs/DISASTER_RECOVERY.md +0 -0
  353. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/docs/DRIVE_QUEUE.md +0 -0
  354. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/docs/EPHEMERAL_WORKERS.md +0 -0
  355. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/docs/FORGE_MIGRATION.md +0 -0
  356. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/docs/GRAPHIFY_SETUP.md +0 -0
  357. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/docs/ISSUE_GUIDANCE.md +0 -0
  358. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/docs/MAC_MINI.md +0 -0
  359. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  360. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/docs/NOTIFIER.md +0 -0
  361. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/docs/OPENCODE_VERIFICATION.md +0 -0
  362. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/docs/OPERATING_GOTCHAS.md +0 -0
  363. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/docs/OPERATOR_GUIDES.md +0 -0
  364. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/docs/ORACLE_LOOP.md +0 -0
  365. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/docs/PHONE_WEBAPP.md +0 -0
  366. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/docs/PIPELINE_V2.md +0 -0
  367. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/docs/PLATFORM_EVOLUTION.md +0 -0
  368. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/docs/SECOND_BACKEND.md +0 -0
  369. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/docs/STORE_SERVICE.md +0 -0
  370. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  371. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/docs/WEB_CONTROL_CENTER.md +0 -0
  372. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/docs/WSL_WINDOWS_WORKER.md +0 -0
  373. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/docs/mocks/web/README.md +0 -0
  374. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/docs/mocks/web/_tokens.css +0 -0
  375. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/docs/mocks/web/issue-detail.html +0 -0
  376. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/docs/mocks/web/pipeline-narrow.html +0 -0
  377. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/docs/mocks/web/pipeline-wide.html +0 -0
  378. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/graphify-out/.gitignore +0 -0
  379. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/install-agent.sh +0 -0
  380. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/pyproject.toml +0 -0
  381. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/scripts/audit_review_verdict_overrides.py +0 -0
  382. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  383. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/scripts/azure-workers/build-worker-image.sh +0 -0
  384. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/scripts/azure-workers/coordinator-machine.py +0 -0
  385. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/scripts/azure-workers/dr-down.sh +0 -0
  386. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/scripts/azure-workers/dr-up.sh +0 -0
  387. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/scripts/azure-workers/epic-down.sh +0 -0
  388. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/scripts/azure-workers/epic-up.sh +0 -0
  389. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/scripts/azure-workers/preflight.sh +0 -0
  390. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/scripts/azure-workers/provision-server.sh +0 -0
  391. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/scripts/azure-workers/provision-worker.sh +0 -0
  392. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  393. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  394. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/scripts/azure-workers/throwaway-vm.sh +0 -0
  395. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/scripts/azure-workers/verify-github-token.sh +0 -0
  396. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/scripts/check_gh_argv_containment.py +0 -0
  397. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/scripts/codegen.py +0 -0
  398. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/scripts/coord-test-runner.sh +0 -0
  399. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
  400. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
  401. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
  402. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
  403. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/scripts/coord-venv-rollback.sh +0 -0
  404. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/scripts/drive-batch.sh +0 -0
  405. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/scripts/extract-coord-tui.sh +0 -0
  406. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/scripts/gen_board_fixture.py +0 -0
  407. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/scripts/gen_mock_index.py +0 -0
  408. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/scripts/lib/provision-core.sh +0 -0
  409. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/scripts/next_release_tag.py +0 -0
  410. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/scripts/provision-machine.sh +0 -0
  411. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/scripts/run_tests_in_populated_home.sh +0 -0
  412. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/scripts/run_tests_without_gh.sh +0 -0
  413. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/scripts/setup-macmini.sh +0 -0
  414. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/scripts/smoke_437_interactive.py +0 -0
  415. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/scripts/verify-provision-noble.sh +0 -0
  416. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/scripts/verify_878_review_capture.py +0 -0
  417. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/scripts/verify_release_published.py +0 -0
  418. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/scripts/verify_release_wheel.py +0 -0
  419. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/setup.cfg +0 -0
  420. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/SMOKE_SET.md +0 -0
  421. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/__init__.py +0 -0
  422. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/acceptance/ms-37/conftest.py +0 -0
  423. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/acceptance/ms-37/contract.md +0 -0
  424. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/acceptance/ms-37/manifest.yml +0 -0
  425. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  426. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  427. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/acceptance/ms-51/contract.md +0 -0
  428. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  429. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  430. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/acceptance/ms-51/manifest.yml +0 -0
  431. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  432. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/acceptance/ms-51/tsconfig.json +0 -0
  433. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  434. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/backends.py +0 -0
  435. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/conftest.py +0 -0
  436. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/fixtures/board-pipeline-basic.json +0 -0
  437. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  438. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  439. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  440. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  441. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/fixtures/playwright/all_pass.json +0 -0
  442. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  443. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/fixtures/playwright/mixed_fail.json +0 -0
  444. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  445. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  446. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/fixtures/playwright/skip.json +0 -0
  447. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/fixtures/playwright/truncated.json +0 -0
  448. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  449. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  450. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  451. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  452. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/fixtures/test_report/pytest_error_log_record.txt +0 -0
  453. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  454. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  455. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  456. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  457. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_acceptance.py +0 -0
  458. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_acceptance_drivers.py +0 -0
  459. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_agent.py +0 -0
  460. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_agent_api_error.py +0 -0
  461. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_agent_app.py +0 -0
  462. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_agent_branch_base.py +0 -0
  463. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_agent_branch_capture.py +0 -0
  464. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_agent_config_free_1712.py +0 -0
  465. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_agent_deploy_units_endpoint.py +0 -0
  466. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_agent_dirty_worktree.py +0 -0
  467. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  468. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_agent_graph_self_heal.py +0 -0
  469. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_agent_health_h3.py +0 -0
  470. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_agent_idle_restart.py +0 -0
  471. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_agent_push_failure.py +0 -0
  472. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_agent_reap.py +0 -0
  473. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_agent_repos_and_pull.py +0 -0
  474. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_agent_restart_services_endpoint.py +0 -0
  475. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_agent_skills_self_heal.py +0 -0
  476. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_agent_startup_diagnostics.py +0 -0
  477. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_agent_update.py +0 -0
  478. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_agent_update_bluegreen.py +0 -0
  479. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_agent_usage_limit.py +0 -0
  480. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_agent_zero_commit.py +0 -0
  481. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_ambient_home_isolation.py +0 -0
  482. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_approve_capability_reroute_3241.py +0 -0
  483. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_approve_dependency_busy_2804.py +0 -0
  484. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_approve_reject_plan.py +0 -0
  485. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_approve_usage_gate.py +0 -0
  486. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_approved_work_2532.py +0 -0
  487. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_approved_work_2996.py +0 -0
  488. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_assignment_already_recorded_daemon.py +0 -0
  489. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_audit_log.py +0 -0
  490. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_audit_outcome.py +0 -0
  491. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_audit_query.py +0 -0
  492. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_auto_loop.py +0 -0
  493. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_auto_release_publish_2035.py +0 -0
  494. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_backend_selection.py +0 -0
  495. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_backup.py +0 -0
  496. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_base_checkout_restore.py +0 -0
  497. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_block_log.py +0 -0
  498. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_board_cap_762.py +0 -0
  499. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_board_fixture.py +0 -0
  500. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_board_read_path.py +0 -0
  501. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_board_schema.py +0 -0
  502. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_board_service.py +0 -0
  503. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_board_state.py +0 -0
  504. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_board_wire.py +0 -0
  505. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_brain.py +0 -0
  506. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_branch_model.py +0 -0
  507. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_bug_intake.py +0 -0
  508. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_build_worker_image_env_update.py +0 -0
  509. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cargo_cache.py +0 -0
  510. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_check_gh_argv_containment.py +0 -0
  511. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_ci_acceptance_gate_1950.py +0 -0
  512. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_ci_fix.py +0 -0
  513. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_ci_github.py +0 -0
  514. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_ci_gitlab.py +0 -0
  515. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_ci_parity_2091.py +0 -0
  516. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_ci_store.py +0 -0
  517. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_claim.py +0 -0
  518. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_claude_md_budget.py +0 -0
  519. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_claude_setup_token.py +0 -0
  520. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_acceptance.py +0 -0
  521. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_assign.py +0 -0
  522. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  523. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_assign_interactive_remote.py +0 -0
  524. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_assign_provider.py +0 -0
  525. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  526. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_audit.py +0 -0
  527. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_chat_continue.py +0 -0
  528. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_ci.py +0 -0
  529. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_codegen.py +0 -0
  530. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_decide.py +0 -0
  531. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_diagnose_capability_rules.py +0 -0
  532. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_diagnose_config_provenance.py +0 -0
  533. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_diagnose_forge_availability.py +0 -0
  534. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_diagnose_graph.py +0 -0
  535. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_diagnose_self.py +0 -0
  536. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_diagnose_test_coverage.py +0 -0
  537. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_doctor.py +0 -0
  538. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_doctor_config_free_1801.py +0 -0
  539. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  540. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_doctor_store_backend_3084.py +0 -0
  541. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_drive.py +0 -0
  542. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_drive_queue.py +0 -0
  543. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_escalate.py +0 -0
  544. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_fix_headless_review.py +0 -0
  545. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_gate_a.py +0 -0
  546. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_install_drift.py +0 -0
  547. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_install_skills.py +0 -0
  548. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_issue_comment.py +0 -0
  549. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_issue_create_label.py +0 -0
  550. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_issue_reopen.py +0 -0
  551. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_issue_view_list.py +0 -0
  552. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_issues.py +0 -0
  553. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_merge.py +0 -0
  554. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_milestone_assign.py +0 -0
  555. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_milestone_capture.py +0 -0
  556. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_milestone_chat_add_child.py +0 -0
  557. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_milestone_dispatch.py +0 -0
  558. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_milestone_gate_b.py +0 -0
  559. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_milestone_gate_c.py +0 -0
  560. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_milestone_order.py +0 -0
  561. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  562. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_milestone_ship.py +0 -0
  563. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_network.py +0 -0
  564. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_new_issue_chat.py +0 -0
  565. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_plans.py +0 -0
  566. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_portal.py +0 -0
  567. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_pr.py +0 -0
  568. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_pull_artifact.py +0 -0
  569. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_queue.py +0 -0
  570. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_reattach_sessions.py +0 -0
  571. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_refine_board.py +0 -0
  572. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_release_preflight.py +0 -0
  573. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_release_propagate.py +0 -0
  574. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_release_window.py +0 -0
  575. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_repo_2220.py +0 -0
  576. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
  577. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_scorecard.py +0 -0
  578. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_serve_store_backend_3084.py +0 -0
  579. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_set_review_findings.py +0 -0
  580. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_status_advisory_terminal.py +0 -0
  581. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_status_contested_tag.py +0 -0
  582. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_status_invariant_alarms.py +0 -0
  583. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_status_machine_fault.py +0 -0
  584. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_status_merge_queue.py +0 -0
  585. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_status_provider.py +0 -0
  586. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_status_retried_3340.py +0 -0
  587. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_status_review_finalizing.py +0 -0
  588. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_status_supervisor_3366.py +0 -0
  589. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_status_test_failed_tag.py +0 -0
  590. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_status_usage_limit.py +0 -0
  591. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_sync_comments_873.py +0 -0
  592. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_test_plan.py +0 -0
  593. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_track.py +0 -0
  594. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_tui_update.py +0 -0
  595. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cli_wait.py +0 -0
  596. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_client.py +0 -0
  597. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_client_base_install.py +0 -0
  598. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_client_config_cache_atomic_3052.py +0 -0
  599. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_client_resource_migration_1946.py +0 -0
  600. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_commands_common.py +0 -0
  601. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_comments.py +0 -0
  602. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_completion_summary.py +0 -0
  603. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_config.py +0 -0
  604. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_config_acceptance.py +0 -0
  605. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_config_audit.py +0 -0
  606. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_config_drift_check.py +0 -0
  607. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_config_effective.py +0 -0
  608. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_config_pricing.py +0 -0
  609. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  610. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_config_usage_gate.py +0 -0
  611. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_confirm_test.py +0 -0
  612. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_conflict_fix.py +0 -0
  613. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_conflict_fix_semantic.py +0 -0
  614. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
  615. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_coord_test.py +0 -0
  616. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
  617. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_coord_test_runner_baseline.py +0 -0
  618. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_coord_test_runner_populated_home.py +0 -0
  619. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_coord_test_runner_routing.py +0 -0
  620. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_coord_test_runner_toolchain.py +0 -0
  621. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_coord_uat.py +0 -0
  622. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_coord_web_sse_restart_live.py +0 -0
  623. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_coordinator_machine.py +0 -0
  624. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_cross_platform_imports.py +0 -0
  625. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_dao.py +0 -0
  626. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_dashboard.py +0 -0
  627. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_dashboard_api.py +0 -0
  628. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_dashboard_fixture.py +0 -0
  629. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_dashboard_server.py +0 -0
  630. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_dashboard_terminal.py +0 -0
  631. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_dashboard_terminal_live.py +0 -0
  632. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_db.py +0 -0
  633. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_dead_end.py +0 -0
  634. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_decomposition_chat.py +0 -0
  635. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_deploy_coord_db_backup.py +0 -0
  636. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_deploy_coord_web_dist.py +0 -0
  637. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_deploy_coord_web_rollback.py +0 -0
  638. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_deploy_db_backup_unit.py +0 -0
  639. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_deploy_drive_queue_unit.py +0 -0
  640. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_deploy_failure_notify_unit.py +0 -0
  641. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_deploy_manifest.py +0 -0
  642. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_deploy_notify_unit.py +0 -0
  643. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_deploy_units_lane.py +0 -0
  644. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_deploy_web_unit.py +0 -0
  645. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_deprecation_telemetry.py +0 -0
  646. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_deps.py +0 -0
  647. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_diagnose.py +0 -0
  648. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_dispatch.py +0 -0
  649. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_dispatch_liveness.py +0 -0
  650. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_dispatch_target_validation.py +0 -0
  651. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_dispatch_workers.py +0 -0
  652. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_dist_name.py +0 -0
  653. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_done_housekeeping.py +0 -0
  654. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_dr_azure_scripts.py +0 -0
  655. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_dr_promote.py +0 -0
  656. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_dr_verify.py +0 -0
  657. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_drive.py +0 -0
  658. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_drive_machine_fault.py +0 -0
  659. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_drive_queue.py +0 -0
  660. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_drive_queue_blocked_rendering.py +0 -0
  661. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_drive_queue_launch_argv.py +0 -0
  662. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_drive_queue_max_parallel_config.py +0 -0
  663. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
  664. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_drive_queue_roll_pending.py +0 -0
  665. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
  666. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_drive_sessions_snapshot.py +0 -0
  667. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_drive_state.py +0 -0
  668. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_drive_tmux.py +0 -0
  669. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_epic_up_capability_detection.py +0 -0
  670. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  671. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_epic_up_image_provenance.py +0 -0
  672. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_errors.py +0 -0
  673. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_events.py +0 -0
  674. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_failure_class.py +0 -0
  675. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_failure_classifier.py +0 -0
  676. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_filelock.py +0 -0
  677. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  678. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_fix_escalation_classifier.py +0 -0
  679. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_fix_of_force_override.py +0 -0
  680. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_fleet_config_health.py +0 -0
  681. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_fleet_health_probes.py +0 -0
  682. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_fleet_health_snapshot.py +0 -0
  683. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_forge_availability.py +0 -0
  684. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_freshness.py +0 -0
  685. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_gate_a.py +0 -0
  686. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_gate_b.py +0 -0
  687. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_gate_snapshot_staleness.py +0 -0
  688. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_gates.py +0 -0
  689. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  690. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_gen_mock_index.py +0 -0
  691. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_generated_rust_fixture.py +0 -0
  692. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_generated_rust_requests.py +0 -0
  693. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_generated_types_fixture.py +0 -0
  694. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_github_ops.py +0 -0
  695. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_github_throttle.py +0 -0
  696. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_goal.py +0 -0
  697. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_graph_health.py +0 -0
  698. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_graph_selfheal_absent_2237.py +0 -0
  699. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_handoff.py +0 -0
  700. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_health_checks.py +0 -0
  701. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_health_cli.py +0 -0
  702. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_health_cli_graph.py +0 -0
  703. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_health_config.py +0 -0
  704. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_health_context.py +0 -0
  705. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_health_coord_tui_ci_pin.py +0 -0
  706. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_health_coord_web_ci_pin.py +0 -0
  707. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_health_deploy_lane_facts.py +0 -0
  708. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_health_fix.py +0 -0
  709. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_health_incident_regression.py +0 -0
  710. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_health_issues_sync_staleness.py +0 -0
  711. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_health_pr_churn.py +0 -0
  712. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_health_pypi.py +0 -0
  713. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_health_registry.py +0 -0
  714. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_health_release_cordon_probe.py +0 -0
  715. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_health_timer_active.py +0 -0
  716. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_health_toolchain.py +0 -0
  717. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_health_unit_drift.py +0 -0
  718. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_health_unit_enablement.py +0 -0
  719. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_health_wedged_drive_queue.py +0 -0
  720. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_hooks.py +0 -0
  721. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_housekeeping.py +0 -0
  722. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_human_attended_437.py +0 -0
  723. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_init.py +0 -0
  724. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_install_agent_venv_2911.py +0 -0
  725. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_integration.py +0 -0
  726. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_interactive.py +0 -0
  727. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_interactive_briefing_echo.py +0 -0
  728. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_interactive_pane_log_2541.py +0 -0
  729. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_interactive_prefill_state.py +0 -0
  730. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_interactive_session_relaunch.py +0 -0
  731. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_interactive_test_verdict_backstop.py +0 -0
  732. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_interactive_token_attribution.py +0 -0
  733. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_interactive_worktree.py +0 -0
  734. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_invariant_alarms.py +0 -0
  735. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_issue_store_seam.py +0 -0
  736. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_issues_sync_status.py +0 -0
  737. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_liveness_auditor.py +0 -0
  738. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_liveness_notify.py +0 -0
  739. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_lock_contention_ratchet.py +0 -0
  740. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_machine_fault.py +0 -0
  741. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_machine_metrics.py +0 -0
  742. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_machine_onboard.py +0 -0
  743. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_machine_pause.py +0 -0
  744. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_machine_stats.py +0 -0
  745. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_merge_queue.py +0 -0
  746. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_merge_verify.py +0 -0
  747. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_milestone_chat.py +0 -0
  748. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_milestone_dispatch.py +0 -0
  749. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_milestone_gate.py +0 -0
  750. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_milestone_order.py +0 -0
  751. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_milestone_seam.py +0 -0
  752. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_mock_author.py +0 -0
  753. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_model_tiering.py +0 -0
  754. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_models.py +0 -0
  755. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_models_config_labels.py +0 -0
  756. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_needs_attention.py +0 -0
  757. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_network.py +0 -0
  758. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_new_issue_chat.py +0 -0
  759. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_next_release_tag.py +0 -0
  760. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_node_shim.py +0 -0
  761. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_notifier_baseline.py +0 -0
  762. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_notifier_cli.py +0 -0
  763. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_notifier_collect.py +0 -0
  764. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_notifier_config.py +0 -0
  765. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_notifier_drive_seam.py +0 -0
  766. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_notifier_isolation.py +0 -0
  767. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_notifier_predicate.py +0 -0
  768. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_notifier_quiet_hours.py +0 -0
  769. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_notifier_service.py +0 -0
  770. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_notify.py +0 -0
  771. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_notify_drain.py +0 -0
  772. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_openapi.py +0 -0
  773. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_operational_defaults.py +0 -0
  774. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_overlap_fence.py +0 -0
  775. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_overlap_predict.py +0 -0
  776. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_packaged_deploy_units.py +0 -0
  777. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_parentage.py +0 -0
  778. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_paste_landed.py +0 -0
  779. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
  780. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_pipeline.py +0 -0
  781. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_plan_followup_approve_plan_command.py +0 -0
  782. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_plan_followup_pr_command.py +0 -0
  783. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_plan_followup_review_command.py +0 -0
  784. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_plan_only.py +0 -0
  785. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_plan_parser.py +0 -0
  786. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_platform_paths.py +0 -0
  787. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_portal_bridge.py +0 -0
  788. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_portal_config.py +0 -0
  789. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_portal_store.py +0 -0
  790. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_portal_sync.py +0 -0
  791. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_pr_body_lint.py +0 -0
  792. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_prereqs.py +0 -0
  793. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_production_db_guard.py +0 -0
  794. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_progress.py +0 -0
  795. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_provider_seam.py +0 -0
  796. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_providers.py +0 -0
  797. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_providers_config_labels.py +0 -0
  798. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_providers_pty.py +0 -0
  799. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_provision_core.py +0 -0
  800. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_provision_machine.py +0 -0
  801. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_py_rust_mirror_inventory.py +0 -0
  802. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_quiet_hours.py +0 -0
  803. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_quiet_hours_store_2146.py +0 -0
  804. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_reap_merged_sessions.py +0 -0
  805. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_reap_stale_interactive_tick.py +0 -0
  806. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_reconcile.py +0 -0
  807. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_reconcile_branch.py +0 -0
  808. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_reconcile_completions.py +0 -0
  809. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
  810. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_reconcile_merges.py +0 -0
  811. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_reconcile_no_agent_record.py +0 -0
  812. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_reconcile_tick.py +0 -0
  813. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_reconcile_usage_limit_done.py +0 -0
  814. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_refine_chat.py +0 -0
  815. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_release_cordon_2101.py +0 -0
  816. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  817. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_release_cordon_deadlock_2240.py +0 -0
  818. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_release_cordon_drain_stall_3336.py +0 -0
  819. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_release_cordon_stuck_2490.py +0 -0
  820. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_release_propagate.py +0 -0
  821. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_release_propagate_threshold.py +0 -0
  822. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_release_roll_between_legs_2854.py +0 -0
  823. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_release_roll_window_handoff.py +0 -0
  824. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_release_unified_1242.py +0 -0
  825. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_release_verify.py +0 -0
  826. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_release_window.py +0 -0
  827. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_remote_auto_prune.py +0 -0
  828. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_remote_interactive_reaper.py +0 -0
  829. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_repo_add.py +0 -0
  830. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_repo_dormancy.py +0 -0
  831. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_repo_edit_2220.py +0 -0
  832. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_repo_graph_fleet_2237.py +0 -0
  833. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_repo_max_parallel_3423.py +0 -0
  834. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_repo_onboard_2220.py +0 -0
  835. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_report_result_push.py +0 -0
  836. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_reports.py +0 -0
  837. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_restart_cmd.py +0 -0
  838. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_retry.py +0 -0
  839. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_retry_advisory_1606.py +0 -0
  840. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_retry_escalation_classify_3360.py +0 -0
  841. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_retry_type_1636.py +0 -0
  842. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_revalidate.py +0 -0
  843. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_review.py +0 -0
  844. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_review_end_review_without_verdict.py +0 -0
  845. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_review_parse_failure_diagnostic.py +0 -0
  846. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_review_reaffirm.py +0 -0
  847. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_review_state.py +0 -0
  848. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_review_verdict_backstop.py +0 -0
  849. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_review_verdict_override_audit.py +0 -0
  850. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_review_verdict_relay.py +0 -0
  851. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_review_zero_commits.py +0 -0
  852. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_scoped_review_wiring.py +0 -0
  853. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_scorecard.py +0 -0
  854. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_self_health.py +0 -0
  855. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_serve.py +0 -0
  856. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_serve_app.py +0 -0
  857. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_serve_app_board_trim.py +0 -0
  858. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_serve_rest_routes.py +0 -0
  859. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_session.py +0 -0
  860. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_slice_issue_attribution.py +0 -0
  861. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_smoke.py +0 -0
  862. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_smoke_fanout_manifest_3333.py +0 -0
  863. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_smoke_live_checkout_restore.py +0 -0
  864. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_smoke_workflow.py +0 -0
  865. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_spend_ceiling.py +0 -0
  866. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_spend_ceiling_coordinator.py +0 -0
  867. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_split.py +0 -0
  868. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_split_work.py +0 -0
  869. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_sql_dialect.py +0 -0
  870. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_sqlite_connect_ratchet.py +0 -0
  871. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_stale_busy_reviewer_697.py +0 -0
  872. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_stalled_pipeline.py +0 -0
  873. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_state.py +0 -0
  874. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_state_review_findings_daemon.py +0 -0
  875. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_status_fleet_footer.py +0 -0
  876. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_stop_1567.py +0 -0
  877. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_store_contract.py +0 -0
  878. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_store_migrate.py +0 -0
  879. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_stuck.py +0 -0
  880. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
  881. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_terminal_command.py +0 -0
  882. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_test_author.py +0 -0
  883. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_test_chat.py +0 -0
  884. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_test_orchestrator.py +0 -0
  885. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_test_report.py +0 -0
  886. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_test_verdict_parsing.py +0 -0
  887. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_test_verdict_transcript_floor.py +0 -0
  888. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_text_io_encoding_audit.py +0 -0
  889. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_thin_client_board_audit.py +0 -0
  890. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_thin_client_config_load_1080.py +0 -0
  891. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_thin_client_daemon_routing_906.py +0 -0
  892. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_throwaway_vm.py +0 -0
  893. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_tmux_host.py +0 -0
  894. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_tmux_session.py +0 -0
  895. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_transcript_floor.py +0 -0
  896. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_uat_checks.py +0 -0
  897. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_usage.py +0 -0
  898. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_usage_limits.py +0 -0
  899. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_usage_rollup.py +0 -0
  900. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_venv_live_install_2121.py +0 -0
  901. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_version_single_source.py +0 -0
  902. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_watch.py +0 -0
  903. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  904. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_worker_env_venv_isolation.py +0 -0
  905. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_worker_events.py +0 -0
  906. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_worker_image_pin_sync.py +0 -0
  907. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_worker_safety.py +0 -0
  908. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_worker_test_scoping.py +0 -0
  909. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_worktree.py +0 -0
  910. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  911. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/tests/test_write_parity.py +0 -0
  912. {code_coordinator-0.5.538 → code_coordinator-0.5.540}/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.538
3
+ Version: 0.5.540
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.538
3
+ Version: 0.5.540
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
@@ -151,6 +151,7 @@ coord/scorecard.py
151
151
  coord/self_health.py
152
152
  coord/serve_app.py
153
153
  coord/smoke.py
154
+ coord/smoke_tags.py
154
155
  coord/spend_ceiling.py
155
156
  coord/split_work.py
156
157
  coord/sql.py
@@ -277,6 +277,7 @@
277
277
  "coord/skills/tui-quadraui-workflow/SKILL.md",
278
278
  "coord/skills/update-issue/SKILL.md",
279
279
  "coord/smoke.py",
280
+ "coord/smoke_tags.py",
280
281
  "coord/spend_ceiling.py",
281
282
  "coord/split_work.py",
282
283
  "coord/sql.py",
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "0.5.538",
2
+ "tag": "0.5.540",
3
3
  "distance": 0,
4
- "node": "g497e677b9148b371539abe944ff11b260e6dc373",
4
+ "node": "g4350dd13ffcba5e53083059269232d07634c175d",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-09-30"
@@ -82,7 +82,6 @@ independence; for smoke we want a *capable* machine for hardware, and
82
82
 
83
83
  from __future__ import annotations
84
84
 
85
- import base64
86
85
  import json
87
86
  import logging
88
87
  import re
@@ -123,6 +122,24 @@ from coord.models import (
123
122
  # runner actually emits, or from what `coord.notify` parses back out of the
124
123
  # agent's own transcript (see `_smoke_baseline_red_reason` there).
125
124
  from coord.revalidate import BASELINE_RED_OUTPUT_MARKER, RUNNER_BASELINE_RED_EXIT
125
+ # The #3182 fan-out's on-the-board text encodings, DEFINED in a leaf module
126
+ # and re-exported here under their original spellings so every existing
127
+ # importer (`coord.notify`, `coord.diagnose`, `coord.reconcile`, the tests)
128
+ # still reads them off `coord.smoke`, with exactly one definition of each.
129
+ # See `coord/smoke_tags.py`'s docstring for why they were split out: they are
130
+ # pure `re`/`base64` string handling, and `coord.stage_projection` — a
131
+ # deliberately dependency-free leaf module — has to parse both to count Test
132
+ # rounds (#3191). Reaching them through THIS module would drag the whole
133
+ # dispatch stack (`coord.config`, `coord.dispatch`, `coord.github_ops`,
134
+ # `coord.revalidate`, `httpx`) into `coord serve`'s `/board` request path.
135
+ from coord.smoke_tags import ( # noqa: F401 (re-export; see note above)
136
+ _FANOUT_MANIFEST_RE,
137
+ _LEG_TAG_RE,
138
+ _encode_fanout_manifest,
139
+ _parse_fanout_manifest,
140
+ smoke_leg_capabilities,
141
+ smoke_leg_issue_title,
142
+ )
126
143
 
127
144
  logger = logging.getLogger("coord.smoke")
128
145
 
@@ -638,114 +655,13 @@ def partition_capability_requirements(
638
655
  # sweep if a partition never got a machine at all — the existing, generic
639
656
  # mechanism, not a fan-out-specific reinvention of it.
640
657
 
641
- # Restricted to `[a-z0-9+_-]` — every capability name in this codebase
642
- # (gtk, windows, macos, browser, provider:opencode via `+`-joining, etc.)
643
- # fits that class. If `coordinator.yml` ever declares a capability with an
644
- # uppercase letter, a dot, or another character outside it,
645
- # `smoke_leg_capabilities()` silently returns None for that leg (misread as
646
- # an ordinary untagged row) rather than raising — nothing today validates
647
- # capability naming at config-load time, so keep new capability names
648
- # lowercase/`[a-z0-9+_-]` until that validation exists.
649
- _LEG_TAG_RE = re.compile(r"^\[smoke:([a-z0-9+_-]+)\] ")
650
-
651
-
652
- def smoke_leg_issue_title(base_title: str, capabilities: tuple[str, ...]) -> str:
653
- """The ``issue_title`` for one capability-partition leg of a #3182 fan-out.
654
-
655
- Encodes *capabilities* (sorted, ``+``-joined) as a parseable prefix —
656
- ``"[smoke:gtk+windows] <base_title>"`` — so :func:`smoke_leg_capabilities`
657
- can read it back off the board. Used both for the per-partition in-flight
658
- dedupe (:func:`_find_leg_for_partition`) and for telling a fan-out leg's
659
- own verdict apart from an ordinary single-leg smoke row's when processing
660
- it (``coord.notify``).
661
- """
662
- tag = "+".join(sorted(capabilities))
663
- return f"[smoke:{tag}] {base_title}"
664
-
665
-
666
- def smoke_leg_capabilities(issue_title: str | None) -> tuple[str, ...] | None:
667
- """The capability set :func:`smoke_leg_issue_title` encoded, or ``None``.
668
-
669
- ``None`` for an ordinary (untagged) smoke row — every pre-#3182 ``[smoke]
670
- ...`` single-partition dispatch, which never carries this prefix — or for
671
- any non-smoke row. Never raises on a malformed or missing title.
672
- """
673
- if not issue_title:
674
- return None
675
- m = _LEG_TAG_RE.match(issue_title)
676
- if not m:
677
- return None
678
- return tuple(m.group(1).split("+"))
679
-
680
-
681
- _FANOUT_MANIFEST_RE = re.compile(r"^\[\[smoke-fanout:([^\]]*)\]\]\n?")
682
-
683
-
684
- def _encode_fanout_manifest(
685
- legs: list[tuple[str, tuple[str, ...], str | None]],
686
- ) -> str:
687
- """The manifest line stamped at the FRONT of the parent's ``test_reason``
688
- for a #3182 fan-out: ``[[smoke-fanout:<id>=<caps>=<command_b64>,...]]``,
689
- one entry per leg dispatched (or already active/completed) this round.
690
- Preserved byte-for-byte across every later rewrite of the parent's
691
- ``test_reason`` (the running-progress stamp, and the final aggregate) so
692
- :func:`finalize_smoke_fanout` can always find its siblings again from
693
- just the parent's own row — see the module note above for why this, and
694
- not a new query endpoint.
695
-
696
- ``command_b64`` (#3298) is the partition's own resolved Test-stage
697
- command, URL-safe base64-encoded so an arbitrary shell command — commas,
698
- brackets, newlines, anything a real ``test_command``/rule ``command`` can
699
- contain — can never corrupt this manifest's own ``,``/``=``/``]``
700
- delimiters. Encodes as an empty third field when the command is unknown
701
- (``None``), which round-trips through :func:`_parse_fanout_manifest` as
702
- ``command=None`` rather than raising or misparsing.
703
- """
704
- def _entry(leg_id: str, caps: tuple[str, ...], command: str | None) -> str:
705
- cap_str = "+".join(sorted(caps))
706
- cmd_b64 = (
707
- base64.urlsafe_b64encode(command.encode()).decode() if command else ""
708
- )
709
- return f"{leg_id}={cap_str}={cmd_b64}"
710
-
711
- body = ",".join(_entry(leg_id, caps, command) for leg_id, caps, command in legs)
712
- return f"[[smoke-fanout:{body}]]"
713
-
714
-
715
- def _parse_fanout_manifest(
716
- test_reason: str | None,
717
- ) -> list[tuple[str, tuple[str, ...], str | None]] | None:
718
- """The ``(leg_id, capabilities, command)`` triples
719
- :func:`_encode_fanout_manifest` wrote, or ``None`` when *test_reason*
720
- carries no manifest (not a fan-out row). Tolerates a malformed entry by
721
- skipping just that entry, never raising.
722
-
723
- ``command`` is ``None`` for a pre-#3298 two-field entry
724
- (``<id>=<caps>``, no trailing ``=<command_b64>``) — an already-in-flight
725
- row from before this field existed — as well as for a malformed base64
726
- payload; either way the caller gets "unknown command", never a crash.
727
- """
728
- if not test_reason:
729
- return None
730
- m = _FANOUT_MANIFEST_RE.match(test_reason)
731
- if not m:
732
- return None
733
- legs: list[tuple[str, tuple[str, ...], str | None]] = []
734
- for entry in m.group(1).split(","):
735
- if not entry:
736
- continue
737
- leg_id, _, rest = entry.partition("=")
738
- caps, _, cmd_b64 = rest.partition("=")
739
- if not leg_id or not caps:
740
- continue
741
- command: str | None = None
742
- if cmd_b64:
743
- try:
744
- command = base64.urlsafe_b64decode(cmd_b64.encode()).decode()
745
- except (ValueError, UnicodeDecodeError):
746
- command = None
747
- legs.append((leg_id, tuple(caps.split("+")), command))
748
- return legs
658
+ # `smoke_leg_issue_title` / `smoke_leg_capabilities` (the `[smoke:<caps>]`
659
+ # tag on each leg's `issue_title`) and `_encode_fanout_manifest` /
660
+ # `_parse_fanout_manifest` (the `[[smoke-fanout:...]]` manifest on the
661
+ # parent's `test_reason`) used to be DEFINED here. They now live in
662
+ # `coord/smoke_tags.py` and are re-exported by the import at the top of this
663
+ # module, so `from coord.smoke import ...` is unchanged for every caller —
664
+ # see that module's docstring for why the split exists.
749
665
 
750
666
 
751
667
  def _build_fanout_running_reason(
@@ -0,0 +1,140 @@
1
+ """The #3182 fan-out's on-the-board *text encodings*, and nothing else.
2
+
3
+ A capability-partition fan-out records two things as plain text on rows the
4
+ board already has, rather than in a new table (see ``coord.smoke``'s own
5
+ module note for why): each leg's ``issue_title`` carries a
6
+ ``[smoke:<caps>]`` tag, and the parent work row's ``test_reason`` carries a
7
+ ``[[smoke-fanout:...]]`` manifest naming every leg in that round.
8
+
9
+ Those four functions used to live in ``coord/smoke.py``, next to the
10
+ dispatcher that writes them. They are split out here because ``coord.smoke``
11
+ imports the whole dispatch stack (``coord.config``, ``coord.dispatch``,
12
+ ``coord.github_ops``, ``coord.revalidate``, ``httpx``), while the encodings
13
+ themselves are pure ``re``/``base64`` string handling with no coord
14
+ dependency at all — and ``coord.stage_projection``, which has to *read* both
15
+ encodings to count Test rounds (#3191), is deliberately a leaf module
16
+ ("Pure computation: ... no I/O, no side effects") whose only other
17
+ production import is ``coord.models``. Importing ``coord.smoke`` from it
18
+ just to reach two regexes would have dragged the entire dispatch stack into
19
+ ``coord serve``'s ``/board`` request path — a first-request-time import of
20
+ half the package inside a threadpool worker — for no benefit.
21
+
22
+ ``coord.smoke`` re-exports every name below under its original spelling, so
23
+ existing importers (``coord.notify``, ``coord.diagnose``,
24
+ ``coord.reconcile``, and the tests) are unaffected and there is exactly one
25
+ definition of each encoding.
26
+ """
27
+
28
+ from __future__ import annotations
29
+
30
+ import base64
31
+ import re
32
+
33
+ # Restricted to `[a-z0-9+_-]` — every capability name in this codebase
34
+ # (gtk, windows, macos, browser, provider:opencode via `+`-joining, etc.)
35
+ # fits that class. If `coordinator.yml` ever declares a capability with an
36
+ # uppercase letter, a dot, or another character outside it,
37
+ # `smoke_leg_capabilities()` silently returns None for that leg (misread as
38
+ # an ordinary untagged row) rather than raising — nothing today validates
39
+ # capability naming at config-load time, so keep new capability names
40
+ # lowercase/`[a-z0-9+_-]` until that validation exists.
41
+ _LEG_TAG_RE = re.compile(r"^\[smoke:([a-z0-9+_-]+)\] ")
42
+
43
+
44
+ def smoke_leg_issue_title(base_title: str, capabilities: tuple[str, ...]) -> str:
45
+ """The ``issue_title`` for one capability-partition leg of a #3182 fan-out.
46
+
47
+ Encodes *capabilities* (sorted, ``+``-joined) as a parseable prefix —
48
+ ``"[smoke:gtk+windows] <base_title>"`` — so :func:`smoke_leg_capabilities`
49
+ can read it back off the board. Used both for the per-partition in-flight
50
+ dedupe (``coord.smoke._find_leg_for_partition``) and for telling a
51
+ fan-out leg's own verdict apart from an ordinary single-leg smoke row's
52
+ when processing it (``coord.notify``).
53
+ """
54
+ tag = "+".join(sorted(capabilities))
55
+ return f"[smoke:{tag}] {base_title}"
56
+
57
+
58
+ def smoke_leg_capabilities(issue_title: str | None) -> tuple[str, ...] | None:
59
+ """The capability set :func:`smoke_leg_issue_title` encoded, or ``None``.
60
+
61
+ ``None`` for an ordinary (untagged) smoke row — every pre-#3182 ``[smoke]
62
+ ...`` single-partition dispatch, which never carries this prefix — or for
63
+ any non-smoke row. Never raises on a malformed or missing title.
64
+ """
65
+ if not issue_title:
66
+ return None
67
+ m = _LEG_TAG_RE.match(issue_title)
68
+ if not m:
69
+ return None
70
+ return tuple(m.group(1).split("+"))
71
+
72
+
73
+ _FANOUT_MANIFEST_RE = re.compile(r"^\[\[smoke-fanout:([^\]]*)\]\]\n?")
74
+
75
+
76
+ def _encode_fanout_manifest(
77
+ legs: list[tuple[str, tuple[str, ...], str | None]],
78
+ ) -> str:
79
+ """The manifest line stamped at the FRONT of the parent's ``test_reason``
80
+ for a #3182 fan-out: ``[[smoke-fanout:<id>=<caps>=<command_b64>,...]]``,
81
+ one entry per leg dispatched (or already active/completed) this round.
82
+ Preserved byte-for-byte across every later rewrite of the parent's
83
+ ``test_reason`` (the running-progress stamp, and the final aggregate) so
84
+ ``coord.smoke.finalize_smoke_fanout`` can always find its siblings again
85
+ from just the parent's own row — see that module's note for why this, and
86
+ not a new query endpoint.
87
+
88
+ ``command_b64`` (#3298) is the partition's own resolved Test-stage
89
+ command, URL-safe base64-encoded so an arbitrary shell command — commas,
90
+ brackets, newlines, anything a real ``test_command``/rule ``command`` can
91
+ contain — can never corrupt this manifest's own ``,``/``=``/``]``
92
+ delimiters. Encodes as an empty third field when the command is unknown
93
+ (``None``), which round-trips through :func:`_parse_fanout_manifest` as
94
+ ``command=None`` rather than raising or misparsing.
95
+ """
96
+ def _entry(leg_id: str, caps: tuple[str, ...], command: str | None) -> str:
97
+ cap_str = "+".join(sorted(caps))
98
+ cmd_b64 = (
99
+ base64.urlsafe_b64encode(command.encode()).decode() if command else ""
100
+ )
101
+ return f"{leg_id}={cap_str}={cmd_b64}"
102
+
103
+ body = ",".join(_entry(leg_id, caps, command) for leg_id, caps, command in legs)
104
+ return f"[[smoke-fanout:{body}]]"
105
+
106
+
107
+ def _parse_fanout_manifest(
108
+ test_reason: str | None,
109
+ ) -> list[tuple[str, tuple[str, ...], str | None]] | None:
110
+ """The ``(leg_id, capabilities, command)`` triples
111
+ :func:`_encode_fanout_manifest` wrote, or ``None`` when *test_reason*
112
+ carries no manifest (not a fan-out row). Tolerates a malformed entry by
113
+ skipping just that entry, never raising.
114
+
115
+ ``command`` is ``None`` for a pre-#3298 two-field entry
116
+ (``<id>=<caps>``, no trailing ``=<command_b64>``) — an already-in-flight
117
+ row from before this field existed — as well as for a malformed base64
118
+ payload; either way the caller gets "unknown command", never a crash.
119
+ """
120
+ if not test_reason:
121
+ return None
122
+ m = _FANOUT_MANIFEST_RE.match(test_reason)
123
+ if not m:
124
+ return None
125
+ legs: list[tuple[str, tuple[str, ...], str | None]] = []
126
+ for entry in m.group(1).split(","):
127
+ if not entry:
128
+ continue
129
+ leg_id, _, rest = entry.partition("=")
130
+ caps, _, cmd_b64 = rest.partition("=")
131
+ if not leg_id or not caps:
132
+ continue
133
+ command: str | None = None
134
+ if cmd_b64:
135
+ try:
136
+ command = base64.urlsafe_b64decode(cmd_b64.encode()).decode()
137
+ except (ValueError, UnicodeDecodeError):
138
+ command = None
139
+ legs.append((leg_id, tuple(caps.split("+")), command))
140
+ return legs
@@ -35,6 +35,15 @@ import dataclasses
35
35
  from typing import Any, Protocol, runtime_checkable
36
36
 
37
37
  from coord.models import CLOSES_ISSUE_TYPES, WORK_LIKE_TYPES, effective_issue_number
38
+ # #3191: the two #3182 fan-out encodings this module has to PARSE to count
39
+ # Test *rounds* rather than raw smoke rows — see `_test_stage_leg_count`.
40
+ # Imported from the leaf `coord.smoke_tags`, never from `coord.smoke`, so
41
+ # this module keeps the property its docstring above claims: the only thing
42
+ # it pulls in is pure computation. `coord.smoke` would bring `coord.config`,
43
+ # `coord.dispatch`, `coord.github_ops`, `coord.revalidate` and `httpx` with
44
+ # it, and `compute_board_stage_projection` runs inside `coord serve`'s
45
+ # `/board` handler.
46
+ from coord.smoke_tags import _parse_fanout_manifest, smoke_leg_capabilities
38
47
 
39
48
  # ── Stage-status vocabulary — mirrors tui/src/app/pipeline.rs::StageStatus ──
40
49
  PENDING = "pending"
@@ -75,6 +84,7 @@ class _AssignmentLike(Protocol):
75
84
  review_verdict: str | None
76
85
  review_of_assignment_id: str | None
77
86
  test_state: str | None
87
+ test_reason: str | None
78
88
  repo_name: str
79
89
  issue_number: int
80
90
  acceptance_state: str | None
@@ -82,6 +92,7 @@ class _AssignmentLike(Protocol):
82
92
  acceptance_passed: int | None
83
93
  uat_state: str | None
84
94
  uat_reason: str | None
95
+ issue_title: str | None
85
96
 
86
97
 
87
98
  # ── Helpers ──────────────────────────────────────────────────────────────
@@ -195,7 +206,11 @@ def _leg_count_for_stage(
195
206
  field exists to surface, and a strict ``type == "work"`` match would
196
207
  never see them.
197
208
  * ``"test"`` has no ``type="test"`` assignment — the Test-stage's
198
- dispatched worker is ``type="smoke"`` (``coord.smoke``).
209
+ dispatched worker is ``type="smoke"`` (``coord.smoke``). Since #3182,
210
+ one Test *attempt* can dispatch more than one ``type="smoke"`` row (a
211
+ fan-out leg per capability partition), so a flat row count over-reports
212
+ — see :func:`_test_stage_leg_count` for how rows are folded back into
213
+ rounds.
199
214
  * ``"merge"`` has no ``type="merge"`` assignment either — repeated
200
215
  landing attempts show up as ``type="conflict-fix"`` legs (#241). Note
201
216
  the counting convention this implies differs from every other stage:
@@ -230,7 +245,7 @@ def _leg_count_for_stage(
230
245
  ]
231
246
  return len(matching) + len(extra)
232
247
  if stage == "test":
233
- return sum(1 for a in assignments_for_issue if (a.type or "work") == "smoke")
248
+ return _test_stage_leg_count(assignments_for_issue)
234
249
  if stage == "merge":
235
250
  return sum(1 for a in assignments_for_issue if (a.type or "work") == "conflict-fix")
236
251
  if stage == "acceptance":
@@ -242,6 +257,77 @@ def _leg_count_for_stage(
242
257
  return len(assignments_for_stage(assignments_for_issue, stage, require_plan=require_plan))
243
258
 
244
259
 
260
+ def _test_stage_leg_count(assignments_for_issue: list) -> int:
261
+ """How many separate Test-stage *attempts* — not raw ``type="smoke"``
262
+ rows — this issue has had (#3191).
263
+
264
+ Before #3182, one Test attempt was always exactly one ``type="smoke"``
265
+ row, so :func:`_leg_count_for_stage`'s flat row count was already
266
+ correct. #3182's fan-out (``coord.smoke._dispatch_smoke_fanout``) breaks
267
+ that: a diff whose ``capability_rules`` matches span more than one
268
+ machine-satisfiable partition (e.g. ``gtk+windows`` and ``macos``)
269
+ dispatches one smoke row PER partition for a single Test round, so a
270
+ clean, fully-successful first attempt reported ``stage_counts["test"] ==
271
+ 2`` — read by every board client as "this needed a retry" (#3013), which
272
+ is exactly backwards.
273
+
274
+ A fan-out leg's own ``issue_title`` carries a ``[smoke:<caps>]`` tag
275
+ (``coord.smoke_tags.smoke_leg_issue_title``/``smoke_leg_capabilities``);
276
+ an ordinary single-leg dispatch (the pre-#3182 path, and every row that
277
+ predates it) carries none. Untagged rows keep counting 1:1 — no
278
+ behaviour change for the common case.
279
+
280
+ A tagged leg's round is identified via the ``[[smoke-fanout:...]]``
281
+ manifest (``coord.smoke_tags._encode_fanout_manifest``/
282
+ ``_parse_fanout_manifest``) stamped on the leg's own parent row
283
+ (``review_of_assignment_id``) — every leg the manifest names is one
284
+ round, and rounds collapse to a single count regardless of how many
285
+ partitions they fanned out to.
286
+
287
+ Known limitation, not fixed here: a Test retry clears the parent's
288
+ ``test_reason`` (``coord.state.reset_work_test_state``) before the next
289
+ round dispatches and writes a fresh manifest, so a SUPERSEDED round's
290
+ manifest no longer exists to fold its legs back together by the time
291
+ this runs — those orphaned tagged legs fall back to counting 1 each,
292
+ same as before this fix. That only ever *over*-counts a past, already-
293
+ resolved round; it never reproduces the bug this closes, which was
294
+ about the live/most-recent round (the one every reader actually looks
295
+ at) reporting a false retry on a clean first attempt.
296
+ """
297
+ smoke_legs = [a for a in assignments_for_issue if (a.type or "work") == "smoke"]
298
+ if not smoke_legs:
299
+ return 0
300
+
301
+ # Every row's own manifest, keyed by that row's `assignment_id` — a
302
+ # fan-out leg's PARENT (the work-like row `review_of_assignment_id`
303
+ # points back to) is the one that carries it, not the leg itself.
304
+ manifest_leg_ids_by_parent: dict[str, frozenset[str]] = {}
305
+ for a in assignments_for_issue:
306
+ parsed = _parse_fanout_manifest(getattr(a, "test_reason", None))
307
+ if parsed and a.assignment_id:
308
+ manifest_leg_ids_by_parent[a.assignment_id] = frozenset(
309
+ leg_id for leg_id, _caps, _cmd in parsed if leg_id
310
+ )
311
+
312
+ count = 0
313
+ counted_rounds: set[tuple[str, frozenset[str]]] = set()
314
+ for leg in smoke_legs:
315
+ if smoke_leg_capabilities(getattr(leg, "issue_title", None)) is None:
316
+ count += 1
317
+ continue
318
+ manifest_ids = manifest_leg_ids_by_parent.get(leg.review_of_assignment_id or "")
319
+ if not manifest_ids or leg.assignment_id not in manifest_ids:
320
+ # Orphaned tagged leg — see the "Known limitation" note above.
321
+ count += 1
322
+ continue
323
+ round_key = (leg.review_of_assignment_id or "", manifest_ids)
324
+ if round_key in counted_rounds:
325
+ continue
326
+ counted_rounds.add(round_key)
327
+ count += 1
328
+ return count
329
+
330
+
245
331
  def _widen_work_like_types(assignments: list) -> list:
246
332
  """Return *assignments* with every :data:`WORK_LIKE_TYPES` row (#3013:
247
333
  ``mock-author``/``test-author``, not just literal ``type="work"``)
@@ -836,6 +836,11 @@ def check_disabled_timers(ctx: WatchdogContext) -> list[Finding]:
836
836
  stabilises, see ``docs/AGENT_OPERATIONS.md``). Suppress the specific
837
837
  unit in ``watchdog-suppress.json`` to keep this from paging on an
838
838
  intentional operator decision.
839
+
840
+ A ``transient`` unit (created via ``systemd-run``, living only in
841
+ ``/run/user/<uid>/systemd/transient/``) is excluded from this check
842
+ entirely — it has no on-disk enablement symlink to be "disabled", so
843
+ the state is normal, not a finding (#2815).
839
844
  """
840
845
  if SYSTEMCTL is None:
841
846
  return []
@@ -862,7 +867,7 @@ def check_disabled_timers(ctx: WatchdogContext) -> list[Finding]:
862
867
  if len(parts) < 2:
863
868
  continue
864
869
  unit, state = parts[0], parts[1]
865
- if state in ("enabled", "static", "generated", "alias"):
870
+ if state in ("enabled", "static", "generated", "alias", "transient"):
866
871
  continue
867
872
  findings.append(
868
873
  Finding(
@@ -400,6 +400,62 @@ class TestSuppressionSentinel:
400
400
  assert (tmp_path / ".local" / "bin" / "coord").is_symlink()
401
401
 
402
402
 
403
+ class TestDisabledTimerCheck:
404
+ """#2815: a transient ``coord-*.timer`` (created via ``systemd-run``,
405
+ e.g. #2587's overnight guard) must not be misread as disabled — it has
406
+ no on-disk enablement state to be "disabled" from. A genuinely
407
+ disabled/masked timer must still be reported."""
408
+
409
+ def test_transient_timer_produces_no_finding(self, tmp_path, monkeypatch):
410
+ fake_systemctl = tmp_path / "fake-systemctl"
411
+ fake_systemctl.write_text(
412
+ "#!/usr/bin/env bash\n"
413
+ "if [[ \"$*\" == *list-unit-files* ]]; then\n"
414
+ " echo 'coord-rollpending-guard.timer transient'\n"
415
+ "fi\n"
416
+ )
417
+ fake_systemctl.chmod(0o755)
418
+ monkeypatch.setattr(fleet_watchdog, "SYSTEMCTL", str(fake_systemctl))
419
+
420
+ ctx = _ctx(tmp_path)
421
+ findings = fleet_watchdog.check_disabled_timers(ctx)
422
+ assert findings == []
423
+
424
+ def test_disabled_timer_still_reported(self, tmp_path, monkeypatch):
425
+ fake_systemctl = tmp_path / "fake-systemctl"
426
+ fake_systemctl.write_text(
427
+ "#!/usr/bin/env bash\n"
428
+ "if [[ \"$*\" == *list-unit-files* ]]; then\n"
429
+ " echo 'coord-some-timer.timer disabled'\n"
430
+ "fi\n"
431
+ )
432
+ fake_systemctl.chmod(0o755)
433
+ monkeypatch.setattr(fleet_watchdog, "SYSTEMCTL", str(fake_systemctl))
434
+
435
+ ctx = _ctx(tmp_path)
436
+ findings = fleet_watchdog.check_disabled_timers(ctx)
437
+ [finding] = findings
438
+ assert finding.condition == "timer-disabled"
439
+ assert finding.signature == "coord-some-timer.timer"
440
+
441
+ def test_masked_timer_still_reported(self, tmp_path, monkeypatch):
442
+ fake_systemctl = tmp_path / "fake-systemctl"
443
+ fake_systemctl.write_text(
444
+ "#!/usr/bin/env bash\n"
445
+ "if [[ \"$*\" == *list-unit-files* ]]; then\n"
446
+ " echo 'coord-some-other.timer masked'\n"
447
+ "fi\n"
448
+ )
449
+ fake_systemctl.chmod(0o755)
450
+ monkeypatch.setattr(fleet_watchdog, "SYSTEMCTL", str(fake_systemctl))
451
+
452
+ ctx = _ctx(tmp_path)
453
+ findings = fleet_watchdog.check_disabled_timers(ctx)
454
+ [finding] = findings
455
+ assert finding.condition == "timer-disabled"
456
+ assert finding.signature == "coord-some-other.timer"
457
+
458
+
403
459
  # ---------------------------------------------------------------------------
404
460
  # Acceptance test 4: the Nth consecutive identical repair escalates instead
405
461
  # of repairing.