code-coordinator 0.5.551__tar.gz → 0.5.553__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (925) hide show
  1. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/code_coordinator.egg-info/scm_version.json +2 -2
  4. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/config.py +105 -14
  5. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/reports.py +41 -1
  6. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/review.py +183 -6
  7. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_config.py +20 -0
  8. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_config_acceptance.py +124 -0
  9. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_reports.py +27 -0
  10. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_review.py +269 -0
  11. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/.claude/commands/board.md +0 -0
  12. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/.claude/commands/complete-session.md +0 -0
  13. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/.claude/commands/coordinator.md +0 -0
  14. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/.githooks/_lib.sh +0 -0
  15. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/.githooks/post-checkout +0 -0
  16. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/.githooks/post-commit +0 -0
  17. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/.githooks/post-merge +0 -0
  18. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  19. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/.github/coord-ci-acceptance.yml +0 -0
  20. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/.github/workflows/auto-release.yml +0 -0
  21. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/.github/workflows/publish.yml +0 -0
  22. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/.github/workflows/test.yml +0 -0
  23. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/.gitignore +0 -0
  24. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/CLAUDE.md +0 -0
  25. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/GOAL.md +0 -0
  26. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/LICENSE +0 -0
  27. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/MANIFEST.in +0 -0
  28. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/README.md +0 -0
  29. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/code_coordinator.egg-info/SOURCES.txt +0 -0
  30. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/code_coordinator.egg-info/dependency_links.txt +0 -0
  31. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/code_coordinator.egg-info/entry_points.txt +0 -0
  32. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/code_coordinator.egg-info/requires.txt +0 -0
  33. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/code_coordinator.egg-info/scm_file_list.json +0 -0
  34. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/code_coordinator.egg-info/top_level.txt +0 -0
  35. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/__init__.py +0 -0
  36. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/_board_mapping.py +0 -0
  37. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/acceptance.py +0 -0
  38. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/acceptance_drivers.py +0 -0
  39. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/agent.py +0 -0
  40. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/agent_app.py +0 -0
  41. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/agent_update.py +0 -0
  42. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/agents/opencode/.gitignore +0 -0
  43. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/agents/opencode/agents/work.md +0 -0
  44. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/agents/opencode/routing.jsonc +0 -0
  45. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/approved_work.py +0 -0
  46. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/audit.py +0 -0
  47. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/auto_loop.py +0 -0
  48. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/backup.py +0 -0
  49. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/block_log.py +0 -0
  50. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/board_schema.py +0 -0
  51. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/board_service.py +0 -0
  52. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/board_wire.py +0 -0
  53. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/brain.py +0 -0
  54. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/branch_model.py +0 -0
  55. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/bug_intake.py +0 -0
  56. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/bugbash.py +0 -0
  57. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/cargo_cache.py +0 -0
  58. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/ci_fix.py +0 -0
  59. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/ci_github.py +0 -0
  60. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/ci_gitlab.py +0 -0
  61. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/ci_store.py +0 -0
  62. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/claim.py +0 -0
  63. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/claude_setup_token.py +0 -0
  64. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/cli.py +0 -0
  65. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/client.py +0 -0
  66. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/codegen.py +0 -0
  67. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/commands/__init__.py +0 -0
  68. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/commands/_common.py +0 -0
  69. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/commands/acceptance.py +0 -0
  70. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/commands/agent_ops.py +0 -0
  71. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/commands/audit.py +0 -0
  72. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/commands/backup.py +0 -0
  73. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/commands/bugbash.py +0 -0
  74. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/commands/chat.py +0 -0
  75. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/commands/ci.py +0 -0
  76. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/commands/codegen.py +0 -0
  77. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/commands/dispatch.py +0 -0
  78. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/commands/dispatch_workers.py +0 -0
  79. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/commands/dr.py +0 -0
  80. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/commands/drive.py +0 -0
  81. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/commands/drive_queue.py +0 -0
  82. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/commands/gate_a.py +0 -0
  83. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/commands/gates.py +0 -0
  84. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/commands/issues.py +0 -0
  85. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/commands/lifecycle.py +0 -0
  86. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/commands/machine.py +0 -0
  87. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/commands/merge.py +0 -0
  88. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/commands/milestone.py +0 -0
  89. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/commands/plan_followup.py +0 -0
  90. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/commands/plans.py +0 -0
  91. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/commands/portal.py +0 -0
  92. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/commands/pr.py +0 -0
  93. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/commands/release.py +0 -0
  94. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/commands/repo.py +0 -0
  95. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/commands/report.py +0 -0
  96. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/commands/review.py +0 -0
  97. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/commands/scorecard.py +0 -0
  98. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/commands/sessions.py +0 -0
  99. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/commands/setup.py +0 -0
  100. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/commands/status.py +0 -0
  101. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/commands/store_migrate.py +0 -0
  102. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/commands/terminal.py +0 -0
  103. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/commands/test_gate.py +0 -0
  104. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/commands/tui.py +0 -0
  105. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/comments.py +0 -0
  106. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/config_reload.py +0 -0
  107. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/confirm_test.py +0 -0
  108. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/conflict_fix.py +0 -0
  109. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/dao.py +0 -0
  110. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/dashboard/__init__.py +0 -0
  111. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/dashboard/fixture.py +0 -0
  112. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/dashboard/index.html +0 -0
  113. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/dashboard/server.py +0 -0
  114. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/dashboard/terminal.py +0 -0
  115. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/db.py +0 -0
  116. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/dead_end.py +0 -0
  117. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/decomposition_chat.py +0 -0
  118. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/deploy/README.md +0 -0
  119. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/deploy/coord-agent.service +0 -0
  120. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/deploy/coord-backup.service +0 -0
  121. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/deploy/coord-backup.timer +0 -0
  122. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/deploy/coord-db-backup.service +0 -0
  123. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/deploy/coord-db-backup.sh +0 -0
  124. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/deploy/coord-db-backup.timer +0 -0
  125. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/deploy/coord-dr-verify.service +0 -0
  126. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/deploy/coord-dr-verify.timer +0 -0
  127. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/deploy/coord-drive-queue.service +0 -0
  128. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/deploy/coord-drive-queue.timer +0 -0
  129. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/deploy/coord-failure-notify.service +0 -0
  130. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/deploy/coord-fleet-watchdog.service +0 -0
  131. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/deploy/coord-fleet-watchdog.timer +0 -0
  132. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/deploy/coord-notify.service +0 -0
  133. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/deploy/coord-notify.timer +0 -0
  134. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/deploy/coord-release-propagate.service +0 -0
  135. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/deploy/coord-release-propagate.timer +0 -0
  136. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/deploy/coord-release-window.service +0 -0
  137. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/deploy/coord-release-window.timer +0 -0
  138. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/deploy/coord-serve.service +0 -0
  139. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/deploy/coord-web-dist-build.service +0 -0
  140. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/deploy/coord-web-dist-build.timer +0 -0
  141. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/deploy/coord-web.service +0 -0
  142. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/deploy_manifest.py +0 -0
  143. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/deploy_units.py +0 -0
  144. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/deprecation_telemetry.py +0 -0
  145. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/deps.py +0 -0
  146. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/diagnose.py +0 -0
  147. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/dispatch.py +0 -0
  148. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/dispatch_liveness.py +0 -0
  149. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/dist_name.py +0 -0
  150. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/dr_promote.py +0 -0
  151. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/dr_verify.py +0 -0
  152. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/drive.py +0 -0
  153. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/drive_queue.py +0 -0
  154. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/drive_sessions_snapshot.py +0 -0
  155. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/drive_state.py +0 -0
  156. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/events.py +0 -0
  157. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/failure_class.py +0 -0
  158. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/failure_classifier.py +0 -0
  159. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/filelock.py +0 -0
  160. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/fleet_config_health.py +0 -0
  161. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/forge_availability.py +0 -0
  162. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/freshness.py +0 -0
  163. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/gate_a.py +0 -0
  164. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/gate_b.py +0 -0
  165. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/gate_snapshot.py +0 -0
  166. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/gates.py +0 -0
  167. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/gen_board_fixture.py +0 -0
  168. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/github_ops.py +0 -0
  169. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/github_throttle.py +0 -0
  170. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/goal.py +0 -0
  171. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/graph_health.py +0 -0
  172. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/gtk_native_driver.py +0 -0
  173. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/health/__init__.py +0 -0
  174. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/health/aggregate.py +0 -0
  175. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/health/checks/__init__.py +0 -0
  176. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/health/checks/_ci_pin.py +0 -0
  177. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/health/checks/agent_install.py +0 -0
  178. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/health/checks/cargo_targets.py +0 -0
  179. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/health/checks/claude_binary.py +0 -0
  180. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/health/checks/config_drift.py +0 -0
  181. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/health/checks/coord_tui_ci_pin.py +0 -0
  182. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/health/checks/coord_web_ci_pin.py +0 -0
  183. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/health/checks/deploy_lane_facts.py +0 -0
  184. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/health/checks/disk.py +0 -0
  185. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/health/checks/fleet_board.py +0 -0
  186. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  187. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/health/checks/fleet_phantom.py +0 -0
  188. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/health/checks/fleet_unit_drift.py +0 -0
  189. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/health/checks/graph.py +0 -0
  190. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/health/checks/graphify_cli.py +0 -0
  191. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/health/checks/index_lock.py +0 -0
  192. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/health/checks/issues_sync_staleness.py +0 -0
  193. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/health/checks/local_machine_identity.py +0 -0
  194. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/health/checks/plan_usage.py +0 -0
  195. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/health/checks/pr_churn.py +0 -0
  196. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/health/checks/release_cordon.py +0 -0
  197. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/health/checks/repo_state.py +0 -0
  198. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/health/checks/spawned_coord.py +0 -0
  199. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/health/checks/stalled_pipeline.py +0 -0
  200. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/health/checks/timer_active.py +0 -0
  201. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/health/checks/toolchain.py +0 -0
  202. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/health/checks/unit_drift.py +0 -0
  203. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/health/checks/unit_enablement.py +0 -0
  204. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/health/checks/wedged_drive_queue.py +0 -0
  205. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/health/checks/worktrees.py +0 -0
  206. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/health/cli.py +0 -0
  207. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/health/context.py +0 -0
  208. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/health/fleet_snapshot.py +0 -0
  209. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/health/models.py +0 -0
  210. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/health/pypi.py +0 -0
  211. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/health/registry.py +0 -0
  212. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/health/render.py +0 -0
  213. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/health/units.py +0 -0
  214. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/hooks.py +0 -0
  215. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/housekeeping.py +0 -0
  216. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/interactive.py +0 -0
  217. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/invariant_alarms.py +0 -0
  218. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/issue_store.py +0 -0
  219. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/issues_sync_status.py +0 -0
  220. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/liveness_auditor.py +0 -0
  221. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/mac_native_driver.py +0 -0
  222. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/machine_fault.py +0 -0
  223. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/machine_metrics.py +0 -0
  224. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/machine_onboard.py +0 -0
  225. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/machine_pause.py +0 -0
  226. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/machine_stats.py +0 -0
  227. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/merge_queue.py +0 -0
  228. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/milestone_chat.py +0 -0
  229. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/milestone_dispatch.py +0 -0
  230. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/milestone_gate.py +0 -0
  231. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/milestone_order.py +0 -0
  232. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/mock_author.py +0 -0
  233. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/models.py +0 -0
  234. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/network.py +0 -0
  235. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/new_issue_chat.py +0 -0
  236. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/notifier/__init__.py +0 -0
  237. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/notifier/baseline.py +0 -0
  238. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/notifier/cli.py +0 -0
  239. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/notifier/collect.py +0 -0
  240. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/notifier/digest.py +0 -0
  241. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/notifier/models.py +0 -0
  242. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/notifier/predicate.py +0 -0
  243. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/notifier/service.py +0 -0
  244. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/notifier/store.py +0 -0
  245. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/notifier/transport.py +0 -0
  246. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/notify.py +0 -0
  247. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/openapi.py +0 -0
  248. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/overlap_fence.py +0 -0
  249. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/overlap_predict.py +0 -0
  250. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/parentage.py +0 -0
  251. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/parentage_github.py +0 -0
  252. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/pipeline.py +0 -0
  253. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/plan_parser.py +0 -0
  254. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/plans.py +0 -0
  255. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/platform_paths.py +0 -0
  256. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/portal_bridge.py +0 -0
  257. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/portal_store.py +0 -0
  258. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/portal_sync.py +0 -0
  259. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/pr_body_lint.py +0 -0
  260. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/prereqs.py +0 -0
  261. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/progress.py +0 -0
  262. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/providers/__init__.py +0 -0
  263. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/providers/base.py +0 -0
  264. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/providers/claude.py +0 -0
  265. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/providers/claude_pty.py +0 -0
  266. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/providers/opencode.py +0 -0
  267. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/queue_diagnose.py +0 -0
  268. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/reconcile.py +0 -0
  269. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/reconcile_tick.py +0 -0
  270. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/refine_chat.py +0 -0
  271. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/release_cordon.py +0 -0
  272. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/release_gate.py +0 -0
  273. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/release_propagate.py +0 -0
  274. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/release_verify.py +0 -0
  275. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/release_window.py +0 -0
  276. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/repo_dormancy.py +0 -0
  277. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/repo_edit.py +0 -0
  278. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/repo_onboard.py +0 -0
  279. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/rest_schema.py +0 -0
  280. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/restart_cmd.py +0 -0
  281. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/revalidate.py +0 -0
  282. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/scorecard.py +0 -0
  283. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/self_health.py +0 -0
  284. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/serve_app.py +0 -0
  285. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  286. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  287. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  288. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  289. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  290. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/skills/portal-followup/SKILL.md +0 -0
  291. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/skills/release-now/SKILL.md +0 -0
  292. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  293. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  294. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/skills/update-issue/SKILL.md +0 -0
  295. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/smoke.py +0 -0
  296. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/smoke_tags.py +0 -0
  297. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/spend_ceiling.py +0 -0
  298. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/split_work.py +0 -0
  299. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/sql.py +0 -0
  300. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/stage_projection.py +0 -0
  301. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/state.py +0 -0
  302. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/store_migrate.py +0 -0
  303. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/store_parity.py +0 -0
  304. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/templates/deploy-cloudflare.node.yml +0 -0
  305. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/test_author.py +0 -0
  306. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/test_chat.py +0 -0
  307. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/test_orchestrator.py +0 -0
  308. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/test_report.py +0 -0
  309. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/tui_pty_driver.py +0 -0
  310. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/tui_release.py +0 -0
  311. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/uat_checks.py +0 -0
  312. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/usage.py +0 -0
  313. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/usage_limits.py +0 -0
  314. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/usage_rollup.py +0 -0
  315. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/win_native_driver.py +0 -0
  316. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coord/worker_events.py +0 -0
  317. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/coordinator.example.yml +0 -0
  318. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/deploy/coord-agent.service +0 -0
  319. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/deploy/coord-backup.service +0 -0
  320. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/deploy/coord-backup.timer +0 -0
  321. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/deploy/coord-db-backup.service +0 -0
  322. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/deploy/coord-db-backup.sh +0 -0
  323. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/deploy/coord-db-backup.timer +0 -0
  324. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/deploy/coord-dr-verify.service +0 -0
  325. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/deploy/coord-dr-verify.timer +0 -0
  326. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/deploy/coord-drive-queue.service +0 -0
  327. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/deploy/coord-drive-queue.timer +0 -0
  328. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/deploy/coord-failure-notify.service +0 -0
  329. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/deploy/coord-failure-notify.sh +0 -0
  330. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/deploy/coord-fleet-watchdog.service +0 -0
  331. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/deploy/coord-fleet-watchdog.timer +0 -0
  332. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/deploy/coord-notify.service +0 -0
  333. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/deploy/coord-notify.timer +0 -0
  334. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/deploy/coord-release-propagate.service +0 -0
  335. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/deploy/coord-release-propagate.timer +0 -0
  336. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/deploy/coord-release-window.service +0 -0
  337. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/deploy/coord-release-window.timer +0 -0
  338. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/deploy/coord-serve.service +0 -0
  339. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/deploy/coord-web-dist-build.service +0 -0
  340. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/deploy/coord-web-dist-build.sh +0 -0
  341. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/deploy/coord-web-dist-build.timer +0 -0
  342. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/deploy/coord-web-rollback.sh +0 -0
  343. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/deploy/coord-web.service +0 -0
  344. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/deploy/node-shim.sh +0 -0
  345. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/docs/ADR_COORD_TUI_CI.md +0 -0
  346. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  347. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/docs/ADR_COORD_WEB_CI.md +0 -0
  348. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/docs/ADR_COORD_WEB_DIST.md +0 -0
  349. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
  350. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/docs/AGENT_OPERATIONS.md +0 -0
  351. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/docs/ARCHITECTURE.md +0 -0
  352. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/docs/ARCH_SECURITY_GATES.md +0 -0
  353. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/docs/COCKPIT.md +0 -0
  354. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/docs/CONTROL_CENTER.md +0 -0
  355. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/docs/COST_DISCIPLINE.md +0 -0
  356. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/docs/CROSS_PLATFORM.md +0 -0
  357. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/docs/CUSTOMER_FACING_APPS.md +0 -0
  358. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/docs/CUSTOMER_PORTAL.md +0 -0
  359. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/docs/DATA_STORE_SELECTION.md +0 -0
  360. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/docs/DISASTER_RECOVERY.md +0 -0
  361. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/docs/DRIVE_QUEUE.md +0 -0
  362. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/docs/EPHEMERAL_WORKERS.md +0 -0
  363. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/docs/FORGE_MIGRATION.md +0 -0
  364. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/docs/GRAPHIFY_SETUP.md +0 -0
  365. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/docs/ISSUE_GUIDANCE.md +0 -0
  366. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/docs/MAC_MINI.md +0 -0
  367. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  368. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/docs/NOTIFIER.md +0 -0
  369. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/docs/OPENCODE_VERIFICATION.md +0 -0
  370. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/docs/OPERATING_GOTCHAS.md +0 -0
  371. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/docs/OPERATOR_GUIDES.md +0 -0
  372. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/docs/ORACLE_LOOP.md +0 -0
  373. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/docs/PHONE_WEBAPP.md +0 -0
  374. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/docs/PIPELINE_V2.md +0 -0
  375. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/docs/PLATFORM_EVOLUTION.md +0 -0
  376. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/docs/SECOND_BACKEND.md +0 -0
  377. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/docs/STORE_SERVICE.md +0 -0
  378. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  379. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/docs/WEB_CONTROL_CENTER.md +0 -0
  380. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/docs/WSL_WINDOWS_WORKER.md +0 -0
  381. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/docs/mocks/web/README.md +0 -0
  382. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/docs/mocks/web/_tokens.css +0 -0
  383. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/docs/mocks/web/issue-detail.html +0 -0
  384. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/docs/mocks/web/pipeline-narrow.html +0 -0
  385. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/docs/mocks/web/pipeline-wide.html +0 -0
  386. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/graphify-out/.gitignore +0 -0
  387. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/install-agent.sh +0 -0
  388. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/pyproject.toml +0 -0
  389. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/scripts/audit_review_verdict_overrides.py +0 -0
  390. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  391. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/scripts/azure-workers/build-worker-image.sh +0 -0
  392. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/scripts/azure-workers/coordinator-machine.py +0 -0
  393. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/scripts/azure-workers/dr-down.sh +0 -0
  394. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/scripts/azure-workers/dr-up.sh +0 -0
  395. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/scripts/azure-workers/epic-down.sh +0 -0
  396. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/scripts/azure-workers/epic-up.sh +0 -0
  397. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/scripts/azure-workers/preflight.sh +0 -0
  398. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/scripts/azure-workers/provision-server.sh +0 -0
  399. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/scripts/azure-workers/provision-worker.sh +0 -0
  400. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  401. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  402. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/scripts/azure-workers/throwaway-vm.sh +0 -0
  403. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/scripts/azure-workers/verify-github-token.sh +0 -0
  404. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/scripts/check_gh_argv_containment.py +0 -0
  405. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/scripts/codegen.py +0 -0
  406. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/scripts/coord-test-runner.sh +0 -0
  407. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
  408. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
  409. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
  410. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
  411. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/scripts/coord-venv-rollback.sh +0 -0
  412. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/scripts/drive-batch.sh +0 -0
  413. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/scripts/extract-coord-tui.sh +0 -0
  414. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/scripts/fleet_watchdog.py +0 -0
  415. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/scripts/gen_board_fixture.py +0 -0
  416. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/scripts/gen_mock_index.py +0 -0
  417. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/scripts/lib/provision-core.sh +0 -0
  418. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/scripts/next_release_tag.py +0 -0
  419. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/scripts/provision-machine.sh +0 -0
  420. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/scripts/run_tests_in_populated_home.sh +0 -0
  421. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/scripts/run_tests_without_gh.sh +0 -0
  422. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/scripts/setup-macmini.sh +0 -0
  423. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/scripts/smoke_437_interactive.py +0 -0
  424. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/scripts/verify-provision-noble.sh +0 -0
  425. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/scripts/verify_878_review_capture.py +0 -0
  426. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/scripts/verify_release_published.py +0 -0
  427. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/scripts/verify_release_wheel.py +0 -0
  428. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/setup.cfg +0 -0
  429. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/SMOKE_SET.md +0 -0
  430. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/__init__.py +0 -0
  431. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/acceptance/ms-37/conftest.py +0 -0
  432. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/acceptance/ms-37/contract.md +0 -0
  433. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/acceptance/ms-37/manifest.yml +0 -0
  434. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  435. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  436. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/acceptance/ms-51/contract.md +0 -0
  437. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  438. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  439. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/acceptance/ms-51/manifest.yml +0 -0
  440. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  441. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/acceptance/ms-51/tsconfig.json +0 -0
  442. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  443. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/backends.py +0 -0
  444. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/conftest.py +0 -0
  445. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/fixtures/board-pipeline-basic.json +0 -0
  446. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  447. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  448. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  449. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  450. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/fixtures/playwright/all_pass.json +0 -0
  451. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  452. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/fixtures/playwright/mixed_fail.json +0 -0
  453. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  454. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  455. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/fixtures/playwright/skip.json +0 -0
  456. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/fixtures/playwright/truncated.json +0 -0
  457. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  458. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  459. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  460. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  461. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/fixtures/test_report/pytest_error_log_record.txt +0 -0
  462. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  463. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  464. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  465. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  466. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_acceptance.py +0 -0
  467. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_acceptance_drivers.py +0 -0
  468. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_agent.py +0 -0
  469. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_agent_api_error.py +0 -0
  470. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_agent_app.py +0 -0
  471. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_agent_branch_base.py +0 -0
  472. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_agent_branch_capture.py +0 -0
  473. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_agent_config_free_1712.py +0 -0
  474. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_agent_deploy_units_endpoint.py +0 -0
  475. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_agent_dirty_worktree.py +0 -0
  476. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  477. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_agent_graph_self_heal.py +0 -0
  478. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_agent_health_h3.py +0 -0
  479. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_agent_idle_restart.py +0 -0
  480. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_agent_push_failure.py +0 -0
  481. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_agent_reap.py +0 -0
  482. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_agent_repos_and_pull.py +0 -0
  483. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_agent_restart_services_endpoint.py +0 -0
  484. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_agent_skills_self_heal.py +0 -0
  485. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_agent_startup_diagnostics.py +0 -0
  486. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_agent_update.py +0 -0
  487. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_agent_update_bluegreen.py +0 -0
  488. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_agent_usage_limit.py +0 -0
  489. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_agent_zero_commit.py +0 -0
  490. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_ambient_home_isolation.py +0 -0
  491. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_approve_capability_reroute_3241.py +0 -0
  492. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_approve_dependency_busy_2804.py +0 -0
  493. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_approve_reject_plan.py +0 -0
  494. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_approve_usage_gate.py +0 -0
  495. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_approved_work_2532.py +0 -0
  496. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_approved_work_2996.py +0 -0
  497. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_assignment_already_recorded_daemon.py +0 -0
  498. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_audit_log.py +0 -0
  499. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_audit_outcome.py +0 -0
  500. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_audit_query.py +0 -0
  501. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_auto_loop.py +0 -0
  502. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_auto_release_publish_2035.py +0 -0
  503. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_backend_selection.py +0 -0
  504. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_backup.py +0 -0
  505. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_base_checkout_restore.py +0 -0
  506. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_block_log.py +0 -0
  507. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_board_cap_762.py +0 -0
  508. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_board_fixture.py +0 -0
  509. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_board_read_path.py +0 -0
  510. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_board_schema.py +0 -0
  511. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_board_service.py +0 -0
  512. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_board_state.py +0 -0
  513. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_board_wire.py +0 -0
  514. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_brain.py +0 -0
  515. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_branch_model.py +0 -0
  516. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_bug_intake.py +0 -0
  517. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_bugbash.py +0 -0
  518. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_build_worker_image_env_update.py +0 -0
  519. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cargo_cache.py +0 -0
  520. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_check_gh_argv_containment.py +0 -0
  521. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_ci_acceptance_gate_1950.py +0 -0
  522. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_ci_fix.py +0 -0
  523. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_ci_github.py +0 -0
  524. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_ci_gitlab.py +0 -0
  525. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_ci_parity_2091.py +0 -0
  526. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_ci_store.py +0 -0
  527. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_claim.py +0 -0
  528. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_claude_md_budget.py +0 -0
  529. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_claude_setup_token.py +0 -0
  530. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_acceptance.py +0 -0
  531. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_assign.py +0 -0
  532. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  533. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_assign_interactive_remote.py +0 -0
  534. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_assign_provider.py +0 -0
  535. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  536. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_audit.py +0 -0
  537. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_chat_continue.py +0 -0
  538. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_ci.py +0 -0
  539. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_codegen.py +0 -0
  540. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_decide.py +0 -0
  541. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_diagnose_capability_rules.py +0 -0
  542. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_diagnose_config_provenance.py +0 -0
  543. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_diagnose_forge_availability.py +0 -0
  544. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_diagnose_graph.py +0 -0
  545. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_diagnose_self.py +0 -0
  546. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_diagnose_test_coverage.py +0 -0
  547. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_doctor.py +0 -0
  548. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_doctor_config_free_1801.py +0 -0
  549. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  550. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_doctor_store_backend_3084.py +0 -0
  551. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_drive.py +0 -0
  552. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_drive_queue.py +0 -0
  553. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_escalate.py +0 -0
  554. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_fix_headless_review.py +0 -0
  555. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_gate_a.py +0 -0
  556. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_install_drift.py +0 -0
  557. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_install_skills.py +0 -0
  558. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_issue_comment.py +0 -0
  559. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_issue_create_label.py +0 -0
  560. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_issue_reopen.py +0 -0
  561. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_issue_view_list.py +0 -0
  562. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_issues.py +0 -0
  563. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_merge.py +0 -0
  564. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_milestone_assign.py +0 -0
  565. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_milestone_capture.py +0 -0
  566. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_milestone_chat_add_child.py +0 -0
  567. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_milestone_dispatch.py +0 -0
  568. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_milestone_gate_b.py +0 -0
  569. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_milestone_gate_c.py +0 -0
  570. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_milestone_order.py +0 -0
  571. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  572. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_milestone_ship.py +0 -0
  573. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_network.py +0 -0
  574. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_new_issue_chat.py +0 -0
  575. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_plans.py +0 -0
  576. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_portal.py +0 -0
  577. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_pr.py +0 -0
  578. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_pull_artifact.py +0 -0
  579. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_queue.py +0 -0
  580. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_reattach_sessions.py +0 -0
  581. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_refine_board.py +0 -0
  582. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_release_preflight.py +0 -0
  583. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_release_propagate.py +0 -0
  584. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_release_window.py +0 -0
  585. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_repo_2220.py +0 -0
  586. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
  587. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_scorecard.py +0 -0
  588. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_serve_store_backend_3084.py +0 -0
  589. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_set_review_findings.py +0 -0
  590. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_status_advisory_terminal.py +0 -0
  591. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_status_contested_tag.py +0 -0
  592. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_status_invariant_alarms.py +0 -0
  593. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_status_machine_fault.py +0 -0
  594. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_status_merge_queue.py +0 -0
  595. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_status_provider.py +0 -0
  596. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_status_retried_3340.py +0 -0
  597. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_status_review_finalizing.py +0 -0
  598. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_status_supervisor_3366.py +0 -0
  599. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_status_test_failed_tag.py +0 -0
  600. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_status_usage_limit.py +0 -0
  601. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_sync_comments_873.py +0 -0
  602. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_test_plan.py +0 -0
  603. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_track.py +0 -0
  604. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_tui_update.py +0 -0
  605. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cli_wait.py +0 -0
  606. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_client.py +0 -0
  607. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_client_base_install.py +0 -0
  608. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_client_config_cache_atomic_3052.py +0 -0
  609. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_client_resource_migration_1946.py +0 -0
  610. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_commands_common.py +0 -0
  611. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_comments.py +0 -0
  612. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_completion_summary.py +0 -0
  613. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_config_audit.py +0 -0
  614. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_config_drift_check.py +0 -0
  615. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_config_effective.py +0 -0
  616. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_config_pricing.py +0 -0
  617. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  618. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_config_usage_gate.py +0 -0
  619. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_confirm_test.py +0 -0
  620. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_conflict_fix.py +0 -0
  621. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_conflict_fix_semantic.py +0 -0
  622. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
  623. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_coord_test.py +0 -0
  624. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
  625. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_coord_test_runner_baseline.py +0 -0
  626. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_coord_test_runner_populated_home.py +0 -0
  627. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_coord_test_runner_routing.py +0 -0
  628. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_coord_test_runner_toolchain.py +0 -0
  629. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_coord_uat.py +0 -0
  630. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_coord_web_sse_restart_live.py +0 -0
  631. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_coordinator_machine.py +0 -0
  632. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_cross_platform_imports.py +0 -0
  633. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_dao.py +0 -0
  634. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_dashboard.py +0 -0
  635. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_dashboard_api.py +0 -0
  636. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_dashboard_fixture.py +0 -0
  637. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_dashboard_server.py +0 -0
  638. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_dashboard_terminal.py +0 -0
  639. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_dashboard_terminal_live.py +0 -0
  640. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_db.py +0 -0
  641. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_dead_end.py +0 -0
  642. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_decomposition_chat.py +0 -0
  643. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_deploy_coord_db_backup.py +0 -0
  644. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_deploy_coord_web_dist.py +0 -0
  645. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_deploy_coord_web_rollback.py +0 -0
  646. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_deploy_db_backup_unit.py +0 -0
  647. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_deploy_drive_queue_unit.py +0 -0
  648. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_deploy_failure_notify_unit.py +0 -0
  649. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_deploy_manifest.py +0 -0
  650. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_deploy_notify_unit.py +0 -0
  651. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_deploy_units_lane.py +0 -0
  652. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_deploy_web_unit.py +0 -0
  653. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_deprecation_telemetry.py +0 -0
  654. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_deps.py +0 -0
  655. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_diagnose.py +0 -0
  656. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_dispatch.py +0 -0
  657. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_dispatch_liveness.py +0 -0
  658. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_dispatch_target_validation.py +0 -0
  659. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_dispatch_workers.py +0 -0
  660. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_dist_name.py +0 -0
  661. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_done_housekeeping.py +0 -0
  662. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_dr_azure_scripts.py +0 -0
  663. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_dr_promote.py +0 -0
  664. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_dr_verify.py +0 -0
  665. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_drive.py +0 -0
  666. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_drive_machine_fault.py +0 -0
  667. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_drive_queue.py +0 -0
  668. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_drive_queue_blocked_rendering.py +0 -0
  669. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_drive_queue_launch_argv.py +0 -0
  670. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_drive_queue_max_parallel_config.py +0 -0
  671. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
  672. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_drive_queue_roll_pending.py +0 -0
  673. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
  674. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_drive_sessions_snapshot.py +0 -0
  675. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_drive_state.py +0 -0
  676. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_drive_tmux.py +0 -0
  677. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_epic_up_capability_detection.py +0 -0
  678. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  679. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_epic_up_image_provenance.py +0 -0
  680. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_errors.py +0 -0
  681. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_events.py +0 -0
  682. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_failure_class.py +0 -0
  683. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_failure_classifier.py +0 -0
  684. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_filelock.py +0 -0
  685. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  686. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_fix_escalation_classifier.py +0 -0
  687. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_fix_of_force_override.py +0 -0
  688. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_fleet_config_health.py +0 -0
  689. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_fleet_health_probes.py +0 -0
  690. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_fleet_health_snapshot.py +0 -0
  691. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_fleet_watchdog.py +0 -0
  692. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_forge_availability.py +0 -0
  693. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_freshness.py +0 -0
  694. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_gate_a.py +0 -0
  695. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_gate_b.py +0 -0
  696. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_gate_snapshot_staleness.py +0 -0
  697. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_gates.py +0 -0
  698. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  699. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_gen_mock_index.py +0 -0
  700. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_generated_rust_fixture.py +0 -0
  701. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_generated_rust_requests.py +0 -0
  702. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_generated_types_fixture.py +0 -0
  703. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_github_ops.py +0 -0
  704. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_github_throttle.py +0 -0
  705. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_goal.py +0 -0
  706. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_graph_health.py +0 -0
  707. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_graph_selfheal_absent_2237.py +0 -0
  708. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_gtk_native_driver.py +0 -0
  709. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_handoff.py +0 -0
  710. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_health_checks.py +0 -0
  711. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_health_cli.py +0 -0
  712. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_health_cli_graph.py +0 -0
  713. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_health_config.py +0 -0
  714. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_health_context.py +0 -0
  715. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_health_coord_tui_ci_pin.py +0 -0
  716. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_health_coord_web_ci_pin.py +0 -0
  717. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_health_deploy_lane_facts.py +0 -0
  718. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_health_fix.py +0 -0
  719. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_health_incident_regression.py +0 -0
  720. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_health_issues_sync_staleness.py +0 -0
  721. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_health_pr_churn.py +0 -0
  722. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_health_pypi.py +0 -0
  723. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_health_registry.py +0 -0
  724. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_health_release_cordon_probe.py +0 -0
  725. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_health_timer_active.py +0 -0
  726. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_health_toolchain.py +0 -0
  727. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_health_unit_drift.py +0 -0
  728. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_health_unit_enablement.py +0 -0
  729. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_health_wedged_drive_queue.py +0 -0
  730. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_hooks.py +0 -0
  731. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_housekeeping.py +0 -0
  732. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_human_attended_437.py +0 -0
  733. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_init.py +0 -0
  734. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_install_agent_venv_2911.py +0 -0
  735. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_integration.py +0 -0
  736. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_interactive.py +0 -0
  737. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_interactive_briefing_echo.py +0 -0
  738. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_interactive_pane_log_2541.py +0 -0
  739. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_interactive_prefill_state.py +0 -0
  740. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_interactive_session_relaunch.py +0 -0
  741. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_interactive_test_verdict_backstop.py +0 -0
  742. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_interactive_token_attribution.py +0 -0
  743. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_interactive_worktree.py +0 -0
  744. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_invariant_alarms.py +0 -0
  745. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_issue_store_seam.py +0 -0
  746. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_issues_sync_status.py +0 -0
  747. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_liveness_auditor.py +0 -0
  748. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_liveness_notify.py +0 -0
  749. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_lock_contention_ratchet.py +0 -0
  750. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_mac_native_driver.py +0 -0
  751. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_machine_fault.py +0 -0
  752. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_machine_metrics.py +0 -0
  753. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_machine_onboard.py +0 -0
  754. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_machine_pause.py +0 -0
  755. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_machine_stats.py +0 -0
  756. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_merge_queue.py +0 -0
  757. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_merge_verify.py +0 -0
  758. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_milestone_chat.py +0 -0
  759. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_milestone_dispatch.py +0 -0
  760. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_milestone_gate.py +0 -0
  761. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_milestone_order.py +0 -0
  762. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_milestone_seam.py +0 -0
  763. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_mock_author.py +0 -0
  764. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_model_tiering.py +0 -0
  765. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_models.py +0 -0
  766. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_models_config_labels.py +0 -0
  767. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_needs_attention.py +0 -0
  768. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_network.py +0 -0
  769. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_new_issue_chat.py +0 -0
  770. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_next_release_tag.py +0 -0
  771. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_node_shim.py +0 -0
  772. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_notifier_baseline.py +0 -0
  773. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_notifier_cli.py +0 -0
  774. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_notifier_collect.py +0 -0
  775. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_notifier_config.py +0 -0
  776. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_notifier_drive_seam.py +0 -0
  777. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_notifier_isolation.py +0 -0
  778. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_notifier_predicate.py +0 -0
  779. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_notifier_quiet_hours.py +0 -0
  780. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_notifier_service.py +0 -0
  781. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_notify.py +0 -0
  782. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_notify_drain.py +0 -0
  783. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_openapi.py +0 -0
  784. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_operational_defaults.py +0 -0
  785. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_overlap_fence.py +0 -0
  786. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_overlap_predict.py +0 -0
  787. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_packaged_deploy_units.py +0 -0
  788. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_parentage.py +0 -0
  789. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_paste_landed.py +0 -0
  790. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
  791. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_pipeline.py +0 -0
  792. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_plan_followup_approve_plan_command.py +0 -0
  793. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_plan_followup_pr_command.py +0 -0
  794. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_plan_followup_review_command.py +0 -0
  795. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_plan_only.py +0 -0
  796. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_plan_parser.py +0 -0
  797. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_platform_paths.py +0 -0
  798. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_portal_bridge.py +0 -0
  799. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_portal_config.py +0 -0
  800. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_portal_store.py +0 -0
  801. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_portal_sync.py +0 -0
  802. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_pr_body_lint.py +0 -0
  803. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_prereqs.py +0 -0
  804. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_production_db_guard.py +0 -0
  805. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_progress.py +0 -0
  806. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_provider_seam.py +0 -0
  807. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_providers.py +0 -0
  808. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_providers_config_labels.py +0 -0
  809. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_providers_pty.py +0 -0
  810. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_provision_core.py +0 -0
  811. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_provision_machine.py +0 -0
  812. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_py_rust_mirror_inventory.py +0 -0
  813. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_quiet_hours.py +0 -0
  814. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_quiet_hours_store_2146.py +0 -0
  815. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_reap_merged_sessions.py +0 -0
  816. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_reap_stale_interactive_tick.py +0 -0
  817. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_reconcile.py +0 -0
  818. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_reconcile_branch.py +0 -0
  819. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_reconcile_completions.py +0 -0
  820. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
  821. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_reconcile_merges.py +0 -0
  822. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_reconcile_no_agent_record.py +0 -0
  823. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_reconcile_tick.py +0 -0
  824. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_reconcile_usage_limit_done.py +0 -0
  825. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_refine_chat.py +0 -0
  826. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_release_cordon_2101.py +0 -0
  827. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  828. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_release_cordon_deadlock_2240.py +0 -0
  829. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_release_cordon_drain_stall_3336.py +0 -0
  830. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_release_cordon_stuck_2490.py +0 -0
  831. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_release_gate.py +0 -0
  832. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_release_propagate.py +0 -0
  833. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_release_propagate_threshold.py +0 -0
  834. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_release_roll_between_legs_2854.py +0 -0
  835. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_release_roll_window_handoff.py +0 -0
  836. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_release_unified_1242.py +0 -0
  837. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_release_verify.py +0 -0
  838. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_release_window.py +0 -0
  839. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_remote_auto_prune.py +0 -0
  840. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_remote_interactive_reaper.py +0 -0
  841. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_repo_add.py +0 -0
  842. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_repo_dormancy.py +0 -0
  843. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_repo_edit_2220.py +0 -0
  844. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_repo_graph_fleet_2237.py +0 -0
  845. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_repo_max_parallel_3423.py +0 -0
  846. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_repo_onboard_2220.py +0 -0
  847. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_report_result_push.py +0 -0
  848. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_restart_cmd.py +0 -0
  849. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_retry.py +0 -0
  850. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_retry_advisory_1606.py +0 -0
  851. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_retry_escalation_classify_3360.py +0 -0
  852. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_retry_type_1636.py +0 -0
  853. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_revalidate.py +0 -0
  854. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_review_end_review_without_verdict.py +0 -0
  855. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_review_parse_failure_diagnostic.py +0 -0
  856. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_review_reaffirm.py +0 -0
  857. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_review_state.py +0 -0
  858. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_review_verdict_backstop.py +0 -0
  859. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_review_verdict_override_audit.py +0 -0
  860. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_review_verdict_relay.py +0 -0
  861. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_review_zero_commits.py +0 -0
  862. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_scoped_review_wiring.py +0 -0
  863. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_scorecard.py +0 -0
  864. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_self_health.py +0 -0
  865. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_serve.py +0 -0
  866. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_serve_app.py +0 -0
  867. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_serve_app_board_trim.py +0 -0
  868. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_serve_rest_routes.py +0 -0
  869. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_session.py +0 -0
  870. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_slice_issue_attribution.py +0 -0
  871. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_smoke.py +0 -0
  872. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_smoke_fanout_manifest_3333.py +0 -0
  873. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_smoke_live_checkout_restore.py +0 -0
  874. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_smoke_workflow.py +0 -0
  875. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_spend_ceiling.py +0 -0
  876. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_spend_ceiling_coordinator.py +0 -0
  877. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_split.py +0 -0
  878. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_split_work.py +0 -0
  879. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_sql_dialect.py +0 -0
  880. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_sqlite_connect_ratchet.py +0 -0
  881. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_stage_projection.py +0 -0
  882. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_stale_busy_reviewer_697.py +0 -0
  883. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_stalled_pipeline.py +0 -0
  884. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_state.py +0 -0
  885. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_state_review_findings_daemon.py +0 -0
  886. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_status_fleet_footer.py +0 -0
  887. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_stop_1567.py +0 -0
  888. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_store_contract.py +0 -0
  889. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_store_migrate.py +0 -0
  890. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_stuck.py +0 -0
  891. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
  892. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_terminal_command.py +0 -0
  893. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_test_author.py +0 -0
  894. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_test_chat.py +0 -0
  895. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_test_orchestrator.py +0 -0
  896. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_test_report.py +0 -0
  897. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_test_verdict_parsing.py +0 -0
  898. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_test_verdict_transcript_floor.py +0 -0
  899. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_text_io_encoding_audit.py +0 -0
  900. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_thin_client_board_audit.py +0 -0
  901. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_thin_client_config_load_1080.py +0 -0
  902. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_thin_client_daemon_routing_906.py +0 -0
  903. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_throwaway_vm.py +0 -0
  904. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_tmux_host.py +0 -0
  905. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_tmux_session.py +0 -0
  906. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_transcript_floor.py +0 -0
  907. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_tui_pty_driver.py +0 -0
  908. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_uat_checks.py +0 -0
  909. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_usage.py +0 -0
  910. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_usage_limits.py +0 -0
  911. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_usage_rollup.py +0 -0
  912. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_venv_live_install_2121.py +0 -0
  913. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_version_single_source.py +0 -0
  914. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_watch.py +0 -0
  915. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_win_native_driver.py +0 -0
  916. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  917. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_worker_env_venv_isolation.py +0 -0
  918. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_worker_events.py +0 -0
  919. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_worker_image_pin_sync.py +0 -0
  920. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_worker_safety.py +0 -0
  921. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_worker_test_scoping.py +0 -0
  922. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_worktree.py +0 -0
  923. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  924. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/tests/test_write_parity.py +0 -0
  925. {code_coordinator-0.5.551 → code_coordinator-0.5.553}/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.551
