code-coordinator 0.5.507__tar.gz → 0.5.508__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 (904) hide show
  1. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/CLAUDE.md +37 -61
  2. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/PKG-INFO +1 -1
  3. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/code_coordinator.egg-info/PKG-INFO +1 -1
  4. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/code_coordinator.egg-info/scm_version.json +2 -2
  5. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/agent.py +134 -18
  6. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/providers/claude.py +18 -20
  7. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/ARCHITECTURE.md +15 -0
  8. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/OPERATOR_GUIDES.md +23 -0
  9. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_agent.py +123 -3
  10. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_claude_md_budget.py +9 -5
  11. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_providers.py +104 -0
  12. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/.claude/commands/board.md +0 -0
  13. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/.claude/commands/complete-session.md +0 -0
  14. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/.claude/commands/coordinator.md +0 -0
  15. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/.githooks/_lib.sh +0 -0
  16. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/.githooks/post-checkout +0 -0
  17. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/.githooks/post-commit +0 -0
  18. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/.githooks/post-merge +0 -0
  19. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  20. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/.github/coord-ci-acceptance.yml +0 -0
  21. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/.github/workflows/auto-release.yml +0 -0
  22. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/.github/workflows/publish.yml +0 -0
  23. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/.github/workflows/test.yml +0 -0
  24. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/.gitignore +0 -0
  25. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/GOAL.md +0 -0
  26. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/LICENSE +0 -0
  27. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/MANIFEST.in +0 -0
  28. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/README.md +0 -0
  29. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/code_coordinator.egg-info/SOURCES.txt +0 -0
  30. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/code_coordinator.egg-info/dependency_links.txt +0 -0
  31. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/code_coordinator.egg-info/entry_points.txt +0 -0
  32. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/code_coordinator.egg-info/requires.txt +0 -0
  33. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/code_coordinator.egg-info/scm_file_list.json +0 -0
  34. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/code_coordinator.egg-info/top_level.txt +0 -0
  35. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/__init__.py +0 -0
  36. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/_board_mapping.py +0 -0
  37. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/acceptance.py +0 -0
  38. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/acceptance_drivers.py +0 -0
  39. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/agent_app.py +0 -0
  40. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/agent_update.py +0 -0
  41. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/agents/opencode/.gitignore +0 -0
  42. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/agents/opencode/agents/work.md +0 -0
  43. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/agents/opencode/routing.jsonc +0 -0
  44. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/approved_work.py +0 -0
  45. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/audit.py +0 -0
  46. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/auto_loop.py +0 -0
  47. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/backup.py +0 -0
  48. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/block_log.py +0 -0
  49. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/board_schema.py +0 -0
  50. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/board_service.py +0 -0
  51. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/board_wire.py +0 -0
  52. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/brain.py +0 -0
  53. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/branch_model.py +0 -0
  54. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/bug_intake.py +0 -0
  55. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/cargo_cache.py +0 -0
  56. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/ci_fix.py +0 -0
  57. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/ci_github.py +0 -0
  58. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/ci_gitlab.py +0 -0
  59. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/ci_store.py +0 -0
  60. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/claim.py +0 -0
  61. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/claude_setup_token.py +0 -0
  62. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/cli.py +0 -0
  63. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/client.py +0 -0
  64. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/codegen.py +0 -0
  65. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/commands/__init__.py +0 -0
  66. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/commands/_common.py +0 -0
  67. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/commands/acceptance.py +0 -0
  68. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/commands/agent_ops.py +0 -0
  69. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/commands/audit.py +0 -0
  70. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/commands/backup.py +0 -0
  71. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/commands/chat.py +0 -0
  72. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/commands/ci.py +0 -0
  73. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/commands/codegen.py +0 -0
  74. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/commands/dispatch.py +0 -0
  75. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/commands/dispatch_workers.py +0 -0
  76. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/commands/dr.py +0 -0
  77. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/commands/drive.py +0 -0
  78. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/commands/drive_queue.py +0 -0
  79. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/commands/gate_a.py +0 -0
  80. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/commands/gates.py +0 -0
  81. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/commands/issues.py +0 -0
  82. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/commands/lifecycle.py +0 -0
  83. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/commands/machine.py +0 -0
  84. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/commands/merge.py +0 -0
  85. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/commands/milestone.py +0 -0
  86. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/commands/plan_followup.py +0 -0
  87. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/commands/plans.py +0 -0
  88. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/commands/portal.py +0 -0
  89. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/commands/pr.py +0 -0
  90. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/commands/release.py +0 -0
  91. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/commands/repo.py +0 -0
  92. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/commands/report.py +0 -0
  93. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/commands/review.py +0 -0
  94. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/commands/scorecard.py +0 -0
  95. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/commands/sessions.py +0 -0
  96. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/commands/setup.py +0 -0
  97. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/commands/status.py +0 -0
  98. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/commands/store_migrate.py +0 -0
  99. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/commands/terminal.py +0 -0
  100. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/commands/test_gate.py +0 -0
  101. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/commands/tui.py +0 -0
  102. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/comments.py +0 -0
  103. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/config.py +0 -0
  104. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/config_reload.py +0 -0
  105. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/confirm_test.py +0 -0
  106. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/conflict_fix.py +0 -0
  107. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/dao.py +0 -0
  108. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/dashboard/__init__.py +0 -0
  109. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/dashboard/fixture.py +0 -0
  110. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/dashboard/index.html +0 -0
  111. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/dashboard/server.py +0 -0
  112. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/dashboard/terminal.py +0 -0
  113. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/db.py +0 -0
  114. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/dead_end.py +0 -0
  115. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/decomposition_chat.py +0 -0
  116. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/deploy/README.md +0 -0
  117. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/deploy/coord-agent.service +0 -0
  118. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/deploy/coord-backup.service +0 -0
  119. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/deploy/coord-backup.timer +0 -0
  120. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/deploy/coord-db-backup.service +0 -0
  121. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/deploy/coord-db-backup.sh +0 -0
  122. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/deploy/coord-db-backup.timer +0 -0
  123. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/deploy/coord-dr-verify.service +0 -0
  124. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/deploy/coord-dr-verify.timer +0 -0
  125. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/deploy/coord-drive-queue.service +0 -0
  126. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/deploy/coord-drive-queue.timer +0 -0
  127. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/deploy/coord-failure-notify.service +0 -0
  128. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/deploy/coord-fleet-watchdog.service +0 -0
  129. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/deploy/coord-fleet-watchdog.timer +0 -0
  130. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/deploy/coord-notify.service +0 -0
  131. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/deploy/coord-notify.timer +0 -0
  132. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/deploy/coord-release-propagate.service +0 -0
  133. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/deploy/coord-release-propagate.timer +0 -0
  134. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/deploy/coord-release-window.service +0 -0
  135. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/deploy/coord-release-window.timer +0 -0
  136. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/deploy/coord-serve.service +0 -0
  137. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/deploy/coord-web-dist-build.service +0 -0
  138. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/deploy/coord-web-dist-build.timer +0 -0
  139. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/deploy/coord-web.service +0 -0
  140. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/deploy_manifest.py +0 -0
  141. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/deploy_units.py +0 -0
  142. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/deprecation_telemetry.py +0 -0
  143. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/deps.py +0 -0
  144. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/diagnose.py +0 -0
  145. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/dispatch.py +0 -0
  146. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/dispatch_liveness.py +0 -0
  147. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/dist_name.py +0 -0
  148. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/dr_promote.py +0 -0
  149. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/dr_verify.py +0 -0
  150. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/drive.py +0 -0
  151. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/drive_queue.py +0 -0
  152. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/drive_state.py +0 -0
  153. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/events.py +0 -0
  154. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/failure_class.py +0 -0
  155. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/failure_classifier.py +0 -0
  156. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/filelock.py +0 -0
  157. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/fleet_config_health.py +0 -0
  158. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/forge_availability.py +0 -0
  159. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/freshness.py +0 -0
  160. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/gate_a.py +0 -0
  161. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/gate_b.py +0 -0
  162. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/gate_snapshot.py +0 -0
  163. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/gates.py +0 -0
  164. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/gen_board_fixture.py +0 -0
  165. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/github_ops.py +0 -0
  166. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/github_throttle.py +0 -0
  167. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/goal.py +0 -0
  168. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/graph_health.py +0 -0
  169. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/__init__.py +0 -0
  170. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/aggregate.py +0 -0
  171. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/checks/__init__.py +0 -0
  172. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/checks/_ci_pin.py +0 -0
  173. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/checks/agent_install.py +0 -0
  174. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/checks/cargo_targets.py +0 -0
  175. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/checks/claude_binary.py +0 -0
  176. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/checks/config_drift.py +0 -0
  177. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/checks/coord_tui_ci_pin.py +0 -0
  178. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/checks/coord_web_ci_pin.py +0 -0
  179. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/checks/deploy_lane_facts.py +0 -0
  180. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/checks/disk.py +0 -0
  181. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/checks/fleet_board.py +0 -0
  182. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  183. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/checks/fleet_phantom.py +0 -0
  184. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/checks/fleet_unit_drift.py +0 -0
  185. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/checks/graph.py +0 -0
  186. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/checks/graphify_cli.py +0 -0
  187. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/checks/index_lock.py +0 -0
  188. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/checks/issues_sync_staleness.py +0 -0
  189. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/checks/plan_usage.py +0 -0
  190. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/checks/pr_churn.py +0 -0
  191. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/checks/release_cordon.py +0 -0
  192. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/checks/repo_state.py +0 -0
  193. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/checks/spawned_coord.py +0 -0
  194. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/checks/stalled_pipeline.py +0 -0
  195. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/checks/timer_active.py +0 -0
  196. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/checks/toolchain.py +0 -0
  197. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/checks/unit_drift.py +0 -0
  198. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/checks/unit_enablement.py +0 -0
  199. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/checks/wedged_drive_queue.py +0 -0
  200. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/checks/worktrees.py +0 -0
  201. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/cli.py +0 -0
  202. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/context.py +0 -0
  203. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/fleet_snapshot.py +0 -0
  204. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/models.py +0 -0
  205. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/pypi.py +0 -0
  206. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/registry.py +0 -0
  207. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/render.py +0 -0
  208. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/health/units.py +0 -0
  209. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/hooks.py +0 -0
  210. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/housekeeping.py +0 -0
  211. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/interactive.py +0 -0
  212. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/invariant_alarms.py +0 -0
  213. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/issue_store.py +0 -0
  214. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/issues_sync_status.py +0 -0
  215. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/liveness_auditor.py +0 -0
  216. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/machine_fault.py +0 -0
  217. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/machine_metrics.py +0 -0
  218. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/machine_onboard.py +0 -0
  219. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/machine_pause.py +0 -0
  220. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/machine_stats.py +0 -0
  221. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/merge_queue.py +0 -0
  222. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/milestone_chat.py +0 -0
  223. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/milestone_dispatch.py +0 -0
  224. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/milestone_gate.py +0 -0
  225. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/milestone_order.py +0 -0
  226. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/mock_author.py +0 -0
  227. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/models.py +0 -0
  228. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/network.py +0 -0
  229. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/new_issue_chat.py +0 -0
  230. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/notifier/__init__.py +0 -0
  231. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/notifier/baseline.py +0 -0
  232. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/notifier/cli.py +0 -0
  233. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/notifier/collect.py +0 -0
  234. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/notifier/digest.py +0 -0
  235. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/notifier/models.py +0 -0
  236. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/notifier/predicate.py +0 -0
  237. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/notifier/service.py +0 -0
  238. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/notifier/store.py +0 -0
  239. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/notifier/transport.py +0 -0
  240. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/notify.py +0 -0
  241. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/openapi.py +0 -0
  242. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/overlap_fence.py +0 -0
  243. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/overlap_predict.py +0 -0
  244. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/parentage.py +0 -0
  245. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/parentage_github.py +0 -0
  246. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/pipeline.py +0 -0
  247. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/plan_parser.py +0 -0
  248. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/plans.py +0 -0
  249. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/platform_paths.py +0 -0
  250. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/portal_bridge.py +0 -0
  251. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/portal_store.py +0 -0
  252. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/portal_sync.py +0 -0
  253. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/pr_body_lint.py +0 -0
  254. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/prereqs.py +0 -0
  255. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/progress.py +0 -0
  256. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/providers/__init__.py +0 -0
  257. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/providers/base.py +0 -0
  258. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/providers/claude_pty.py +0 -0
  259. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/providers/opencode.py +0 -0
  260. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/queue_diagnose.py +0 -0
  261. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/reconcile.py +0 -0
  262. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/reconcile_tick.py +0 -0
  263. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/refine_chat.py +0 -0
  264. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/release_cordon.py +0 -0
  265. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/release_propagate.py +0 -0
  266. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/release_verify.py +0 -0
  267. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/release_window.py +0 -0
  268. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/repo_dormancy.py +0 -0
  269. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/repo_edit.py +0 -0
  270. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/repo_onboard.py +0 -0
  271. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/reports.py +0 -0
  272. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/rest_schema.py +0 -0
  273. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/restart_cmd.py +0 -0
  274. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/revalidate.py +0 -0
  275. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/review.py +0 -0
  276. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/scorecard.py +0 -0
  277. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/self_health.py +0 -0
  278. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/serve_app.py +0 -0
  279. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  280. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  281. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  282. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  283. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  284. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/skills/portal-followup/SKILL.md +0 -0
  285. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/skills/release-now/SKILL.md +0 -0
  286. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  287. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  288. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/skills/update-issue/SKILL.md +0 -0
  289. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/smoke.py +0 -0
  290. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/spend_ceiling.py +0 -0
  291. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/split_work.py +0 -0
  292. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/sql.py +0 -0
  293. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/stage_projection.py +0 -0
  294. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/state.py +0 -0
  295. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/store_migrate.py +0 -0
  296. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/store_parity.py +0 -0
  297. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/templates/deploy-cloudflare.node.yml +0 -0
  298. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/test_author.py +0 -0
  299. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/test_chat.py +0 -0
  300. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/test_orchestrator.py +0 -0
  301. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/test_report.py +0 -0
  302. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/tui_release.py +0 -0
  303. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/uat_checks.py +0 -0
  304. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/usage.py +0 -0
  305. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/usage_limits.py +0 -0
  306. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/usage_rollup.py +0 -0
  307. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coord/worker_events.py +0 -0
  308. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/coordinator.example.yml +0 -0
  309. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/deploy/coord-agent.service +0 -0
  310. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/deploy/coord-backup.service +0 -0
  311. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/deploy/coord-backup.timer +0 -0
  312. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/deploy/coord-db-backup.service +0 -0
  313. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/deploy/coord-db-backup.sh +0 -0
  314. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/deploy/coord-db-backup.timer +0 -0
  315. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/deploy/coord-dr-verify.service +0 -0
  316. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/deploy/coord-dr-verify.timer +0 -0
  317. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/deploy/coord-drive-queue.service +0 -0
  318. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/deploy/coord-drive-queue.timer +0 -0
  319. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/deploy/coord-failure-notify.service +0 -0
  320. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/deploy/coord-failure-notify.sh +0 -0
  321. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/deploy/coord-fleet-watchdog.service +0 -0
  322. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/deploy/coord-fleet-watchdog.timer +0 -0
  323. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/deploy/coord-notify.service +0 -0
  324. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/deploy/coord-notify.timer +0 -0
  325. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/deploy/coord-release-propagate.service +0 -0
  326. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/deploy/coord-release-propagate.timer +0 -0
  327. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/deploy/coord-release-window.service +0 -0
  328. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/deploy/coord-release-window.timer +0 -0
  329. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/deploy/coord-serve.service +0 -0
  330. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/deploy/coord-web-dist-build.service +0 -0
  331. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/deploy/coord-web-dist-build.sh +0 -0
  332. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/deploy/coord-web-dist-build.timer +0 -0
  333. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/deploy/coord-web-rollback.sh +0 -0
  334. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/deploy/coord-web.service +0 -0
  335. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/deploy/node-shim.sh +0 -0
  336. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/ADR_COORD_TUI_CI.md +0 -0
  337. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  338. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/ADR_COORD_WEB_CI.md +0 -0
  339. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/ADR_COORD_WEB_DIST.md +0 -0
  340. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
  341. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/AGENT_OPERATIONS.md +0 -0
  342. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/ARCH_SECURITY_GATES.md +0 -0
  343. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/COCKPIT.md +0 -0
  344. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/CONTROL_CENTER.md +0 -0
  345. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/COST_DISCIPLINE.md +0 -0
  346. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/CROSS_PLATFORM.md +0 -0
  347. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/CUSTOMER_FACING_APPS.md +0 -0
  348. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/CUSTOMER_PORTAL.md +0 -0
  349. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/DATA_STORE_SELECTION.md +0 -0
  350. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/DISASTER_RECOVERY.md +0 -0
  351. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/DRIVE_QUEUE.md +0 -0
  352. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/EPHEMERAL_WORKERS.md +0 -0
  353. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/FORGE_MIGRATION.md +0 -0
  354. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/GRAPHIFY_SETUP.md +0 -0
  355. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/ISSUE_GUIDANCE.md +0 -0
  356. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/MAC_MINI.md +0 -0
  357. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  358. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/NOTIFIER.md +0 -0
  359. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/OPENCODE_VERIFICATION.md +0 -0
  360. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/OPERATING_GOTCHAS.md +0 -0
  361. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/ORACLE_LOOP.md +0 -0
  362. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/PHONE_WEBAPP.md +0 -0
  363. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/PIPELINE_V2.md +0 -0
  364. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/PLATFORM_EVOLUTION.md +0 -0
  365. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/SECOND_BACKEND.md +0 -0
  366. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/STORE_SERVICE.md +0 -0
  367. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  368. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/WEB_CONTROL_CENTER.md +0 -0
  369. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/WSL_WINDOWS_WORKER.md +0 -0
  370. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/mocks/web/README.md +0 -0
  371. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/mocks/web/_tokens.css +0 -0
  372. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/mocks/web/issue-detail.html +0 -0
  373. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/mocks/web/pipeline-narrow.html +0 -0
  374. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/docs/mocks/web/pipeline-wide.html +0 -0
  375. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/graphify-out/.gitignore +0 -0
  376. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/install-agent.sh +0 -0
  377. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/pyproject.toml +0 -0
  378. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/audit_review_verdict_overrides.py +0 -0
  379. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  380. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/azure-workers/build-worker-image.sh +0 -0
  381. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/azure-workers/coordinator-machine.py +0 -0
  382. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/azure-workers/dr-down.sh +0 -0
  383. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/azure-workers/dr-up.sh +0 -0
  384. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/azure-workers/epic-down.sh +0 -0
  385. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/azure-workers/epic-up.sh +0 -0
  386. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/azure-workers/preflight.sh +0 -0
  387. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/azure-workers/provision-server.sh +0 -0
  388. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/azure-workers/provision-worker.sh +0 -0
  389. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  390. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  391. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/azure-workers/throwaway-vm.sh +0 -0
  392. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/azure-workers/verify-github-token.sh +0 -0
  393. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/check_gh_argv_containment.py +0 -0
  394. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/codegen.py +0 -0
  395. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/coord-test-runner.sh +0 -0
  396. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
  397. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
  398. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
  399. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
  400. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/coord-venv-rollback.sh +0 -0
  401. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/drive-batch.sh +0 -0
  402. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/extract-coord-tui.sh +0 -0
  403. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/fleet_watchdog.py +0 -0
  404. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/gen_board_fixture.py +0 -0
  405. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/gen_mock_index.py +0 -0
  406. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/lib/provision-core.sh +0 -0
  407. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/next_release_tag.py +0 -0
  408. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/provision-machine.sh +0 -0
  409. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/run_tests_in_populated_home.sh +0 -0
  410. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/run_tests_without_gh.sh +0 -0
  411. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/setup-macmini.sh +0 -0
  412. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/smoke_437_interactive.py +0 -0
  413. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/verify-provision-noble.sh +0 -0
  414. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/verify_878_review_capture.py +0 -0
  415. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/verify_release_published.py +0 -0
  416. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/scripts/verify_release_wheel.py +0 -0
  417. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/setup.cfg +0 -0
  418. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/SMOKE_SET.md +0 -0
  419. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/__init__.py +0 -0
  420. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/acceptance/ms-37/conftest.py +0 -0
  421. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/acceptance/ms-37/contract.md +0 -0
  422. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/acceptance/ms-37/manifest.yml +0 -0
  423. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  424. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  425. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/acceptance/ms-51/contract.md +0 -0
  426. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  427. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  428. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/acceptance/ms-51/manifest.yml +0 -0
  429. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  430. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/acceptance/ms-51/tsconfig.json +0 -0
  431. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  432. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/backends.py +0 -0
  433. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/conftest.py +0 -0
  434. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/fixtures/board-pipeline-basic.json +0 -0
  435. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  436. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  437. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  438. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  439. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/fixtures/playwright/all_pass.json +0 -0
  440. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  441. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/fixtures/playwright/mixed_fail.json +0 -0
  442. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  443. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  444. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/fixtures/playwright/skip.json +0 -0
  445. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/fixtures/playwright/truncated.json +0 -0
  446. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  447. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  448. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  449. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  450. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  451. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  452. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  453. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  454. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_acceptance.py +0 -0
  455. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_acceptance_drivers.py +0 -0
  456. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_agent_api_error.py +0 -0
  457. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_agent_app.py +0 -0
  458. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_agent_branch_base.py +0 -0
  459. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_agent_branch_capture.py +0 -0
  460. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_agent_config_free_1712.py +0 -0
  461. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_agent_deploy_units_endpoint.py +0 -0
  462. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_agent_dirty_worktree.py +0 -0
  463. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  464. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_agent_graph_self_heal.py +0 -0
  465. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_agent_health_h3.py +0 -0
  466. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_agent_idle_restart.py +0 -0
  467. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_agent_push_failure.py +0 -0
  468. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_agent_reap.py +0 -0
  469. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_agent_repos_and_pull.py +0 -0
  470. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_agent_restart_services_endpoint.py +0 -0
  471. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_agent_skills_self_heal.py +0 -0
  472. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_agent_startup_diagnostics.py +0 -0
  473. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_agent_update.py +0 -0
  474. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_agent_update_bluegreen.py +0 -0
  475. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_agent_usage_limit.py +0 -0
  476. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_agent_zero_commit.py +0 -0
  477. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_ambient_home_isolation.py +0 -0
  478. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_approve_capability_reroute_3241.py +0 -0
  479. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_approve_dependency_busy_2804.py +0 -0
  480. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_approve_reject_plan.py +0 -0
  481. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_approve_usage_gate.py +0 -0
  482. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_approved_work_2532.py +0 -0
  483. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_approved_work_2996.py +0 -0
  484. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_assignment_already_recorded_daemon.py +0 -0
  485. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_audit_log.py +0 -0
  486. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_audit_outcome.py +0 -0
  487. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_audit_query.py +0 -0
  488. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_auto_loop.py +0 -0
  489. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_auto_release_publish_2035.py +0 -0
  490. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_backend_selection.py +0 -0
  491. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_backup.py +0 -0
  492. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_base_checkout_restore.py +0 -0
  493. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_block_log.py +0 -0
  494. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_board_cap_762.py +0 -0
  495. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_board_fixture.py +0 -0
  496. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_board_read_path.py +0 -0
  497. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_board_schema.py +0 -0
  498. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_board_service.py +0 -0
  499. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_board_state.py +0 -0
  500. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_board_wire.py +0 -0
  501. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_brain.py +0 -0
  502. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_branch_model.py +0 -0
  503. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_bug_intake.py +0 -0
  504. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_build_worker_image_env_update.py +0 -0
  505. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cargo_cache.py +0 -0
  506. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_check_gh_argv_containment.py +0 -0
  507. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_ci_acceptance_gate_1950.py +0 -0
  508. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_ci_fix.py +0 -0
  509. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_ci_github.py +0 -0
  510. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_ci_gitlab.py +0 -0
  511. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_ci_parity_2091.py +0 -0
  512. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_ci_store.py +0 -0
  513. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_claim.py +0 -0
  514. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_claude_setup_token.py +0 -0
  515. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_acceptance.py +0 -0
  516. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_assign.py +0 -0
  517. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  518. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_assign_interactive_remote.py +0 -0
  519. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_assign_provider.py +0 -0
  520. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  521. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_audit.py +0 -0
  522. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_chat_continue.py +0 -0
  523. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_ci.py +0 -0
  524. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_codegen.py +0 -0
  525. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_decide.py +0 -0
  526. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_diagnose_capability_rules.py +0 -0
  527. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_diagnose_config_provenance.py +0 -0
  528. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_diagnose_forge_availability.py +0 -0
  529. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_diagnose_graph.py +0 -0
  530. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_diagnose_self.py +0 -0
  531. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_diagnose_test_coverage.py +0 -0
  532. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_doctor.py +0 -0
  533. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_doctor_config_free_1801.py +0 -0
  534. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  535. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_doctor_store_backend_3084.py +0 -0
  536. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_drive.py +0 -0
  537. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_drive_queue.py +0 -0
  538. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_escalate.py +0 -0
  539. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_fix_headless_review.py +0 -0
  540. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_gate_a.py +0 -0
  541. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_install_drift.py +0 -0
  542. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_install_skills.py +0 -0
  543. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_issue_comment.py +0 -0
  544. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_issue_create_label.py +0 -0
  545. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_issue_reopen.py +0 -0
  546. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_issue_view_list.py +0 -0
  547. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_merge.py +0 -0
  548. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_milestone_assign.py +0 -0
  549. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_milestone_capture.py +0 -0
  550. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_milestone_chat_add_child.py +0 -0
  551. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_milestone_dispatch.py +0 -0
  552. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_milestone_gate_b.py +0 -0
  553. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_milestone_gate_c.py +0 -0
  554. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_milestone_order.py +0 -0
  555. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  556. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_milestone_ship.py +0 -0
  557. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_network.py +0 -0
  558. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_new_issue_chat.py +0 -0
  559. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_plans.py +0 -0
  560. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_portal.py +0 -0
  561. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_pr.py +0 -0
  562. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_pull_artifact.py +0 -0
  563. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_queue.py +0 -0
  564. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_reattach_sessions.py +0 -0
  565. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_refine_board.py +0 -0
  566. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_release_preflight.py +0 -0
  567. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_release_propagate.py +0 -0
  568. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_release_window.py +0 -0
  569. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_repo_2220.py +0 -0
  570. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
  571. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_scorecard.py +0 -0
  572. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_serve_store_backend_3084.py +0 -0
  573. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_set_review_findings.py +0 -0
  574. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_status_advisory_terminal.py +0 -0
  575. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_status_contested_tag.py +0 -0
  576. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_status_invariant_alarms.py +0 -0
  577. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_status_machine_fault.py +0 -0
  578. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_status_merge_queue.py +0 -0
  579. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_status_provider.py +0 -0
  580. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_status_retried_3340.py +0 -0
  581. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_status_review_finalizing.py +0 -0
  582. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_status_supervisor_3366.py +0 -0
  583. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_status_test_failed_tag.py +0 -0
  584. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_status_usage_limit.py +0 -0
  585. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_sync_comments_873.py +0 -0
  586. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_test_plan.py +0 -0
  587. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_track.py +0 -0
  588. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_tui_update.py +0 -0
  589. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cli_wait.py +0 -0
  590. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_client.py +0 -0
  591. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_client_base_install.py +0 -0
  592. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_client_config_cache_atomic_3052.py +0 -0
  593. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_client_resource_migration_1946.py +0 -0
  594. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_commands_common.py +0 -0
  595. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_comments.py +0 -0
  596. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_completion_summary.py +0 -0
  597. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_config.py +0 -0
  598. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_config_acceptance.py +0 -0
  599. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_config_audit.py +0 -0
  600. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_config_drift_check.py +0 -0
  601. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_config_effective.py +0 -0
  602. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_config_pricing.py +0 -0
  603. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  604. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_config_usage_gate.py +0 -0
  605. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_confirm_test.py +0 -0
  606. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_conflict_fix.py +0 -0
  607. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_conflict_fix_semantic.py +0 -0
  608. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
  609. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_coord_test.py +0 -0
  610. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
  611. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_coord_test_runner_baseline.py +0 -0
  612. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_coord_test_runner_populated_home.py +0 -0
  613. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_coord_test_runner_routing.py +0 -0
  614. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_coord_test_runner_toolchain.py +0 -0
  615. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_coord_uat.py +0 -0
  616. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_coord_web_sse_restart_live.py +0 -0
  617. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_coordinator_machine.py +0 -0
  618. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_cross_platform_imports.py +0 -0
  619. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_dao.py +0 -0
  620. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_dashboard.py +0 -0
  621. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_dashboard_api.py +0 -0
  622. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_dashboard_fixture.py +0 -0
  623. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_dashboard_server.py +0 -0
  624. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_dashboard_terminal.py +0 -0
  625. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_dashboard_terminal_live.py +0 -0
  626. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_db.py +0 -0
  627. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_dead_end.py +0 -0
  628. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_decomposition_chat.py +0 -0
  629. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_deploy_coord_db_backup.py +0 -0
  630. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_deploy_coord_web_dist.py +0 -0
  631. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_deploy_coord_web_rollback.py +0 -0
  632. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_deploy_db_backup_unit.py +0 -0
  633. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_deploy_drive_queue_unit.py +0 -0
  634. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_deploy_failure_notify_unit.py +0 -0
  635. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_deploy_manifest.py +0 -0
  636. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_deploy_notify_unit.py +0 -0
  637. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_deploy_units_lane.py +0 -0
  638. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_deploy_web_unit.py +0 -0
  639. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_deprecation_telemetry.py +0 -0
  640. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_deps.py +0 -0
  641. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_diagnose.py +0 -0
  642. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_dispatch.py +0 -0
  643. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_dispatch_liveness.py +0 -0
  644. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_dispatch_target_validation.py +0 -0
  645. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_dispatch_workers.py +0 -0
  646. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_dist_name.py +0 -0
  647. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_done_housekeeping.py +0 -0
  648. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_dr_azure_scripts.py +0 -0
  649. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_dr_promote.py +0 -0
  650. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_dr_verify.py +0 -0
  651. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_drive.py +0 -0
  652. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_drive_machine_fault.py +0 -0
  653. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_drive_queue.py +0 -0
  654. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_drive_queue_blocked_rendering.py +0 -0
  655. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_drive_queue_launch_argv.py +0 -0
  656. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_drive_queue_max_parallel_config.py +0 -0
  657. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
  658. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_drive_queue_roll_pending.py +0 -0
  659. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
  660. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_drive_state.py +0 -0
  661. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_drive_tmux.py +0 -0
  662. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_epic_up_capability_detection.py +0 -0
  663. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  664. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_epic_up_image_provenance.py +0 -0
  665. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_errors.py +0 -0
  666. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_events.py +0 -0
  667. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_failure_class.py +0 -0
  668. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_failure_classifier.py +0 -0
  669. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_filelock.py +0 -0
  670. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  671. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_fix_escalation_classifier.py +0 -0
  672. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_fix_of_force_override.py +0 -0
  673. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_fleet_config_health.py +0 -0
  674. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_fleet_health_probes.py +0 -0
  675. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_fleet_health_snapshot.py +0 -0
  676. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_fleet_watchdog.py +0 -0
  677. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_forge_availability.py +0 -0
  678. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_freshness.py +0 -0
  679. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_gate_a.py +0 -0
  680. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_gate_b.py +0 -0
  681. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_gate_snapshot_staleness.py +0 -0
  682. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_gates.py +0 -0
  683. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  684. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_gen_mock_index.py +0 -0
  685. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_generated_rust_fixture.py +0 -0
  686. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_generated_rust_requests.py +0 -0
  687. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_generated_types_fixture.py +0 -0
  688. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_github_ops.py +0 -0
  689. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_github_throttle.py +0 -0
  690. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_goal.py +0 -0
  691. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_graph_health.py +0 -0
  692. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_graph_selfheal_absent_2237.py +0 -0
  693. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_handoff.py +0 -0
  694. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_health_checks.py +0 -0
  695. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_health_cli.py +0 -0
  696. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_health_cli_graph.py +0 -0
  697. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_health_config.py +0 -0
  698. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_health_context.py +0 -0
  699. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_health_coord_tui_ci_pin.py +0 -0
  700. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_health_coord_web_ci_pin.py +0 -0
  701. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_health_deploy_lane_facts.py +0 -0
  702. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_health_fix.py +0 -0
  703. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_health_incident_regression.py +0 -0
  704. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_health_issues_sync_staleness.py +0 -0
  705. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_health_pr_churn.py +0 -0
  706. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_health_pypi.py +0 -0
  707. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_health_registry.py +0 -0
  708. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_health_release_cordon_probe.py +0 -0
  709. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_health_timer_active.py +0 -0
  710. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_health_toolchain.py +0 -0
  711. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_health_unit_drift.py +0 -0
  712. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_health_unit_enablement.py +0 -0
  713. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_health_wedged_drive_queue.py +0 -0
  714. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_hooks.py +0 -0
  715. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_housekeeping.py +0 -0
  716. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_human_attended_437.py +0 -0
  717. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_init.py +0 -0
  718. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_install_agent_venv_2911.py +0 -0
  719. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_integration.py +0 -0
  720. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_interactive_briefing_echo.py +0 -0
  721. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_interactive_pane_log_2541.py +0 -0
  722. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_interactive_prefill_state.py +0 -0
  723. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_interactive_session_relaunch.py +0 -0
  724. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_interactive_test_verdict_backstop.py +0 -0
  725. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_interactive_token_attribution.py +0 -0
  726. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_interactive_worktree.py +0 -0
  727. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_invariant_alarms.py +0 -0
  728. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_issue_store_seam.py +0 -0
  729. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_issues_sync_status.py +0 -0
  730. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_liveness_auditor.py +0 -0
  731. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_liveness_notify.py +0 -0
  732. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_lock_contention_ratchet.py +0 -0
  733. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_machine_fault.py +0 -0
  734. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_machine_metrics.py +0 -0
  735. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_machine_onboard.py +0 -0
  736. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_machine_pause.py +0 -0
  737. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_machine_stats.py +0 -0
  738. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_merge_queue.py +0 -0
  739. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_merge_verify.py +0 -0
  740. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_milestone_chat.py +0 -0
  741. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_milestone_dispatch.py +0 -0
  742. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_milestone_gate.py +0 -0
  743. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_milestone_order.py +0 -0
  744. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_milestone_seam.py +0 -0
  745. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_mock_author.py +0 -0
  746. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_model_tiering.py +0 -0
  747. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_models.py +0 -0
  748. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_models_config_labels.py +0 -0
  749. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_needs_attention.py +0 -0
  750. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_network.py +0 -0
  751. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_new_issue_chat.py +0 -0
  752. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_next_release_tag.py +0 -0
  753. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_node_shim.py +0 -0
  754. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_notifier_baseline.py +0 -0
  755. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_notifier_cli.py +0 -0
  756. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_notifier_collect.py +0 -0
  757. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_notifier_config.py +0 -0
  758. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_notifier_drive_seam.py +0 -0
  759. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_notifier_isolation.py +0 -0
  760. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_notifier_predicate.py +0 -0
  761. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_notifier_quiet_hours.py +0 -0
  762. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_notifier_service.py +0 -0
  763. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_notify.py +0 -0
  764. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_notify_drain.py +0 -0
  765. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_openapi.py +0 -0
  766. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_operational_defaults.py +0 -0
  767. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_overlap_fence.py +0 -0
  768. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_overlap_predict.py +0 -0
  769. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_packaged_deploy_units.py +0 -0
  770. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_parentage.py +0 -0
  771. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_paste_landed.py +0 -0
  772. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
  773. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_pipeline.py +0 -0
  774. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_plan_followup_approve_plan_command.py +0 -0
  775. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_plan_followup_pr_command.py +0 -0
  776. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_plan_followup_review_command.py +0 -0
  777. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_plan_only.py +0 -0
  778. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_plan_parser.py +0 -0
  779. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_platform_paths.py +0 -0
  780. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_portal_bridge.py +0 -0
  781. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_portal_config.py +0 -0
  782. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_portal_store.py +0 -0
  783. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_portal_sync.py +0 -0
  784. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_pr_body_lint.py +0 -0
  785. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_prereqs.py +0 -0
  786. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_production_db_guard.py +0 -0
  787. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_progress.py +0 -0
  788. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_provider_seam.py +0 -0
  789. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_providers_config_labels.py +0 -0
  790. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_providers_pty.py +0 -0
  791. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_provision_core.py +0 -0
  792. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_provision_machine.py +0 -0
  793. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_py_rust_mirror_inventory.py +0 -0
  794. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_quiet_hours.py +0 -0
  795. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_quiet_hours_store_2146.py +0 -0
  796. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_reap_merged_sessions.py +0 -0
  797. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_reap_stale_interactive_tick.py +0 -0
  798. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_reconcile.py +0 -0
  799. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_reconcile_branch.py +0 -0
  800. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_reconcile_completions.py +0 -0
  801. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
  802. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_reconcile_merges.py +0 -0
  803. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_reconcile_no_agent_record.py +0 -0
  804. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_reconcile_tick.py +0 -0
  805. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_reconcile_usage_limit_done.py +0 -0
  806. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_refine_chat.py +0 -0
  807. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_release_cordon_2101.py +0 -0
  808. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  809. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_release_cordon_deadlock_2240.py +0 -0
  810. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_release_cordon_drain_stall_3336.py +0 -0
  811. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_release_cordon_stuck_2490.py +0 -0
  812. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_release_propagate.py +0 -0
  813. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_release_propagate_threshold.py +0 -0
  814. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_release_roll_between_legs_2854.py +0 -0
  815. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_release_roll_window_handoff.py +0 -0
  816. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_release_unified_1242.py +0 -0
  817. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_release_verify.py +0 -0
  818. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_release_window.py +0 -0
  819. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_remote_auto_prune.py +0 -0
  820. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_remote_interactive_reaper.py +0 -0
  821. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_repo_add.py +0 -0
  822. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_repo_dormancy.py +0 -0
  823. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_repo_edit_2220.py +0 -0
  824. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_repo_graph_fleet_2237.py +0 -0
  825. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_repo_onboard_2220.py +0 -0
  826. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_report_result_push.py +0 -0
  827. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_reports.py +0 -0
  828. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_restart_cmd.py +0 -0
  829. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_retry.py +0 -0
  830. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_retry_advisory_1606.py +0 -0
  831. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_retry_escalation_classify_3360.py +0 -0
  832. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_retry_type_1636.py +0 -0
  833. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_revalidate.py +0 -0
  834. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_review.py +0 -0
  835. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_review_end_review_without_verdict.py +0 -0
  836. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_review_parse_failure_diagnostic.py +0 -0
  837. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_review_reaffirm.py +0 -0
  838. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_review_state.py +0 -0
  839. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_review_verdict_backstop.py +0 -0
  840. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_review_verdict_override_audit.py +0 -0
  841. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_review_verdict_relay.py +0 -0
  842. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_review_zero_commits.py +0 -0
  843. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_scoped_review_wiring.py +0 -0
  844. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_scorecard.py +0 -0
  845. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_self_health.py +0 -0
  846. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_serve.py +0 -0
  847. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_serve_app.py +0 -0
  848. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_serve_app_board_trim.py +0 -0
  849. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_serve_rest_routes.py +0 -0
  850. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_session.py +0 -0
  851. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_slice_issue_attribution.py +0 -0
  852. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_smoke.py +0 -0
  853. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_smoke_fanout_manifest_3333.py +0 -0
  854. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_smoke_live_checkout_restore.py +0 -0
  855. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_smoke_workflow.py +0 -0
  856. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_spend_ceiling.py +0 -0
  857. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_spend_ceiling_coordinator.py +0 -0
  858. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_split.py +0 -0
  859. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_split_work.py +0 -0
  860. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_sql_dialect.py +0 -0
  861. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_sqlite_connect_ratchet.py +0 -0
  862. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_stage_projection.py +0 -0
  863. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_stale_busy_reviewer_697.py +0 -0
  864. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_stalled_pipeline.py +0 -0
  865. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_state.py +0 -0
  866. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_state_review_findings_daemon.py +0 -0
  867. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_status_fleet_footer.py +0 -0
  868. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_stop_1567.py +0 -0
  869. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_store_contract.py +0 -0
  870. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_store_migrate.py +0 -0
  871. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_stuck.py +0 -0
  872. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
  873. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_terminal_command.py +0 -0
  874. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_test_author.py +0 -0
  875. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_test_chat.py +0 -0
  876. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_test_orchestrator.py +0 -0
  877. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_test_report.py +0 -0
  878. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_test_verdict_parsing.py +0 -0
  879. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_test_verdict_transcript_floor.py +0 -0
  880. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_text_io_encoding_audit.py +0 -0
  881. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_thin_client_board_audit.py +0 -0
  882. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_thin_client_config_load_1080.py +0 -0
  883. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_thin_client_daemon_routing_906.py +0 -0
  884. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_throwaway_vm.py +0 -0
  885. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_tmux_host.py +0 -0
  886. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_tmux_session.py +0 -0
  887. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_transcript_floor.py +0 -0
  888. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_uat_checks.py +0 -0
  889. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_usage.py +0 -0
  890. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_usage_limits.py +0 -0
  891. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_usage_rollup.py +0 -0
  892. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_venv_live_install_2121.py +0 -0
  893. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_version_single_source.py +0 -0
  894. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_watch.py +0 -0
  895. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  896. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_worker_env_venv_isolation.py +0 -0
  897. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_worker_events.py +0 -0
  898. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_worker_image_pin_sync.py +0 -0
  899. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_worker_safety.py +0 -0
  900. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_worker_test_scoping.py +0 -0
  901. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_worktree.py +0 -0
  902. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  903. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/test_write_parity.py +0 -0
  904. {code_coordinator-0.5.507 → code_coordinator-0.5.508}/tests/write_parity.py +0 -0
@@ -2,20 +2,21 @@
2
2
 
3
3
  CLI tool + per-machine agent server that coordinates Claude Code workers across multiple machines and repos over Tailscale.
4
4
 
5
- > **Scope of this file (#2195).** This is the **worker- and reviewer-facing** rulebook: it is
6
- > loaded into every worker leg, every review leg, and every coordinator session — and re-read on
7
- > every turn of each — so it holds only what someone *editing this repo* must act on. Operator
8
- > runbooks live in [`docs/`](docs/), indexed by
9
- > [`docs/OPERATOR_GUIDES.md`](docs/OPERATOR_GUIDES.md). Settled design rationale lives in
10
- > [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md#design-decisions--the-settled-rationale).
11
- > Keep it that way: **if a new rule does not change what a worker does, it belongs in `docs/`.**
12
- > Operator sessions — the "dispatch, don't do" rule now lives in
13
- > [`docs/COST_DISCIPLINE.md`](docs/COST_DISCIPLINE.md); read it before hand-editing any tracked
14
- > repo. If you're a worker or reviewer leg, that one isn't for you.
15
-
16
- ## Current Goal — read first
17
-
18
- **[`GOAL.md`](GOAL.md) holds the current north-star objective** — the living, cross-repo / cross-machine goal that should bias all planning, triage, and dispatch. It is meta-level (above any single issue, repo, or session) and changes as priorities evolve: read it first, plan against it, and keep it current. `coordinator.yml` is the source of truth for *topology*; `GOAL.md` is the source of truth for *intent*.
5
+ > **Scope of this file (#2195, #2817).** This is the **worker- and reviewer-facing**
6
+ > rulebook: it is loaded into every worker leg, every review leg and every coordinator
7
+ > session — and re-read on **every turn** of each, so every byte here is a recurring
8
+ > fleet-wide cost. It holds only what someone *editing this repo* must act on.
9
+ > **If a new rule does not change what a worker does, it belongs in [`docs/`](docs/).**
10
+ > `tests/test_claude_md_budget.py` enforces that with a byte cap — move a section out
11
+ > rather than raise it.
12
+ >
13
+ > Not here: operator runbooks ([`docs/OPERATOR_GUIDES.md`](docs/OPERATOR_GUIDES.md)) ·
14
+ > settled design rationale
15
+ > ([`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md#design-decisions--the-settled-rationale)) ·
16
+ > the `coord` command reference (`coord <cmd> --help`) · operator cost rules and
17
+ > "dispatch, don't do" ([`docs/COST_DISCIPLINE.md`](docs/COST_DISCIPLINE.md)) ·
18
+ > the current north-star objective ([`GOAL.md`](GOAL.md) — read it in a coordinator
19
+ > session when planning or triaging; a worker or reviewer leg does not need it).
19
20
 
20
21
  ## Codebase navigation — query the graph first
21
22
 
@@ -64,22 +65,11 @@ Query the **graphify graph** (`graphify-out/`) for the full module map + relatio
64
65
 
65
66
  ## Commands
66
67
 
67
- `coord <cmd> --help` documents every command + flags. The core loop:
68
-
69
- ```bash
70
- coord plan # Brain proposes assignments for idle machines
71
- coord approve 1,3 # Dispatch approved proposals (comma-separated IDs)
72
- coord assign <machine> <repo> <issue> [--briefing TEXT | --briefing-file F] [--dry-run] # Direct dispatch
73
- coord status [--freshness] # Machines, assignments, connectivity (+ repo freshness vs GitHub HEADs)
74
- coord log <id> [-f] [--machine NAME] # claude -p output (remote logs need --machine)
75
- coord notify # Poll agents, post completion/failure comments to GitHub
76
- coord test --passed|--fail|--skipped <id> # Record the Test-gate verdict (bare `coord test <id>` builds+tests locally)
77
- coord merge [--dry-run] [--repo NAME] [--method rebase|squash|merge] [--order IDs] [--force-merge]
78
- coord reconcile-merges # Backfill missing branches + record out-of-band merges (#609/#611)
79
- coord retry|stop|resume <id> # Recovery; `coord done` ends the session
80
- ```
81
-
82
- Setup / diagnostics (discoverable via `--help`): `coord init`, `coord config`, `coord agent`, `coord serve`, `coord web`, `coord diagnose`, `coord sessions [--remote]`, `coord split`, `coord notifier`, `coord repo add` / `coord repo doctor`.
68
+ `coord <cmd> --help` documents every command and flag — that is the reference, not this
69
+ file. The operator-facing core loop (`plan`/`approve`/`assign`/`status`/`merge`/...) is in
70
+ [`docs/OPERATOR_GUIDES.md`](docs/OPERATOR_GUIDES.md#the-core-loop). The one `coord` command
71
+ a **worker** runs is `coord acceptance run --issue N`, in an oracle-loop round (see Testing
72
+ below).
83
73
 
84
74
  ## Development
85
75
 
@@ -133,34 +123,22 @@ computes the routing without actually building or testing anything.
133
123
 
134
124
  ## Key Design Decisions
135
125
 
136
- One line each — the reasoning behind them is in
137
- [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md#design-decisions--the-settled-rationale).
138
-
139
- - **No API key needed.** Everything uses `claude -p`, which runs on a Max/Pro subscription via OAuth.
140
- - **Agent servers are dumb dispatchers.** They spawn `claude -p` and track the subprocess; all intelligence is in the coordinator brain.
141
- - **GitHub issue comments are the message bus.** Briefings, completion notices and failure reports are comments, carrying `<!-- coord:... -->` markers for machine parsing.
142
- - **`coordinator.yml` is the single source of truth** for repo topology, machine capabilities, dependencies, concurrency limits, review settings, smoke-test rules, and the pipeline gate order (`pipeline.default_gates`). It lives in `~/.coord/`, **not** the repo checkout.
143
- - **User approves everything.** `coord plan` proposes, the user reviews, `coord approve` dispatches. No autonomous dispatch.
144
- - **Claim detection prevents duplicate work.** Before dispatching, the coordinator checks the board for active assignments and the remote for `issue-{N}-*` branches.
145
- - **Conflict rules are inferred, not configured.** There is no `file_groups`/`exclusive_files` config and never will be. `coord drive-queue add` compares an issue's own `## Files` declaration against the **real diffs** of in-flight branches in that repo (`coord/overlap_predict.py`, #2247) and, on an overlap, chains the newcomer `--after` the incumbent. **It ORDERS, never refuses** — a false positive costs latency, a refusal costs work. Accuracy is measured, not assumed: `coord drive-queue overlap-report`.
146
- - **Adversarial reviews are rule-enforcing, not rubber-stamping.** On worker completion a fresh `claude -p` session on a *different* machine reviews the PR diff against this file and the review checklist, with zero shared context with the worker — that's the whole point.
147
- - **The pipeline order is `Work → Test → Review → Merge`.** Test precedes Review; the headless auto-loop holds review dispatch until there is a `passed`/`skipped` test verdict.
148
- - **Merge is gated on CI checks (#240).** `coord merge` refuses when a check failed or is still running — and a PR with *zero* reported checks is not automatically clear either (#1904).
149
- - **Mechanical merge conflicts auto-rebase (#241).** A `type="conflict-fix"` worker rebases and resolves additive merges; semantic conflicts are left for a human.
150
- - **Smoke tests validate on capable hardware.** `smoke_tests.capability_rules` map changed files to required machine capabilities (e.g. GTK changes → a machine with GTK).
151
- - **Progress streaming from workers.** Workers emit `STATUS:` and `STUCK:` lines; the coordinator parses these for real-time progress in `coord status` and the dashboard.
152
- - **The notifier tells you when NOBODY IS COMING — and nothing else (#1632).** Advisory, isolated, off by default; it is not an error channel and not a progress feed.
153
-
154
- ## Review Prompt Assembly
155
-
156
- The reviewer gets a prompt built from:
157
- 1. **Repo's CLAUDE.md** — the project rules (source of truth, not duplicated)
158
- 2. **Generic checklist** — "did you add tests?", "did you stay in file scope?", "any security issues?"
159
- 3. **Repo overrides** — project-specific patterns from `coordinator.yml` `reviews.repo_overrides`
160
- 4. **The diff** — `gh pr diff` of the worker's branch vs base
161
- 5. **The issue** — title and body for intent verification
162
-
163
- The reviewer reads the rules and enforces them against the diff. It does not have the worker's session context — genuinely independent.
126
+ These are the ones a **diff** can violate. The full set, with the reasoning behind each, is
127
+ in [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md#design-decisions--the-settled-rationale).
128
+
129
+ - **`coordinator.yml` is the single source of truth** for repo topology, machine
130
+ capabilities, dependencies, concurrency limits, review settings, smoke-test rules and the
131
+ pipeline gate order (`pipeline.default_gates`). It lives in `~/.coord/`, **not** the repo
132
+ checkout.
133
+ - **Conflict rules are inferred, not configured.** There is no `file_groups` /
134
+ `exclusive_files` config and never will be — `coord drive-queue add` compares an issue's
135
+ own `## Files` declaration against the **real diffs** of in-flight branches
136
+ (`coord/overlap_predict.py`, #2247). **It ORDERS, never refuses.** Do not add such config.
137
+ - **The pipeline order is `Work → Test → Review → Merge`.** Test precedes Review; the
138
+ headless auto-loop holds review dispatch until there is a `passed`/`skipped` verdict.
139
+ - **Adversarial reviews are rule-enforcing, not rubber-stamping.** A fresh `claude -p`
140
+ session on a *different* machine reviews your diff against this file, with **zero shared
141
+ context with you** — so your diff and final message must stand on their own.
164
142
 
165
143
  ## Rules for workers
166
144
 
@@ -212,7 +190,5 @@ versus keep in the coordinator session, and the coordinator session's own
212
190
 
213
191
  ## Operating the fleet — operator-facing
214
192
 
215
- **Not needed to work on this repo.** A worker or reviewer can stop reading here. Every operator
216
- runbook — the pre-flight gotchas, agent installs and releases, the drive queue, the customer
217
- portal, and the two deploy facts that bite most often — is indexed in
193
+ **Not needed to work on this repo.** Every operator runbook is indexed in
218
194
  [`docs/OPERATOR_GUIDES.md`](docs/OPERATOR_GUIDES.md).
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-coordinator
3
- Version: 0.5.507
3
+ Version: 0.5.508
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.507
3
+ Version: 0.5.508
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.507",
2
+ "tag": "0.5.508",
3
3
  "distance": 0,
4
- "node": "g77eaf6af7d9e29387584dbfe661ea201eb62e524",
4
+ "node": "g8afe10d6337d6c249497f95932b1a6acd5596222",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-09-20"
@@ -5062,6 +5062,136 @@ def _claude_md_system_prompt_suffix(repo_path: str) -> str:
5062
5062
  return "\n\n## Project rules (from CLAUDE.md)\n\n" + claude_md.strip() + "\n"
5063
5063
 
5064
5064
 
5065
+ # #3420: every `claude -p` leg loads the full JSON schema for all built-in
5066
+ # tools regardless of `--allowedTools`, which is a *permission* filter, not a
5067
+ # tool-surface one — a leg with `Read,Bash` in `--allowedTools` still pays
5068
+ # the prompt-token cost of the `Workflow`/`Skill`/etc. schemas it can never
5069
+ # call. Measured with controlled `claude -p` probes on this repo's own
5070
+ # `default_worker_command` flags (Claude Code 2.1.278, `type="work"`): the
5071
+ # schemas for these tools cost 12,134 tokens/turn (44% of the static
5072
+ # prefix), re-read at cache-read rates on every turn of every leg. None of
5073
+ # them has a legitimate use from a headless coord leg:
5074
+ # - `Workflow`: requires explicit user opt-in; a headless leg has no user.
5075
+ # - `Skill`: all `coord` skills are operator-only runbooks.
5076
+ # - `ScheduleWakeup`: every leg is one-shot (WORKER_SYSTEM_PROMPT's
5077
+ # ONE-SHOT section, #1394) — there is no future turn to wake up into.
5078
+ # - `Task`: CLAUDE.md mandates `graphify query` + grep for navigation
5079
+ # instead of spawning a subagent.
5080
+ # - `ReportFindings`, `ListAgents`: unreferenced by any coord system
5081
+ # prompt; no fleet-messaging or review-findings-reporting surface is
5082
+ # exposed to a leg.
5083
+ # - The remainder (`Cron*`, `DesignSync`, `EnterWorktree`/`ExitWorktree`,
5084
+ # `NotebookEdit`, `PushNotification`, `RemoteTrigger`, `SendMessage`):
5085
+ # operator/coordinator-session tools with no worker-leg counterpart —
5086
+ # already deferred behind `ToolSearch` so each costs only ~6-9 tokens,
5087
+ # but included for a consistent, minimal tool surface.
5088
+ #
5089
+ # Deliberately EXCLUDED, despite being equally unusable:
5090
+ # - `Monitor`: 0 marginal token cost, and WORKER_SYSTEM_PROMPT's ONE-SHOT
5091
+ # polling guidance depends on it (it's the sanctioned way to await a
5092
+ # backgrounded command in bounded steps).
5093
+ # - `ToolSearch`: cheap on its own, and removing it is untested — it's the
5094
+ # mechanism that resolves every deferred tool name at all.
5095
+ # - `TaskOutput`/`TaskStop`: look like `Task`'s output/cancel pair at
5096
+ # first glance, but WORKER_SYSTEM_PROMPT's ONE-SHOT section and
5097
+ # coord/smoke.py's SMOKE_SYSTEM_PROMPT both explicitly teach
5098
+ # `TaskOutput` as the bounded-poll alternative to `Monitor` for a
5099
+ # backgrounded Bash command (`run_in_background`) — disallowing it
5100
+ # would make that documented guidance a dead end. `TaskStop` is kept
5101
+ # alongside it since it's the same background-job-management pair.
5102
+ # - `WebFetch`/`WebSearch`: ~6 tokens each either way (negligible), and a
5103
+ # worker may legitimately need to look up library docs or an error
5104
+ # message mid-task — kept allowed rather than trading real capability
5105
+ # for a rounding error in prompt size.
5106
+ UNUSABLE_TOOL_SCHEMAS: list[str] = [
5107
+ "Workflow",
5108
+ "Skill",
5109
+ "ScheduleWakeup",
5110
+ "Task",
5111
+ "ReportFindings",
5112
+ "ListAgents",
5113
+ "CronCreate",
5114
+ "CronDelete",
5115
+ "CronList",
5116
+ "DesignSync",
5117
+ "EnterWorktree",
5118
+ "ExitWorktree",
5119
+ "NotebookEdit",
5120
+ "PushNotification",
5121
+ "RemoteTrigger",
5122
+ "SendMessage",
5123
+ ]
5124
+
5125
+
5126
+ def worker_disallowed_tools(spec: AssignmentSpec, allowed_tools: str) -> list[str]:
5127
+ """Return the ordered ``--disallowedTools`` entries for *spec*.
5128
+
5129
+ **Single source of truth.** Both argv builders that emit
5130
+ ``--disallowedTools`` — :func:`default_worker_command` and
5131
+ :meth:`coord.providers.claude.ClaudeProvider.build_command` — call
5132
+ this, rather than each reimplementing the same four-layer stack. The
5133
+ two previously transcribed the logic independently, which is exactly
5134
+ how #3420's ``UNUSABLE_TOOL_SCHEMAS`` layer landed in one and not the
5135
+ other; the parity suite in ``tests/test_providers.py`` caught it, but
5136
+ a shared function makes the divergence unrepresentable instead of
5137
+ merely detectable.
5138
+
5139
+ Layers, in argv order (each skips entries an earlier layer already
5140
+ added, so the result is de-duplicated but order-stable):
5141
+
5142
+ 1. #3420 ``UNUSABLE_TOOL_SCHEMAS`` — unconditional, every spec type.
5143
+ 2. #1315 sealed-oracle write guard, from ``spec.files_forbidden``.
5144
+ 3. #1642 base-checkout write guard — only when *allowed_tools*
5145
+ actually grants ``Edit``; for the Read/Bash-only chat types the
5146
+ guard would be a no-op cluttering the argv.
5147
+ 4. #2461 ``REVIEW_DENY_COMMANDS`` — only for ``spec.type ==
5148
+ "review"``, wiring the mutating-command deny list into the
5149
+ CLI-enforced flag and not just the soft prompt reminder.
5150
+
5151
+ Args:
5152
+ spec: The assignment being dispatched.
5153
+ allowed_tools: The ``--allowedTools`` value computed for this
5154
+ spec — inspected for ``Edit`` to decide layer 3. Passing the
5155
+ caller's own computed value (rather than re-deriving it here)
5156
+ keeps the two flags consistent even when a caller overrides
5157
+ ``--allowedTools`` explicitly, as ``build_command`` allows.
5158
+
5159
+ Returns:
5160
+ A fresh list; callers may mutate it. Empty only in the
5161
+ impossible case where every layer contributes nothing — since
5162
+ #3420, layer 1 is unconditional, so in practice this is always
5163
+ non-empty and ``--disallowedTools`` is always emitted.
5164
+ """
5165
+ # #3420: strip the unusable-tool schemas from every spec type, including
5166
+ # the Read/Bash-only chat legs (plan, refinement, test-chat,
5167
+ # new-issue-chat, smoke, review) — they carry the same
5168
+ # Workflow/Skill/Task/etc. schemas as a work leg and benefit identically.
5169
+ # This is FIRST so the guards below, which each append to this same
5170
+ # list, keep working unchanged.
5171
+ disallowed_tools = list(UNUSABLE_TOOL_SCHEMAS)
5172
+ # #1315: structural sealing enforcement — see _sealed_write_guard_tools.
5173
+ for pattern in _sealed_write_guard_tools(spec.files_forbidden):
5174
+ if pattern not in disallowed_tools:
5175
+ disallowed_tools.append(pattern)
5176
+ # #1642: block Edit/Write on the shared base checkout for any spec.type
5177
+ # that actually gets Edit/Write in --allowedTools — the Read/Bash-only
5178
+ # chat types can't touch files regardless, and adding the guard there
5179
+ # would be a no-op cluttering their argv for nothing.
5180
+ if "Edit" in allowed_tools:
5181
+ for pattern in _base_checkout_write_guard_tools(spec.repo_path):
5182
+ if pattern not in disallowed_tools:
5183
+ disallowed_tools.append(pattern)
5184
+ # #2461: review gets its mutating-command deny list wired into
5185
+ # --disallowedTools too, not just the soft system-prompt reminder from
5186
+ # build_deny_prompt — the CLI enforces this one even if the model
5187
+ # decides to ignore its own prompt.
5188
+ if spec.type == "review":
5189
+ for pattern in REVIEW_DENY_COMMANDS:
5190
+ if pattern not in disallowed_tools:
5191
+ disallowed_tools.append(pattern)
5192
+ return disallowed_tools
5193
+
5194
+
5065
5195
  def default_worker_command(spec: AssignmentSpec, *, binary: str = DEFAULT_WORKER_BINARY) -> list[str]:
5066
5196
  """Build the argv for invoking the worker on this assignment.
5067
5197
 
@@ -5347,24 +5477,10 @@ def default_worker_command(spec: AssignmentSpec, *, binary: str = DEFAULT_WORKER
5347
5477
  ]
5348
5478
  if spec.model:
5349
5479
  argv.extend(["--model", spec.model])
5350
- # #1315: structural sealing enforcement — see _sealed_write_guard_tools.
5351
- disallowed_tools = _sealed_write_guard_tools(spec.files_forbidden)
5352
- # #1642: block Edit/Write on the shared base checkout for any spec.type
5353
- # that actually gets Edit/Write in --allowedTools — the Read/Bash-only
5354
- # chat types above can't touch files regardless, and adding the guard
5355
- # there would be a no-op cluttering their argv for nothing.
5356
- if "Edit" in allowed_tools:
5357
- for pattern in _base_checkout_write_guard_tools(spec.repo_path):
5358
- if pattern not in disallowed_tools:
5359
- disallowed_tools.append(pattern)
5360
- # #2461: review gets its mutating-command deny list wired into
5361
- # --disallowedTools too, not just the soft system-prompt reminder from
5362
- # build_deny_prompt above — the CLI enforces this one even if the model
5363
- # decides to ignore its own prompt.
5364
- if spec.type == "review":
5365
- for pattern in REVIEW_DENY_COMMANDS:
5366
- if pattern not in disallowed_tools:
5367
- disallowed_tools.append(pattern)
5480
+ # #3420 / #1315 / #1642 / #2461: all four --disallowedTools layers live
5481
+ # in worker_disallowed_tools, shared with ClaudeProvider.build_command so
5482
+ # the two argv builders cannot drift apart (see that function's docstring).
5483
+ disallowed_tools = worker_disallowed_tools(spec, allowed_tools)
5368
5484
  if disallowed_tools:
5369
5485
  argv.extend(["--disallowedTools", ",".join(disallowed_tools)])
5370
5486
  # #315: when resuming a prior chat session, load the prior conversation so
@@ -2,10 +2,13 @@
2
2
 
3
3
  Parity requirement: ``ClaudeProvider().build_command(spec)`` produces the
4
4
  **same argv** as ``coord.agent.default_worker_command(spec)`` for the same
5
- inputs. The logic is a direct transcription of that function's body with
6
- the ``resolved_model`` / ``system_prompt`` / ``allowed_tools`` /
7
- ``permission_mode`` kwargs spliced in; the parity tests in
8
- ``tests/test_providers.py`` enforce this mechanically.
5
+ inputs. The ``spec.type`` → prompt/allowed-tools branches are a direct
6
+ transcription of that function's body with the ``resolved_model`` /
7
+ ``system_prompt`` / ``allowed_tools`` / ``permission_mode`` kwargs spliced
8
+ in; the parity tests in ``tests/test_providers.py`` enforce this
9
+ mechanically. The ``--disallowedTools`` stack is **not** transcribed —
10
+ both builders call the shared ``coord.agent.worker_disallowed_tools``, so
11
+ a new deny layer lands in both without a sync step (#3420).
9
12
 
10
13
  Imports from ``coord.agent`` are **deferred** (inside method bodies) to keep
11
14
  the import cycle latent until the wiring issue lands. At that point
@@ -119,10 +122,9 @@ class ClaudeProvider(Provider):
119
122
  TEST_CHAT_SYSTEM_PROMPT,
120
123
  WORKER_PLAN_PROMPT,
121
124
  WORKER_SYSTEM_PROMPT,
122
- _base_checkout_write_guard_tools,
123
125
  _claude_md_system_prompt_suffix,
124
- _sealed_write_guard_tools,
125
126
  build_deny_prompt,
127
+ worker_disallowed_tools,
126
128
  )
127
129
  from coord.review import REVIEWER_SYSTEM_PROMPT # noqa: PLC0415
128
130
  from coord.smoke import SMOKE_SYSTEM_PROMPT # noqa: PLC0415
@@ -285,20 +287,16 @@ class ClaudeProvider(Provider):
285
287
  ]
286
288
  if effective_model:
287
289
  argv.extend(["--model", effective_model])
288
- # #1315 / #1642: same structural write guards as
289
- # default_worker_command — sealed-oracle prefix plus (for any type
290
- # with Edit in --allowedTools) the shared base checkout.
291
- disallowed_tools = _sealed_write_guard_tools(spec.files_forbidden)
292
- if "Edit" in allowed_tools:
293
- for pattern in _base_checkout_write_guard_tools(spec.repo_path):
294
- if pattern not in disallowed_tools:
295
- disallowed_tools.append(pattern)
296
- # #2461: same CLI-enforced hard block as default_worker_command —
297
- # see REVIEW_DENY_COMMANDS.
298
- if spec.type == "review":
299
- for pattern in REVIEW_DENY_COMMANDS:
300
- if pattern not in disallowed_tools:
301
- disallowed_tools.append(pattern)
290
+ # #3420 / #1315 / #1642 / #2461: NOT transcribed from
291
+ # default_worker_command like the branches above — both builders call
292
+ # the one shared `worker_disallowed_tools`, so a new deny layer lands
293
+ # in both by construction. It previously WAS transcribed here, and
294
+ # #3420's unusable-tool-schema layer went into default_worker_command
295
+ # only; the parity suite caught the drift, but the shared call means
296
+ # there is nothing left to keep in sync. Pass this method's own
297
+ # `allowed_tools` (possibly a caller override) so the two flags stay
298
+ # consistent.
299
+ disallowed_tools = worker_disallowed_tools(spec, allowed_tools)
302
300
  if disallowed_tools:
303
301
  argv.extend(["--disallowedTools", ",".join(disallowed_tools)])
304
302
  if spec.resume_session_id:
@@ -250,6 +250,21 @@ which is why it lives here rather than in the file every worker leg loads. The o
250
250
  statements of these rules remain in `CLAUDE.md`'s "Key Design Decisions"; the reasoning is
251
251
  here.
252
252
 
253
+ ### How the review prompt is assembled
254
+
255
+ The reviewer gets a prompt built from:
256
+ 1. **Repo's CLAUDE.md** — the project rules (source of truth, not duplicated)
257
+ 2. **Generic checklist** — "did you add tests?", "did you stay in file scope?", "any security issues?"
258
+ 3. **Repo overrides** — project-specific patterns from `coordinator.yml` `reviews.repo_overrides`
259
+ 4. **The diff** — `gh pr diff` of the worker's branch vs base
260
+ 5. **The issue** — title and body for intent verification
261
+
262
+ The reviewer reads the rules and enforces them against the diff. It does not have the worker's session context — genuinely independent.
263
+
264
+ Moved here from [`CLAUDE.md`](../CLAUDE.md) (#3422). The reviewer does not need a description
265
+ of how its own prompt was built, and neither does a worker — this is for someone editing
266
+ `coord/review.py`.
267
+
253
268
  ### Agent servers are dumb dispatchers
254
269
 
255
270
  They spawn `claude -p` and track the subprocess. All intelligence is in the coordinator
@@ -19,6 +19,29 @@ in `docs/`.*
19
19
  still manual. Epic #3117.
20
20
  - [`DRIVE_QUEUE.md`](DRIVE_QUEUE.md) — the durable, board-backed driver (`coord drive-queue`, #1750). **Read the top section before queuing more than ~2 issues on one repo.**
21
21
 
22
+ ## The core loop
23
+
24
+ Moved here from [`CLAUDE.md`](../CLAUDE.md) (#3422): a worker cannot run any of these —
25
+ the coordinator owns dispatch and GitHub — so it was pure operator surface being re-read
26
+ on every turn of every leg. `coord <cmd> --help` remains the authoritative reference.
27
+
28
+ `coord <cmd> --help` documents every command + flags. The core loop:
29
+
30
+ ```bash
31
+ coord plan # Brain proposes assignments for idle machines
32
+ coord approve 1,3 # Dispatch approved proposals (comma-separated IDs)
33
+ coord assign <machine> <repo> <issue> [--briefing TEXT | --briefing-file F] [--dry-run] # Direct dispatch
34
+ coord status [--freshness] # Machines, assignments, connectivity (+ repo freshness vs GitHub HEADs)
35
+ coord log <id> [-f] [--machine NAME] # claude -p output (remote logs need --machine)
36
+ coord notify # Poll agents, post completion/failure comments to GitHub
37
+ coord test --passed|--fail|--skipped <id> # Record the Test-gate verdict (bare `coord test <id>` builds+tests locally)
38
+ coord merge [--dry-run] [--repo NAME] [--method rebase|squash|merge] [--order IDs] [--force-merge]
39
+ coord reconcile-merges # Backfill missing branches + record out-of-band merges (#609/#611)
40
+ coord retry|stop|resume <id> # Recovery; `coord done` ends the session
41
+ ```
42
+
43
+ Setup / diagnostics (discoverable via `--help`): `coord init`, `coord config`, `coord agent`, `coord serve`, `coord web`, `coord diagnose`, `coord sessions [--remote]`, `coord split`, `coord notifier`, `coord repo add` / `coord repo doctor`.
44
+
22
45
  ## Reference
23
46
 
24
47
  - [`ARCHITECTURE.md`](ARCHITECTURE.md) — how it all fits together, plus the settled design rationale. Two diagnostic entry points: [why a merge/review isn't happening](ARCHITECTURE.md#when-a-merge-isnt-happening) (**check here first when "Go does nothing"**) and [why an issue is in the Pipeline you never dispatched](ARCHITECTURE.md#when-an-issue-is-sitting-in-the-pipeline-you-never-dispatched).
@@ -26,6 +26,7 @@ from coord.agent import (
26
26
  REVIEW_DENY_COMMANDS,
27
27
  RUNNING,
28
28
  RUNTIME_CEILING_EXIT,
29
+ UNUSABLE_TOOL_SCHEMAS,
29
30
  MOCK_AUTHOR_SYSTEM_PROMPT,
30
31
  WORKER_SYSTEM_PROMPT,
31
32
  AgentAssignment,
@@ -1862,8 +1863,10 @@ def test_default_worker_command_blocks_base_checkout_writes() -> None:
1862
1863
  disallowed = argv[idx + 1]
1863
1864
  assert "Edit(//tmp/repo/**)" in disallowed
1864
1865
  assert "Write(//tmp/repo/**)" in disallowed
1865
- # Read-only spec types (no Edit in --allowedTools) get no guard at all —
1866
- # they can't write anywhere so the flag would be a no-op.
1866
+ # Read-only spec types (no Edit in --allowedTools) get no base-checkout
1867
+ # guard entries — they can't write anywhere so those patterns would be a
1868
+ # no-op. --disallowedTools itself is still present, though (#3420: the
1869
+ # unusable-tool-schema list applies unconditionally to every spec type).
1867
1870
  plan_spec = AssignmentSpec(
1868
1871
  repo_name="api",
1869
1872
  repo_path="/tmp/repo",
@@ -1872,7 +1875,11 @@ def test_default_worker_command_blocks_base_checkout_writes() -> None:
1872
1875
  briefing="b",
1873
1876
  type="plan",
1874
1877
  )
1875
- assert "--disallowedTools" not in default_worker_command(plan_spec)
1878
+ plan_argv = default_worker_command(plan_spec)
1879
+ assert "--disallowedTools" in plan_argv
1880
+ plan_disallowed = plan_argv[plan_argv.index("--disallowedTools") + 1]
1881
+ assert "Edit(" not in plan_disallowed
1882
+ assert "Write(" not in plan_disallowed
1876
1883
 
1877
1884
 
1878
1885
  def test_default_worker_command_blocks_sealed_oracle_writes() -> None:
@@ -1927,6 +1934,119 @@ def test_default_worker_command_mock_author_not_sealed() -> None:
1927
1934
  assert "Write(//tmp/repo/**)" in disallowed
1928
1935
 
1929
1936
 
1937
+ # ── #3420: strip unusable tool schemas from every leg ────────────────────────
1938
+
1939
+
1940
+ @pytest.mark.parametrize(
1941
+ "spec_type",
1942
+ [
1943
+ "plan",
1944
+ "refinement",
1945
+ "test-chat",
1946
+ "new-issue-chat",
1947
+ "milestone-chat",
1948
+ "decomposition-chat",
1949
+ "mock-author",
1950
+ "smoke",
1951
+ "review",
1952
+ "work",
1953
+ ],
1954
+ )
1955
+ def test_default_worker_command_disallows_unusable_tool_schemas_for_every_spec_type(
1956
+ spec_type: str,
1957
+ ) -> None:
1958
+ """Every tool schema Claude Code still loads even though a worker/chat
1959
+ leg can never legitimately call it (Workflow needs a user, Skill is
1960
+ operator-only, etc. — see UNUSABLE_TOOL_SCHEMAS' docstring comment) must
1961
+ land in --disallowedTools for EVERY spec type, not just work legs — the
1962
+ Read/Bash-only chat types pay the exact same schema cost and benefit
1963
+ identically (#3420)."""
1964
+ spec = AssignmentSpec(
1965
+ repo_name="api",
1966
+ repo_path="/tmp/repo",
1967
+ issue_number=1,
1968
+ issue_title="t",
1969
+ briefing="b",
1970
+ type=spec_type,
1971
+ )
1972
+ argv = default_worker_command(spec)
1973
+ assert "--disallowedTools" in argv
1974
+ disallowed = argv[argv.index("--disallowedTools") + 1].split(",")
1975
+ for tool in UNUSABLE_TOOL_SCHEMAS:
1976
+ assert tool in disallowed, f"{tool} missing from --disallowedTools for type={spec_type}"
1977
+
1978
+
1979
+ def test_unusable_tool_schemas_keeps_the_one_shot_polling_tools() -> None:
1980
+ """Monitor and TaskOutput/TaskStop must NOT be disallowed: both
1981
+ WORKER_SYSTEM_PROMPT's ONE-SHOT section and coord.smoke.SMOKE_SYSTEM_PROMPT
1982
+ explicitly teach `Monitor` / `TaskOutput` as the sanctioned bounded-poll
1983
+ pattern for a backgrounded Bash command. Disallowing either would turn
1984
+ documented guidance into a dead end. ToolSearch (resolves every deferred
1985
+ tool name) and WebFetch/WebSearch (kept for real capability — see the
1986
+ comment above UNUSABLE_TOOL_SCHEMAS) must not be disallowed either."""
1987
+ for tool in ("Monitor", "ToolSearch", "TaskOutput", "TaskStop", "WebFetch", "WebSearch"):
1988
+ assert tool not in UNUSABLE_TOOL_SCHEMAS
1989
+
1990
+
1991
+ def test_default_worker_command_unusable_tool_schemas_coexist_with_sealed_write_guard() -> None:
1992
+ """Regression for #3420: disallowed_tools must be BUILT UP (append), not
1993
+ overwritten, by the new unusable-tool-schema seed — a bare `disallowed_tools
1994
+ = list(UNUSABLE_TOOL_SCHEMAS)` placed after the #1315 sealed-write guard
1995
+ populated it would silently discard that guard. Confirms both the new
1996
+ entries and the existing sealed-oracle guard appear together in the same
1997
+ --disallowedTools value for a sealed work spec."""
1998
+ spec = AssignmentSpec(
1999
+ repo_name="api",
2000
+ repo_path="/tmp/repo",
2001
+ issue_number=1120,
2002
+ issue_title="t",
2003
+ briefing="please fix tests/acceptance/ms-38/contract.md",
2004
+ files_forbidden=["tests/acceptance/"],
2005
+ )
2006
+ argv = default_worker_command(spec)
2007
+ disallowed = argv[argv.index("--disallowedTools") + 1]
2008
+ assert "Edit(tests/acceptance/**)" in disallowed
2009
+ assert "Write(tests/acceptance/**)" in disallowed
2010
+ for tool in UNUSABLE_TOOL_SCHEMAS:
2011
+ assert tool in disallowed.split(",")
2012
+
2013
+
2014
+ @pytest.mark.posix_only
2015
+ @_posix_repo_path_skip
2016
+ def test_default_worker_command_unusable_tool_schemas_coexist_with_base_checkout_guard() -> None:
2017
+ """Regression for #3420: confirms the #1642 base-checkout guard (which
2018
+ appends to disallowed_tools AFTER the new seed) still lands alongside the
2019
+ unusable-tool-schema entries for an Edit-capable spec — the seed must not
2020
+ have clobbered what the base-checkout guard adds next."""
2021
+ spec = AssignmentSpec(
2022
+ repo_name="api",
2023
+ repo_path="/tmp/repo",
2024
+ issue_number=1,
2025
+ issue_title="t",
2026
+ briefing="b",
2027
+ files_forbidden=[],
2028
+ )
2029
+ argv = default_worker_command(spec)
2030
+ disallowed = argv[argv.index("--disallowedTools") + 1]
2031
+ assert "Edit(//tmp/repo/**)" in disallowed
2032
+ assert "Write(//tmp/repo/**)" in disallowed
2033
+ for tool in UNUSABLE_TOOL_SCHEMAS:
2034
+ assert tool in disallowed.split(",")
2035
+
2036
+
2037
+ def test_default_worker_command_unusable_tool_schemas_coexist_with_review_deny_commands() -> None:
2038
+ """Regression for #3420: confirms #2461's REVIEW_DENY_COMMANDS (appended
2039
+ to disallowed_tools last, for spec.type == "review") still lands
2040
+ alongside the unusable-tool-schema entries — a bare overwrite anywhere in
2041
+ the chain would silently disable the review mutating-command guard."""
2042
+ argv = default_worker_command(_review_spec())
2043
+ disallowed = argv[argv.index("--disallowedTools") + 1].split(",")
2044
+ for pattern in REVIEW_DENY_COMMANDS:
2045
+ assert pattern in disallowed
2046
+ for tool in UNUSABLE_TOOL_SCHEMAS:
2047
+ assert tool in disallowed
2048
+
2049
+
1930
2050
  # ── #1445: worktree-writability preflight ───────────────────────────────────
1931
2051
 
1932
2052
 
@@ -2,9 +2,13 @@
2
2
 
3
3
  CLAUDE.md is loaded into every worker leg, every review leg, and every
4
4
  coordinator session -- and re-read on every turn of each, at cache-read
5
- rates. It has already been cut twice for size (#2195: 41,506 -> 24,219
5
+ rates. It had already been cut twice for size (#2195: 41,506 -> 24,219
6
6
  bytes; #2787: ~29,732 -> 19,622 bytes) because nothing watched its size in
7
7
  between, and it drifted back up at roughly 500 bytes/day both times.
8
+ #3422 cut it a third time (18,605 -> 15,001) by moving the `## Commands`
9
+ reference, the explanatory Key-Design bullets and the review-prompt-assembly
10
+ note out to docs/ -- the first cut made with this guard already in place, so
11
+ the cap came down with the file rather than leaving room to drift back into.
8
12
 
9
13
  This test is that watch. It is deliberately dumb: a byte count, nothing
10
14
  more -- no parsing, no section analysis, no escape hatch. See #2817 for the
@@ -15,14 +19,14 @@ from __future__ import annotations
15
19
 
16
20
  from pathlib import Path
17
21
 
18
- # ~4% headroom over the 19,622-byte size CLAUDE.md was at immediately after
19
- # the #2787 re-split. Raising this constant is a deliberate, reviewable act
22
+ # ~6% headroom over the 15,001-byte size CLAUDE.md was at immediately after
23
+ # the #3422 operator-split. Raising this constant is a deliberate, reviewable act
20
24
  # -- not something to do reflexively to make this test pass. If CLAUDE.md
21
25
  # has grown past the cap, the fix is almost always to MOVE a section to
22
26
  # docs/ (leaving a one-line pointer behind), not to raise this number. Per
23
27
  # the file's own scope note: "if a new rule does not change what a worker
24
28
  # does, it belongs in docs/."
25
- CLAUDE_MD_MAX_BYTES = 20480 # 20 KiB
29
+ CLAUDE_MD_MAX_BYTES = 15872 # 15.5 KiB
26
30
 
27
31
  CLAUDE_MD_PATH = Path(__file__).resolve().parent.parent / "CLAUDE.md"
28
32
 
@@ -37,7 +41,7 @@ def test_claude_md_stays_within_byte_budget() -> None:
37
41
  "Its size is a direct, per-turn, fleet-wide cost, not a one-time "
38
42
  "reading-time cost.\n\n"
39
43
  "This file has already been cut twice for exactly this reason "
40
- "(#2195, #2787) and drifted back up both times because nothing "
44
+ "(#2195, #2787, #3422) and drifted back up each time because nothing "
41
45
  "enforced a cap -- that is what this test is for.\n\n"
42
46
  "The fix is almost always to MOVE a section out to docs/ (leaving "
43
47
  "a short pointer line in CLAUDE.md), per the file's own scope "