3
+ Version: 0.5.553
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.551
3
+ Version: 0.5.553
4
4
  Summary: Coordinate Claude Code workers across multiple machines and repos.
5
5
  Author-email: John Donaghy <johnfdonaghy@gmail.com>
6
6
  License-Expression: LicenseRef-FSL-1.1-MIT
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "0.5.551",
2
+ "tag": "0.5.553",
3
3
  "distance": 0,
4
- "node": "g4a9a986d2a2bc934495d202b1197b82782c1d73f",
4
+ "node": "g08b8bc7ce4b5def5fdf426d91f30704832a6c88b",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-10-01"
@@ -427,6 +427,20 @@ class AcceptanceDriverConfig:
427
427
  ``pytest tests/acceptance/{ms}`` legitimately has no entry point, which
428
428
  is exactly why #1175's blanket refusal only ever broke the Rust route.
429
429
 
430
+ #3509: the four Tier-2 lane kinds (:data:`TIER2_LANE_KINDS` —
431
+ ``tui-pty``/``win-native``/``mac-native``/``gtk-native``) are the one
432
+ exception to "folded into the sealed set" above. Their ``entrypoint:``
433
+ is a smoke spec that ``coord bugbash`` (#3487) expects every fix to
434
+ GROW, with no independent ``test-author`` the way ``tests/acceptance/``
435
+ has one — full sealing made it impossible for a ``type="work"`` worker
436
+ to add the smoke-spec step its own fix is required to ship. See
437
+ :meth:`AcceptanceConfig.sealed_paths` and
438
+ :meth:`AcceptanceConfig.additive_only_entrypoints` for the derived sets,
439
+ and :func:`coord.review._lane_entrypoint_violation_lines` for the
440
+ mandatory (but narrower) rule that still applies: additions are
441
+ unrestricted, but removing or rewriting a pre-existing line is still a
442
+ mandatory ``request-changes``.
443
+
430
444
  ``match`` and ``routes`` implement #1125's in-repo path routing: a repo
431
445
  entry with a non-empty ``routes`` list is a *router* — its own
432
446
  ``kind``/``run``/``mock``/``capability``/``setup``/``entrypoint`` are
@@ -469,6 +483,20 @@ class AcceptanceDriverConfig:
469
483
  # directory without the trailing slash.
470
484
  SEALED_ACCEPTANCE_DIR = "tests/acceptance/"
471
485
 
486
+ # #3509: the four Tier-2 (epic #3482) platform-lane acceptance driver kinds
487
+ # whose `entrypoint:` is a smoke spec `coord bugbash` (#3487) grows one step
488
+ # at a time, not an oracle a `test-author` writes once and a worker is
489
+ # graded against — see `AcceptanceConfig.sealed_paths`'s docstring for why
490
+ # that makes full sealing wrong for exactly these four kinds. Kept in sync
491
+ # with `coord.bugbash.LANE_DRIVER_KINDS` by hand rather than imported — the
492
+ # same hand-sync discipline `coord.acceptance_drivers.SUPPORTED_KINDS` and
493
+ # `coord.bugbash.LANE_DRIVER_KINDS` already use for each other, for the same
494
+ # reason: `coord.bugbash` deliberately takes a duck-typed `config: Any`
495
+ # rather than importing this (foundational, widely-imported) module, so
496
+ # this module returns the favor instead of introducing a config->feature
497
+ # dependency from the other side.
498
+ TIER2_LANE_KINDS = frozenset({"tui-pty", "win-native", "mac-native", "gtk-native"})
499
+
472
500
 
473
501
  def entrypoint_sibling_acceptance_dir(entrypoint: str) -> str:
474
502
  """The ``acceptance/`` directory an entrypoint-linked driver ``include!``s
@@ -496,6 +524,27 @@ class AcceptanceConfig:
496
524
 
497
525
  drivers: dict[str, AcceptanceDriverConfig] = field(default_factory=dict)
498
526
 
527
+ def _entrypoint_kind_pairs(self, repo_name: str) -> list[tuple[str, str]]:
528
+ """``(entrypoint, kind)`` for every declared entrypoint of
529
+ *repo_name*, deduped on the entrypoint, declaration order preserved
530
+ — the one traversal :meth:`entrypoints`, :meth:`sealed_paths` and
531
+ (#3509) :meth:`additive_only_entrypoints` all build on, so "which
532
+ driver kind owns this entrypoint" is answered in exactly one place
533
+ rather than three copies of the same ``for cfg in [entry,
534
+ *entry.routes]`` walk silently drifting apart.
535
+ """
536
+ entry = self.drivers.get(repo_name)
537
+ if entry is None:
538
+ return []
539
+ out: list[tuple[str, str]] = []
540
+ seen: set[str] = set()
541
+ for cfg in [entry, *entry.routes]:
542
+ ep = cfg.entrypoint.strip()
543
+ if ep and ep not in seen:
544
+ seen.add(ep)
545
+ out.append((ep, cfg.kind))
546
+ return out
547
+
499
548
  def entrypoints(self, repo_name: str) -> list[str]:
500
549
  """Every ``entrypoint:`` declared by *repo_name*'s acceptance driver
501
550
  (#1552), deduped, declaration order preserved.
@@ -508,16 +557,31 @@ class AcceptanceConfig:
508
557
  flat repo contributes at most its own. Repos with no driver — and
509
558
  drivers whose suite is directory-discovered (``cli-pytest``) —
510
559
  return ``[]``.
560
+
561
+ Includes Tier-2 lane-kind entrypoints (:data:`TIER2_LANE_KINDS`) —
562
+ this is "every entrypoint the repo declares", not "every SEALED
563
+ entrypoint"; use :meth:`sealed_paths` for the sealed subset and
564
+ :meth:`additive_only_entrypoints` for the lane-kind one (#3509).
511
565
  """
512
- entry = self.drivers.get(repo_name)
513
- if entry is None:
514
- return []
515
- out: list[str] = []
516
- for cfg in [entry, *entry.routes]:
517
- ep = cfg.entrypoint.strip()
518
- if ep and ep not in out:
519
- out.append(ep)
520
- return out
566
+ return [ep for ep, _kind in self._entrypoint_kind_pairs(repo_name)]
567
+
568
+ def additive_only_entrypoints(self, repo_name: str) -> list[str]:
569
+ """(#3509) The subset of :meth:`entrypoints` declared by a Tier-2
570
+ lane-kind driver (``tui-pty``/``win-native``/``mac-native``/
571
+ ``gtk-native``, :data:`TIER2_LANE_KINDS`) — deliberately excluded
572
+ from :meth:`sealed_paths`, see that method's docstring for why.
573
+
574
+ These paths are not a free-for-all: :func:`coord.review
575
+ ._lane_entrypoint_violation_lines` still mandatorily rejects a
576
+ ``type="work"`` diff that removes or rewrites a pre-existing line in
577
+ one of them (a deleted step, a loosened ``expect_*`` field, a raised
578
+ latency budget, a shortened idle window) — only ADDING to them (a
579
+ new step, or a wholly new spec file beside them) is unrestricted.
580
+ """
581
+ return [
582
+ ep for ep, kind in self._entrypoint_kind_pairs(repo_name)
583
+ if kind in TIER2_LANE_KINDS
584
+ ]
521
585
 
522
586
  def sealed_paths(self, repo_name: str) -> list[str]:
523
587
  """The full sealed-oracle path set for *repo_name* (#944 sealing v1,
@@ -554,11 +618,33 @@ class AcceptanceConfig:
554
618
  standalone ``coord-tui`` repo's flat ``tests/acceptance.rs``) has
555
619
  that sibling collapse onto ``SEALED_ACCEPTANCE_DIR`` itself — see the
556
620
  dedup below.
621
+
622
+ #3509: a Tier-2 lane-kind entrypoint (:data:`TIER2_LANE_KINDS` —
623
+ ``tui-pty``/``win-native``/``mac-native``/``gtk-native``) is
624
+ deliberately excluded from this set, entrypoint AND sibling dir
625
+ both. Those four kinds' ``entrypoint:`` is a smoke spec
626
+ ``coord bugbash`` (#3487) files findings against on the acceptance
627
+ line "the fix must add a Tier-1 shared conformance scenario or a
628
+ Tier-2 smoke-spec step that fails first" — a regression ratchet
629
+ every fix is expected to GROW, with no independent author the way
630
+ ``tests/acceptance/`` has one. Full sealing made that structurally
631
+ impossible: a ``type="work"`` diff adding the very step its own fix
632
+ requires tripped the same mandatory tamper banner as rewriting the
633
+ oracle it's graded against. Excluded here does not mean
634
+ unrestricted — :func:`coord.review._lane_entrypoint_violation_lines`
635
+ (fed by :meth:`additive_only_entrypoints`) still mandatorily rejects
636
+ a diff that removes or weakens a pre-existing line in one of these
637
+ files; only growing them is unconstrained. ``tui-tuidriver`` and
638
+ ``cli-pytest`` are unaffected — neither kind is in
639
+ :data:`TIER2_LANE_KINDS`, so their entrypoints stay fully sealed
640
+ exactly as before.
557
641
  """
558
642
  if not self.has_driver(repo_name):
559
643
  return []
560
644
  out = [SEALED_ACCEPTANCE_DIR]
561
- for ep in self.entrypoints(repo_name):
645
+ for ep, kind in self._entrypoint_kind_pairs(repo_name):
646
+ if kind in TIER2_LANE_KINDS:
647
+ continue
562
648
  if ep not in out:
563
649
  out.append(ep)
564
650
  sibling = entrypoint_sibling_acceptance_dir(ep)
@@ -3908,10 +3994,15 @@ def _parse_acceptance_routes(
3908
3994
  def _acceptance_entrypoint(entry: dict, label: str) -> str:
3909
3995
  """Validate an acceptance driver's optional ``entrypoint:`` (#1552).
3910
3996
 
3911
- Must be a repo-root-relative *file* path — it is folded into the sealed
3912
- set as an exact-match entry (:meth:`AcceptanceConfig.sealed_paths`), so
3913
- an absolute path or a trailing-slash directory would silently seal
3914
- nothing at all. Reject both here rather than at review time, where the
3997
+ Must be a repo-root-relative *file* path — for most ``kind`` values it
3998
+ is folded into the sealed set as an exact-match entry
3999
+ (:meth:`AcceptanceConfig.sealed_paths`), so an absolute path or a
4000
+ trailing-slash directory would silently seal nothing at all. (#3509:
4001
+ the four Tier-2 lane kinds in :data:`TIER2_LANE_KINDS` are the one
4002
+ exception — their entrypoint is additive-only, not sealed — but the
4003
+ same validation still applies: a malformed path there would just as
4004
+ silently defeat :meth:`AcceptanceConfig.additive_only_entrypoints`.)
4005
+ Reject both malformations here rather than at review time, where the
3915
4006
  only symptom would be a `test-author` bounced for a scope violation it
3916
4007
  cannot fix.
3917
4008
  """
@@ -69,6 +69,7 @@ import io
69
69
  import json
70
70
  import re
71
71
  import time
72
+ import zipfile
72
73
  from collections.abc import Callable, Iterable, Mapping, Sequence
73
74
  from dataclasses import dataclass, field
74
75
  from datetime import datetime, timezone
@@ -4995,6 +4996,39 @@ def _xlsx_cell(value: Any, meta: Mapping[str, Any] | None = None) -> Any:
4995
4996
  return str(value)
4996
4997
 
4997
4998
 
4999
+ #: Fixed stamp used in place of "now" everywhere `result_to_xlsx` would
5000
+ #: otherwise embed a save-time timestamp: `openpyxl` stamps
5001
+ #: `docProps/core.xml` (`created`/`modified`) and every zip entry's
5002
+ #: `date_time` with the wall-clock time *at save*, at one-second
5003
+ #: resolution — so two saves of the identical report that straddle a
5004
+ #: second boundary produce different bytes (#3500). Pinning both to this
5005
+ #: constant (the oldest timestamp the zip format can represent) makes
5006
+ #: `result_to_xlsx` a pure function of its input: identical reports produce
5007
+ #: byte-identical files, so they can be diffed.
5008
+ _XLSX_FIXED_STAMP = datetime(1980, 1, 1, 0, 0, 0)
5009
+
5010
+
5011
+ def _zero_xlsx_zip_timestamps(data: bytes) -> bytes:
5012
+ """Rewrite every zip entry's `date_time` in a saved `.xlsx` to the fixed
5013
+ stamp, leaving contents untouched. `openpyxl` has no option to pin this
5014
+ itself, so it has to be done as a post-processing pass over the bytes
5015
+ it produced (#3500)."""
5016
+ stamp = _XLSX_FIXED_STAMP.timetuple()[:6]
5017
+ src = io.BytesIO(data)
5018
+ dst = io.BytesIO()
5019
+ with (
5020
+ zipfile.ZipFile(src, "r") as zin,
5021
+ zipfile.ZipFile(dst, "w", zipfile.ZIP_DEFLATED) as zout,
5022
+ ):
5023
+ for item in zin.infolist():
5024
+ payload = zin.read(item.filename)
5025
+ info = zipfile.ZipInfo(item.filename, date_time=stamp)
5026
+ info.compress_type = item.compress_type
5027
+ info.external_attr = item.external_attr
5028
+ zout.writestr(info, payload)
5029
+ return dst.getvalue()
5030
+
5031
+
4998
5032
  def result_to_xlsx(result: "ReportResult | Mapping[str, Any]") -> bytes:
4999
5033
  """Serialise a :class:`ReportResult` as an ``.xlsx`` workbook.
5000
5034
 
@@ -5033,6 +5067,12 @@ def result_to_xlsx(result: "ReportResult | Mapping[str, Any]") -> bytes:
5033
5067
  totals = data.get("totals")
5034
5068
 
5035
5069
  wb = Workbook()
5070
+ # openpyxl otherwise stamps docProps/core.xml with wall-clock "now" at
5071
+ # save, which makes two saves of the same report byte-unequal whenever
5072
+ # they straddle a second boundary (#3500). Pin both to a fixed stamp so
5073
+ # `result_to_xlsx` is a pure function of `result`.
5074
+ wb.properties.created = _XLSX_FIXED_STAMP
5075
+ wb.properties.modified = _XLSX_FIXED_STAMP
5036
5076
  sheet = wb.active
5037
5077
  sheet.title = "Report"
5038
5078
  if columns:
@@ -5064,7 +5104,7 @@ def result_to_xlsx(result: "ReportResult | Mapping[str, Any]") -> bytes:
5064
5104
 
5065
5105
  buf = io.BytesIO()
5066
5106
  wb.save(buf)
5067
- return buf.getvalue()
5107
+ return _zero_xlsx_zip_timestamps(buf.getvalue())
5068
5108
 
5069
5109
 
5070
5110
  def xlsx_filename(result: "ReportResult | Mapping[str, Any]") -> str:
@@ -1475,6 +1475,108 @@ def _diff_paths_outside_sealed(diff_text: str, sealed_paths: list[str]) -> list[
1475
1475
  )
1476
1476
 
1477
1477
 
1478
+ _DIFF_GIT_HEADER_RE = re.compile(r"^diff --git a/(.*) b/(.*)$")
1479
+
1480
+
1481
+ def _diff_removed_content_lines(diff_text: str, path: str) -> list[str]:
1482
+ """Removed (``-``) content lines touching *path* in *diff_text* (#3509).
1483
+
1484
+ Scoped to the ``diff --git`` block(s) whose ``a/``/``b/`` side names
1485
+ *path* exactly, so an unrelated file's deletions elsewhere in a
1486
+ multi-file diff never leak in — mirrors
1487
+ :func:`_sealed_to_sealed_rename_exemptions`'s per-block scoping, just
1488
+ walking line-by-line instead of regex-splitting the whole diff, since
1489
+ callers here want ordered content, not just a yes/no per sealed prefix.
1490
+ Excludes diff/hunk header noise (``--- a/X``, ``+++ b/X``, ``@@ ... @@``)
1491
+ — only a line starting with a single ``-`` is a real removed line.
1492
+
1493
+ A wholly new file has no removed lines by construction: a ``+++
1494
+ b/path`` hunk against ``/dev/null`` is 100% ``+`` lines. A pure rename
1495
+ with no content change has none either (nothing in the renamed block is
1496
+ a ``-``/``+`` content line at all). So this returns ``[]`` for both —
1497
+ exactly the cases #3509 calls "unrestricted growth", never flagged.
1498
+ """
1499
+ removed: list[str] = []
1500
+ in_block = False
1501
+ for line in diff_text.splitlines():
1502
+ header = _DIFF_GIT_HEADER_RE.match(line)
1503
+ if header is not None:
1504
+ in_block = path in (header.group(1), header.group(2))
1505
+ continue
1506
+ if not in_block:
1507
+ continue
1508
+ if line.startswith("-") and not line.startswith("---"):
1509
+ removed.append(line[1:])
1510
+ return removed
1511
+
1512
+
1513
+ def _lane_entrypoint_violation_lines(
1514
+ diff_text: str | None,
1515
+ additive_only_entrypoints: list[str] | None,
1516
+ ) -> tuple[list[str] | None, list[str]]:
1517
+ """(#3509) Detect a MANDATORY violation of a Tier-2 lane-kind
1518
+ (``tui-pty``/``win-native``/``mac-native``/``gtk-native``) smoke-spec
1519
+ entry point's additive-only rule.
1520
+
1521
+ Unlike ``tests/acceptance/`` and the ``tui-tuidriver``/``cli-pytest``
1522
+ entry points, *additive_only_entrypoints*
1523
+ (:meth:`coord.config.AcceptanceConfig.additive_only_entrypoints` —
1524
+ deliberately excluded from :meth:`coord.config.AcceptanceConfig.
1525
+ sealed_paths` by #3509) is not sealed: a diff may add new steps, or
1526
+ whole new spec files beside it, freely. What it must never do is remove
1527
+ or rewrite a line that already existed — ``coord bugbash``'s whole
1528
+ ratchet (#3487) depends on every fix GROWING the smoke spec, never
1529
+ shrinking it, so a fix that "passes" by deleting the step it should
1530
+ have made pass instead (or loosening an ``expect_*`` field, raising a
1531
+ latency budget, shortening an idle window — all of which read,
1532
+ textually, as a removed line) must be rejected exactly as hard as an
1533
+ outright deletion.
1534
+
1535
+ Detection is deliberately conservative and line-based, not
1536
+ YAML-semantic: ANY removed content line inside one of these files
1537
+ (:func:`_diff_removed_content_lines`) is treated as a violation — the
1538
+ same "anything beyond pure addition is suspect" shape the existing
1539
+ test-author entry-point "additive registration only" guidance already
1540
+ uses (see ``build_review_briefing``'s ``sealed_entrypoints`` branch).
1541
+ The difference here is this one is MANDATORY and applies to every
1542
+ assignment type, not just advisory text for a browsing reviewer: there
1543
+ is no independent author ever expected to revisit this file, so a
1544
+ false negative here is permanent, not caught at a later authoring step.
1545
+
1546
+ Returns ``(touched_paths, banner_lines)`` the moment a removal is found
1547
+ in any entry, else ``(None, [])`` — including when
1548
+ *additive_only_entrypoints* is empty, *diff_text* is empty, or every
1549
+ touch is purely additive (a brand-new file, or only ``+`` lines
1550
+ appended to an existing one).
1551
+ """
1552
+ if not additive_only_entrypoints or not diff_text:
1553
+ return None, []
1554
+ touched = [
1555
+ p for p in additive_only_entrypoints
1556
+ if _diff_removed_content_lines(diff_text, p)
1557
+ ]
1558
+ if not touched:
1559
+ return None, []
1560
+ lines = [
1561
+ "## \U0001f6a8 SMOKE-SPEC ENTRY POINT WEAKENED",
1562
+ "",
1563
+ (
1564
+ "The diff removes or rewrites existing line(s) in this repo's "
1565
+ "Tier-2 lane smoke-spec entry point: "
1566
+ + ", ".join(f"`{p}`" for p in touched)
1567
+ + " (#3509). This file is additive-only: new steps and new spec "
1568
+ "files beside it are expected and welcome, but deleting or "
1569
+ "weakening an existing step — a removed step, a removed or "
1570
+ "loosened `expect_*` field, a raised latency budget, a "
1571
+ "shortened idle window — defeats the whole point of `coord "
1572
+ "bugbash`'s regression ratchet (#3487): every fix is expected "
1573
+ "to grow this spec, never shrink it. **request-changes is "
1574
+ "mandatory here**, regardless of anything else in this diff."
1575
+ ),
1576
+ ]
1577
+ return touched, lines
1578
+
1579
+
1478
1580
  # ── #3180: mandatory-verdict detection, shared by the briefing text AND the
1479
1581
  # dispatch-time mechanical short-circuit ────────────────────────────────────
1480
1582
  #
@@ -1597,17 +1699,24 @@ def _mechanical_mandatory_verdict(
1597
1699
  sealed_paths: list[str] | None,
1598
1700
  sealed_entrypoints: list[str] | None,
1599
1701
  coordinator_doc_paths: list[str] | None,
1702
+ additive_only_entrypoints: list[str] | None = None,
1600
1703
  ) -> tuple[str, list[str], list[str]] | None:
1601
1704
  """(#3180) The single check `dispatch_review` runs BEFORE spending a
1602
1705
  review leg: does this diff already, mechanically, trip a MANDATORY
1603
1706
  request-changes rule?
1604
1707
 
1605
1708
  Checks the coordinator-doc rule first (it never inverts by assignment
1606
- type, per `build_review_briefing`'s docstring) and only then the sealed-
1607
- path rule (which does invert for `SEALED_PATH_AUTHOR_TYPES`). Returns
1608
- ``(kind, touched_paths, banner_lines)`` — *kind* is ``"coordinator_doc"``
1609
- or ``"sealed_path"``, used only to label the mechanical verdict's own
1610
- ``verdict_source_reason`` — the instant either fires, else ``None``.
1709
+ type, per `build_review_briefing`'s docstring), then the sealed-path
1710
+ rule (which does invert for `SEALED_PATH_AUTHOR_TYPES`), then (#3509)
1711
+ the Tier-2 lane-kind additive-only rule — a `*additive_only_entrypoints*`
1712
+ path is never in `sealed_paths`, so a diff confined to one never trips
1713
+ the sealed-path check above; this is the only check standing between it
1714
+ and a worker silently deleting the smoke-spec step its own fix should
1715
+ have made pass. Returns ``(kind, touched_paths, banner_lines)`` — *kind*
1716
+ is ``"coordinator_doc"``, ``"sealed_path"``, or
1717
+ ``"lane_entrypoint_weakened"``, used only to label the mechanical
1718
+ verdict's own ``verdict_source_reason`` — the instant any of the three
1719
+ fires, else ``None``.
1611
1720
  """
1612
1721
  touched_docs, doc_lines = _coordinator_doc_violation_lines(
1613
1722
  diff_text, coordinator_doc_paths
@@ -1619,6 +1728,11 @@ def _mechanical_mandatory_verdict(
1619
1728
  )
1620
1729
  if touched_sealed:
1621
1730
  return "sealed_path", touched_sealed, sealed_lines
1731
+ touched_lane, lane_lines = _lane_entrypoint_violation_lines(
1732
+ diff_text, additive_only_entrypoints
1733
+ )
1734
+ if touched_lane:
1735
+ return "lane_entrypoint_weakened", touched_lane, lane_lines
1622
1736
  return None
1623
1737
 
1624
1738
 
@@ -1920,6 +2034,7 @@ def build_review_briefing(
1920
2034
  diff_text: str | None = None,
1921
2035
  sealed_paths: list[str] | None = None,
1922
2036
  sealed_entrypoints: list[str] | None = None,
2037
+ additive_only_entrypoints: list[str] | None = None,
1923
2038
  coordinator_doc_paths: list[str] | None = None,
1924
2039
  assignment_type: str = "work",
1925
2040
  provider_same_as_worker: bool = False,
@@ -2001,6 +2116,19 @@ def build_review_briefing(
2001
2116
  the original rule unchanged: any touch to *sealed_paths* is mandatory
2002
2117
  ``request-changes``.
2003
2118
 
2119
+ *additive_only_entrypoints* (#3509) is the Tier-2 lane-kind subset
2120
+ (``tui-pty``/``win-native``/``mac-native``/``gtk-native``,
2121
+ :meth:`coord.config.AcceptanceConfig.additive_only_entrypoints`) that is
2122
+ deliberately NOT part of *sealed_paths* at all — a work diff may add new
2123
+ steps, or whole new spec files beside one, freely. Unlike
2124
+ *sealed_entrypoints*'s advisory-only guidance above, this one IS
2125
+ mechanically enforced (:func:`_lane_entrypoint_violation_lines`, applied
2126
+ for every assignment type, not just non-authors): a diff that removes or
2127
+ rewrites a pre-existing line in one of these files gets the same
2128
+ mandatory ``request-changes`` banner a sealed-path tamper would,
2129
+ regardless of *assignment_type* — see that function's docstring for why
2130
+ there is no "the author's job is to write here" inversion for this one.
2131
+
2004
2132
  *coordinator_doc_paths* (#2966) is the repo's coordinator-owned doc set —
2005
2133
  :func:`coord.models.coordinator_owned_docs`, the repo's own CLAUDE.md plus
2006
2134
  anything it additionally lists under ``coordinator_only_files``. CLAUDE.md
@@ -2319,6 +2447,43 @@ def build_review_briefing(
2319
2447
  "this is a hard rule, not a suggestion (docs/ORACLE_LOOP.md)."
2320
2448
  )
2321
2449
 
2450
+ if additive_only_entrypoints:
2451
+ # #3509: unlike sealed_paths above, this one applies to EVERY
2452
+ # assignment type the same way — there is no "the author's job is
2453
+ # to write here" inversion, since no assignment type's job is ever
2454
+ # editing an existing step. Computed via the same helper
2455
+ # `dispatch_review`'s mechanical short-circuit uses — see
2456
+ # `_lane_entrypoint_violation_lines`'s docstring.
2457
+ lines.append("")
2458
+ _weakened_paths, _weakened_lines = _lane_entrypoint_violation_lines(
2459
+ diff_text, additive_only_entrypoints
2460
+ )
2461
+ if _weakened_paths:
2462
+ lines.extend(_weakened_lines)
2463
+ else:
2464
+ lines.append("## Smoke-spec entry point — additive only, not sealed")
2465
+ lines.append("")
2466
+ lines.append(
2467
+ ", ".join(f"`{p}`" for p in additive_only_entrypoints)
2468
+ + " is this repo's Tier-2 lane-kind acceptance driver entry "
2469
+ "point (#3509) — a `coord bugbash` (#3487) smoke spec every "
2470
+ "fix is expected to grow, not a sealed oracle. Do **not** "
2471
+ "request-changes solely because this diff adds new steps or "
2472
+ "new spec files beside it — that is expected and welcome."
2473
+ )
2474
+ lines.append("")
2475
+ lines.append(
2476
+ "- **Expected, do NOT flag:** new steps, or new spec files "
2477
+ "beside this entry point."
2478
+ )
2479
+ lines.append(
2480
+ "- **request-changes:** the diff removes or rewrites an "
2481
+ "existing step, loosens an `expect_*` field, raises a "
2482
+ "latency budget, or shortens an idle window — any of which "
2483
+ "weakens a regression check `coord bugbash` already "
2484
+ "depends on."
2485
+ )
2486
+
2322
2487
  if coordinator_doc_paths:
2323
2488
  # #2966: "only the coordinator writes docs" was prose-only — nothing
2324
2489
  # backstopped it structurally, and two workers independently
@@ -2949,6 +3114,7 @@ def _record_mechanical_review_verdict(
2949
3114
  kind_label = {
2950
3115
  "coordinator_doc": "coordinator-owned doc(s) edited",
2951
3116
  "sealed_path": "sealed path(s) violated",
3117
+ "lane_entrypoint_weakened": "Tier-2 lane smoke-spec entry point weakened",
2952
3118
  }.get(kind, kind)
2953
3119
  touched_str = ", ".join(touched_paths)
2954
3120
  reason = f"{kind_label}: {touched_str}"
@@ -3642,7 +3808,16 @@ def dispatch_review(
3642
3808
  # bounced, or leave it unwired and ship dead code. Each route now
3643
3809
  # declares its own `entrypoint:`.
3644
3810
  sealed_paths = config.acceptance.sealed_paths(completed.repo_name)
3645
- sealed_entrypoints = config.acceptance.entrypoints(completed.repo_name)
3811
+ sealed_entrypoints = [
3812
+ ep for ep in config.acceptance.entrypoints(completed.repo_name)
3813
+ if ep in sealed_paths
3814
+ ]
3815
+ # #3509: the Tier-2 lane-kind entrypoints EXCLUDED from sealed_paths
3816
+ # above — additive-only, mechanically enforced by
3817
+ # `_lane_entrypoint_violation_lines` instead of the sealed-path rule.
3818
+ additive_only_entrypoints = config.acceptance.additive_only_entrypoints(
3819
+ completed.repo_name
3820
+ )
3646
3821
 
3647
3822
  # #2966: coordinator-owned docs (repo's own CLAUDE.md plus anything it
3648
3823
  # additionally lists under coordinator_only_files) — see
@@ -3713,6 +3888,7 @@ def dispatch_review(
3713
3888
  sealed_paths=sealed_paths,
3714
3889
  sealed_entrypoints=sealed_entrypoints,
3715
3890
  coordinator_doc_paths=coordinator_doc_paths,
3891
+ additive_only_entrypoints=additive_only_entrypoints,
3716
3892
  )
3717
3893
  if _mechanical is not None:
3718
3894
  mech_kind, mech_touched, mech_lines = _mechanical
@@ -3814,6 +3990,7 @@ def dispatch_review(
3814
3990
  diff_text=diff_text,
3815
3991
  sealed_paths=sealed_paths,
3816
3992
  sealed_entrypoints=sealed_entrypoints,
3993
+ additive_only_entrypoints=additive_only_entrypoints,
3817
3994
  coordinator_doc_paths=coordinator_doc_paths,
3818
3995
  assignment_type=completed.type,
3819
3996
  completion_summary=completed.completion_summary,
@@ -2952,3 +2952,23 @@ class TestTailscaleSelfDnsCache:
2952
2952
  resolved = resolve_local_machine(cfg)
2953
2953
  assert resolved is not None
2954
2954
  assert resolved.name == "macmini"
2955
+
2956
+
2957
+ # ── #3509: Tier-2 lane-kind entrypoints are additive-only, not sealed ───────
2958
+ #
2959
+ # Full behavioral coverage (sealed_paths/additive_only_entrypoints across
2960
+ # flat and routed drivers) lives in tests/test_config_acceptance.py, which is
2961
+ # where every existing sealed_paths/entrypoint test for AcceptanceConfig
2962
+ # already lives (that file's own docstring: "Tests for the `acceptance:`
2963
+ # block in coordinator.yml") — this is just the constant-level smoke test
2964
+ # for the file this issue names explicitly.
2965
+
2966
+
2967
+ def test_tier2_lane_kinds_constant_matches_bugbash_lane_driver_kinds() -> None:
2968
+ """coord.config.TIER2_LANE_KINDS is hand-synced with
2969
+ coord.bugbash.LANE_DRIVER_KINDS by design (coord.bugbash deliberately
2970
+ avoids importing coord.config — see TIER2_LANE_KINDS's own comment) —
2971
+ this test is the thing that notices if the two ever drift apart."""
2972
+ from coord.bugbash import LANE_DRIVER_KINDS
2973
+
2974
+ assert coord_config.TIER2_LANE_KINDS == frozenset(LANE_DRIVER_KINDS)