code-coordinator 0.5.327__tar.gz → 0.5.329__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 (822) hide show
  1. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/code_coordinator.egg-info/scm_version.json +2 -2
  4. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/agent.py +89 -9
  5. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/commands/portal.py +16 -5
  6. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/decomposition_chat.py +220 -0
  7. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_decomposition_chat.py +564 -0
  8. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/.claude/commands/board.md +0 -0
  9. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/.claude/commands/complete-session.md +0 -0
  10. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/.claude/commands/coordinator.md +0 -0
  11. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/.githooks/_lib.sh +0 -0
  12. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/.githooks/post-checkout +0 -0
  13. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/.githooks/post-commit +0 -0
  14. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/.githooks/post-merge +0 -0
  15. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  16. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/.github/coord-ci-acceptance.yml +0 -0
  17. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/.github/workflows/auto-release.yml +0 -0
  18. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/.github/workflows/publish.yml +0 -0
  19. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/.github/workflows/test.yml +0 -0
  20. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/.gitignore +0 -0
  21. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/CLAUDE.md +0 -0
  22. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/GOAL.md +0 -0
  23. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/LICENSE +0 -0
  24. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/MANIFEST.in +0 -0
  25. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/README.md +0 -0
  26. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/code_coordinator.egg-info/SOURCES.txt +0 -0
  27. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/code_coordinator.egg-info/dependency_links.txt +0 -0
  28. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/code_coordinator.egg-info/entry_points.txt +0 -0
  29. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/code_coordinator.egg-info/requires.txt +0 -0
  30. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/code_coordinator.egg-info/scm_file_list.json +0 -0
  31. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/code_coordinator.egg-info/top_level.txt +0 -0
  32. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/__init__.py +0 -0
  33. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/_board_mapping.py +0 -0
  34. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/acceptance.py +0 -0
  35. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/acceptance_drivers.py +0 -0
  36. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/agent_app.py +0 -0
  37. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/agent_update.py +0 -0
  38. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/agents/opencode/.gitignore +0 -0
  39. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/agents/opencode/agents/work.md +0 -0
  40. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/agents/opencode/routing.jsonc +0 -0
  41. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/approved_work.py +0 -0
  42. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/audit.py +0 -0
  43. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/auto_loop.py +0 -0
  44. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/block_log.py +0 -0
  45. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/board_schema.py +0 -0
  46. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/board_service.py +0 -0
  47. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/board_wire.py +0 -0
  48. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/brain.py +0 -0
  49. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/branch_model.py +0 -0
  50. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/bug_intake.py +0 -0
  51. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/cargo_cache.py +0 -0
  52. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/ci_fix.py +0 -0
  53. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/ci_github.py +0 -0
  54. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/ci_gitlab.py +0 -0
  55. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/ci_store.py +0 -0
  56. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/claim.py +0 -0
  57. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/cli.py +0 -0
  58. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/client.py +0 -0
  59. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/commands/__init__.py +0 -0
  60. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/commands/_common.py +0 -0
  61. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/commands/acceptance.py +0 -0
  62. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/commands/agent_ops.py +0 -0
  63. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/commands/audit.py +0 -0
  64. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/commands/chat.py +0 -0
  65. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/commands/dispatch.py +0 -0
  66. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/commands/dispatch_workers.py +0 -0
  67. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/commands/drive.py +0 -0
  68. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/commands/drive_queue.py +0 -0
  69. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/commands/gate_a.py +0 -0
  70. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/commands/gates.py +0 -0
  71. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/commands/issues.py +0 -0
  72. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/commands/lifecycle.py +0 -0
  73. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/commands/machine.py +0 -0
  74. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/commands/merge.py +0 -0
  75. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/commands/milestone.py +0 -0
  76. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/commands/plan_followup.py +0 -0
  77. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/commands/plans.py +0 -0
  78. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/commands/pr.py +0 -0
  79. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/commands/release.py +0 -0
  80. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/commands/repo.py +0 -0
  81. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/commands/report.py +0 -0
  82. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/commands/review.py +0 -0
  83. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/commands/scorecard.py +0 -0
  84. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/commands/sessions.py +0 -0
  85. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/commands/setup.py +0 -0
  86. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/commands/status.py +0 -0
  87. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/commands/store_migrate.py +0 -0
  88. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/commands/terminal.py +0 -0
  89. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/commands/test_gate.py +0 -0
  90. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/commands/tui.py +0 -0
  91. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/comments.py +0 -0
  92. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/config.py +0 -0
  93. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/config_reload.py +0 -0
  94. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/confirm_test.py +0 -0
  95. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/conflict_fix.py +0 -0
  96. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/dao.py +0 -0
  97. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/dashboard/__init__.py +0 -0
  98. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/dashboard/fixture.py +0 -0
  99. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/dashboard/index.html +0 -0
  100. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/dashboard/server.py +0 -0
  101. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/dashboard/terminal.py +0 -0
  102. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/db.py +0 -0
  103. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/dead_end.py +0 -0
  104. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/deploy/README.md +0 -0
  105. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/deploy/coord-agent.service +0 -0
  106. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/deploy/coord-db-backup.service +0 -0
  107. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/deploy/coord-db-backup.sh +0 -0
  108. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/deploy/coord-db-backup.timer +0 -0
  109. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/deploy/coord-drive-queue.service +0 -0
  110. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/deploy/coord-drive-queue.timer +0 -0
  111. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/deploy/coord-failure-notify.service +0 -0
  112. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/deploy/coord-fleet-watchdog.service +0 -0
  113. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/deploy/coord-fleet-watchdog.timer +0 -0
  114. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/deploy/coord-notify.service +0 -0
  115. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/deploy/coord-notify.timer +0 -0
  116. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/deploy/coord-release-propagate.service +0 -0
  117. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/deploy/coord-release-propagate.timer +0 -0
  118. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/deploy/coord-release-window.service +0 -0
  119. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/deploy/coord-release-window.timer +0 -0
  120. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/deploy/coord-serve.service +0 -0
  121. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/deploy/coord-web-dist-build.service +0 -0
  122. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/deploy/coord-web-dist-build.timer +0 -0
  123. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/deploy/coord-web.service +0 -0
  124. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/deploy_manifest.py +0 -0
  125. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/deploy_units.py +0 -0
  126. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/deprecation_telemetry.py +0 -0
  127. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/deps.py +0 -0
  128. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/diagnose.py +0 -0
  129. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/dispatch.py +0 -0
  130. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/dist_name.py +0 -0
  131. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/drive.py +0 -0
  132. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/drive_queue.py +0 -0
  133. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/drive_state.py +0 -0
  134. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/events.py +0 -0
  135. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/failure_class.py +0 -0
  136. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/filelock.py +0 -0
  137. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/fleet_config_health.py +0 -0
  138. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/forge_availability.py +0 -0
  139. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/freshness.py +0 -0
  140. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/gate_a.py +0 -0
  141. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/gate_b.py +0 -0
  142. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/gate_snapshot.py +0 -0
  143. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/gates.py +0 -0
  144. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/github_ops.py +0 -0
  145. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/github_throttle.py +0 -0
  146. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/goal.py +0 -0
  147. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/graph_health.py +0 -0
  148. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/health/__init__.py +0 -0
  149. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/health/aggregate.py +0 -0
  150. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/health/checks/__init__.py +0 -0
  151. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/health/checks/_ci_pin.py +0 -0
  152. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/health/checks/agent_install.py +0 -0
  153. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/health/checks/cargo_targets.py +0 -0
  154. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/health/checks/claude_binary.py +0 -0
  155. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/health/checks/coord_tui_ci_pin.py +0 -0
  156. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/health/checks/coord_web_ci_pin.py +0 -0
  157. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/health/checks/deploy_lane_facts.py +0 -0
  158. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/health/checks/disk.py +0 -0
  159. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/health/checks/fleet_board.py +0 -0
  160. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  161. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/health/checks/fleet_phantom.py +0 -0
  162. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/health/checks/fleet_unit_drift.py +0 -0
  163. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/health/checks/graph.py +0 -0
  164. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/health/checks/graphify_cli.py +0 -0
  165. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/health/checks/index_lock.py +0 -0
  166. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/health/checks/issues_sync_staleness.py +0 -0
  167. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/health/checks/plan_usage.py +0 -0
  168. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/health/checks/release_cordon.py +0 -0
  169. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/health/checks/repo_state.py +0 -0
  170. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/health/checks/spawned_coord.py +0 -0
  171. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/health/checks/stalled_pipeline.py +0 -0
  172. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/health/checks/timer_active.py +0 -0
  173. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/health/checks/toolchain.py +0 -0
  174. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/health/checks/unit_drift.py +0 -0
  175. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/health/checks/unit_enablement.py +0 -0
  176. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/health/checks/wedged_drive_queue.py +0 -0
  177. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/health/checks/worktrees.py +0 -0
  178. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/health/cli.py +0 -0
  179. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/health/context.py +0 -0
  180. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/health/fleet_snapshot.py +0 -0
  181. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/health/models.py +0 -0
  182. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/health/pypi.py +0 -0
  183. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/health/registry.py +0 -0
  184. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/health/render.py +0 -0
  185. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/health/units.py +0 -0
  186. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/hooks.py +0 -0
  187. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/housekeeping.py +0 -0
  188. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/interactive.py +0 -0
  189. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/issue_store.py +0 -0
  190. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/issues_sync_status.py +0 -0
  191. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/liveness_auditor.py +0 -0
  192. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/machine_onboard.py +0 -0
  193. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/machine_pause.py +0 -0
  194. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/merge_queue.py +0 -0
  195. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/milestone_chat.py +0 -0
  196. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/milestone_dispatch.py +0 -0
  197. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/milestone_gate.py +0 -0
  198. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/milestone_order.py +0 -0
  199. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/mock_author.py +0 -0
  200. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/models.py +0 -0
  201. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/network.py +0 -0
  202. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/new_issue_chat.py +0 -0
  203. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/notifier/__init__.py +0 -0
  204. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/notifier/baseline.py +0 -0
  205. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/notifier/cli.py +0 -0
  206. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/notifier/collect.py +0 -0
  207. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/notifier/digest.py +0 -0
  208. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/notifier/models.py +0 -0
  209. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/notifier/predicate.py +0 -0
  210. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/notifier/service.py +0 -0
  211. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/notifier/store.py +0 -0
  212. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/notifier/transport.py +0 -0
  213. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/notify.py +0 -0
  214. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/openapi.py +0 -0
  215. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/overlap_fence.py +0 -0
  216. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/overlap_predict.py +0 -0
  217. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/parentage.py +0 -0
  218. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/parentage_github.py +0 -0
  219. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/pipeline.py +0 -0
  220. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/plan_parser.py +0 -0
  221. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/plans.py +0 -0
  222. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/platform_paths.py +0 -0
  223. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/portal_bridge.py +0 -0
  224. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/portal_store.py +0 -0
  225. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/portal_sync.py +0 -0
  226. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/pr_body_lint.py +0 -0
  227. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/prereqs.py +0 -0
  228. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/progress.py +0 -0
  229. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/providers/__init__.py +0 -0
  230. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/providers/base.py +0 -0
  231. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/providers/claude.py +0 -0
  232. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/providers/claude_pty.py +0 -0
  233. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/providers/opencode.py +0 -0
  234. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/queue_diagnose.py +0 -0
  235. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/reconcile.py +0 -0
  236. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/reconcile_tick.py +0 -0
  237. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/refine_chat.py +0 -0
  238. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/release_cordon.py +0 -0
  239. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/release_propagate.py +0 -0
  240. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/release_verify.py +0 -0
  241. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/release_window.py +0 -0
  242. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/repo_dormancy.py +0 -0
  243. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/repo_edit.py +0 -0
  244. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/repo_onboard.py +0 -0
  245. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/reports.py +0 -0
  246. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/rest_schema.py +0 -0
  247. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/revalidate.py +0 -0
  248. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/review.py +0 -0
  249. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/scorecard.py +0 -0
  250. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/self_health.py +0 -0
  251. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/serve_app.py +0 -0
  252. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  253. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  254. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  255. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  256. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  257. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/skills/portal-followup/SKILL.md +0 -0
  258. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/skills/release-now/SKILL.md +0 -0
  259. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  260. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  261. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/skills/update-issue/SKILL.md +0 -0
  262. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/smoke.py +0 -0
  263. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/spend_ceiling.py +0 -0
  264. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/split_work.py +0 -0
  265. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/sql.py +0 -0
  266. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/stage_projection.py +0 -0
  267. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/state.py +0 -0
  268. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/store_migrate.py +0 -0
  269. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/test_author.py +0 -0
  270. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/test_chat.py +0 -0
  271. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/test_orchestrator.py +0 -0
  272. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/test_report.py +0 -0
  273. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/tui_release.py +0 -0
  274. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/usage.py +0 -0
  275. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/usage_limits.py +0 -0
  276. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/usage_rollup.py +0 -0
  277. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coord/worker_events.py +0 -0
  278. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/coordinator.example.yml +0 -0
  279. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/deploy/coord-agent.service +0 -0
  280. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/deploy/coord-db-backup.service +0 -0
  281. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/deploy/coord-db-backup.sh +0 -0
  282. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/deploy/coord-db-backup.timer +0 -0
  283. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/deploy/coord-drive-queue.service +0 -0
  284. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/deploy/coord-drive-queue.timer +0 -0
  285. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/deploy/coord-failure-notify.service +0 -0
  286. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/deploy/coord-failure-notify.sh +0 -0
  287. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/deploy/coord-fleet-watchdog.service +0 -0
  288. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/deploy/coord-fleet-watchdog.timer +0 -0
  289. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/deploy/coord-notify.service +0 -0
  290. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/deploy/coord-notify.timer +0 -0
  291. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/deploy/coord-release-propagate.service +0 -0
  292. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/deploy/coord-release-propagate.timer +0 -0
  293. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/deploy/coord-release-window.service +0 -0
  294. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/deploy/coord-release-window.timer +0 -0
  295. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/deploy/coord-serve.service +0 -0
  296. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/deploy/coord-web-dist-build.service +0 -0
  297. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/deploy/coord-web-dist-build.sh +0 -0
  298. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/deploy/coord-web-dist-build.timer +0 -0
  299. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/deploy/coord-web-rollback.sh +0 -0
  300. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/deploy/coord-web.service +0 -0
  301. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/deploy/node-shim.sh +0 -0
  302. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/docs/ADR_COORD_TUI_CI.md +0 -0
  303. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  304. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/docs/ADR_COORD_WEB_CI.md +0 -0
  305. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/docs/ADR_COORD_WEB_DIST.md +0 -0
  306. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
  307. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/docs/AGENT_OPERATIONS.md +0 -0
  308. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/docs/ARCHITECTURE.md +0 -0
  309. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/docs/ARCH_SECURITY_GATES.md +0 -0
  310. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/docs/COCKPIT.md +0 -0
  311. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/docs/CONTROL_CENTER.md +0 -0
  312. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/docs/COST_DISCIPLINE.md +0 -0
  313. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/docs/CROSS_PLATFORM.md +0 -0
  314. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/docs/CUSTOMER_FACING_APPS.md +0 -0
  315. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/docs/CUSTOMER_PORTAL.md +0 -0
  316. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/docs/DRIVE_QUEUE.md +0 -0
  317. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/docs/EPHEMERAL_WORKERS.md +0 -0
  318. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/docs/FORGE_MIGRATION.md +0 -0
  319. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/docs/GRAPHIFY_SETUP.md +0 -0
  320. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/docs/ISSUE_GUIDANCE.md +0 -0
  321. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/docs/MAC_MINI.md +0 -0
  322. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  323. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/docs/NOTIFIER.md +0 -0
  324. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/docs/OPENCODE_VERIFICATION.md +0 -0
  325. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/docs/OPERATING_GOTCHAS.md +0 -0
  326. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/docs/OPERATOR_GUIDES.md +0 -0
  327. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/docs/ORACLE_LOOP.md +0 -0
  328. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/docs/PHONE_WEBAPP.md +0 -0
  329. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/docs/PIPELINE_V2.md +0 -0
  330. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/docs/PLATFORM_EVOLUTION.md +0 -0
  331. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/docs/SECOND_BACKEND.md +0 -0
  332. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/docs/STORE_SERVICE.md +0 -0
  333. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  334. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/docs/WEB_CONTROL_CENTER.md +0 -0
  335. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/docs/WSL_WINDOWS_WORKER.md +0 -0
  336. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/docs/mocks/web/README.md +0 -0
  337. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/docs/mocks/web/_tokens.css +0 -0
  338. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/docs/mocks/web/issue-detail.html +0 -0
  339. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/docs/mocks/web/pipeline-narrow.html +0 -0
  340. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/docs/mocks/web/pipeline-wide.html +0 -0
  341. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/graphify-out/.gitignore +0 -0
  342. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/install-agent.sh +0 -0
  343. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/pyproject.toml +0 -0
  344. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/scripts/audit_review_verdict_overrides.py +0 -0
  345. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  346. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/scripts/azure-workers/build-worker-image.sh +0 -0
  347. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/scripts/azure-workers/coordinator-machine.py +0 -0
  348. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/scripts/azure-workers/epic-down.sh +0 -0
  349. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/scripts/azure-workers/epic-up.sh +0 -0
  350. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/scripts/azure-workers/preflight.sh +0 -0
  351. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/scripts/azure-workers/provision-worker.sh +0 -0
  352. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  353. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  354. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/scripts/azure-workers/verify-github-token.sh +0 -0
  355. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/scripts/check_gh_argv_containment.py +0 -0
  356. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/scripts/codegen.py +0 -0
  357. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/scripts/coord-test-runner.sh +0 -0
  358. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
  359. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
  360. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
  361. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
  362. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/scripts/coord-venv-rollback.sh +0 -0
  363. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/scripts/drive-batch.sh +0 -0
  364. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/scripts/extract-coord-tui.sh +0 -0
  365. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/scripts/fleet_watchdog.py +0 -0
  366. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/scripts/gen_board_fixture.py +0 -0
  367. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/scripts/gen_mock_index.py +0 -0
  368. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/scripts/next_release_tag.py +0 -0
  369. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/scripts/run_tests_in_populated_home.sh +0 -0
  370. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/scripts/run_tests_without_gh.sh +0 -0
  371. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/scripts/smoke_437_interactive.py +0 -0
  372. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/scripts/verify_878_review_capture.py +0 -0
  373. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/scripts/verify_release_published.py +0 -0
  374. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/scripts/verify_release_wheel.py +0 -0
  375. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/setup.cfg +0 -0
  376. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/SMOKE_SET.md +0 -0
  377. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/__init__.py +0 -0
  378. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/acceptance/ms-37/conftest.py +0 -0
  379. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/acceptance/ms-37/contract.md +0 -0
  380. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/acceptance/ms-37/manifest.yml +0 -0
  381. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  382. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  383. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/acceptance/ms-51/contract.md +0 -0
  384. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  385. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  386. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/acceptance/ms-51/manifest.yml +0 -0
  387. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  388. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/acceptance/ms-51/tsconfig.json +0 -0
  389. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  390. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/backends.py +0 -0
  391. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/conftest.py +0 -0
  392. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/fixtures/board-pipeline-basic.json +0 -0
  393. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  394. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  395. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  396. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  397. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/fixtures/playwright/all_pass.json +0 -0
  398. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  399. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/fixtures/playwright/mixed_fail.json +0 -0
  400. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  401. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  402. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/fixtures/playwright/skip.json +0 -0
  403. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/fixtures/playwright/truncated.json +0 -0
  404. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  405. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  406. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  407. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  408. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  409. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  410. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  411. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  412. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_acceptance.py +0 -0
  413. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_acceptance_drivers.py +0 -0
  414. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_agent.py +0 -0
  415. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_agent_api_error.py +0 -0
  416. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_agent_app.py +0 -0
  417. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_agent_branch_base.py +0 -0
  418. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_agent_branch_capture.py +0 -0
  419. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_agent_config_free_1712.py +0 -0
  420. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_agent_deploy_units_endpoint.py +0 -0
  421. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_agent_dirty_worktree.py +0 -0
  422. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  423. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_agent_graph_self_heal.py +0 -0
  424. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_agent_health_h3.py +0 -0
  425. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_agent_idle_restart.py +0 -0
  426. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_agent_push_failure.py +0 -0
  427. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_agent_reap.py +0 -0
  428. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_agent_repos_and_pull.py +0 -0
  429. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_agent_restart_services_endpoint.py +0 -0
  430. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_agent_skills_self_heal.py +0 -0
  431. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_agent_startup_diagnostics.py +0 -0
  432. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_agent_update.py +0 -0
  433. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_agent_update_bluegreen.py +0 -0
  434. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_agent_usage_limit.py +0 -0
  435. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_agent_zero_commit.py +0 -0
  436. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_ambient_home_isolation.py +0 -0
  437. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_approve_dependency_busy_2804.py +0 -0
  438. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_approve_reject_plan.py +0 -0
  439. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_approve_usage_gate.py +0 -0
  440. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_approved_work_2532.py +0 -0
  441. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_approved_work_2996.py +0 -0
  442. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_assignment_already_recorded_daemon.py +0 -0
  443. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_audit_log.py +0 -0
  444. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_audit_outcome.py +0 -0
  445. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_audit_query.py +0 -0
  446. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_auto_loop.py +0 -0
  447. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_auto_release_publish_2035.py +0 -0
  448. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_backend_selection.py +0 -0
  449. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_base_checkout_restore.py +0 -0
  450. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_block_log.py +0 -0
  451. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_board_cap_762.py +0 -0
  452. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_board_fixture.py +0 -0
  453. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_board_read_path.py +0 -0
  454. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_board_schema.py +0 -0
  455. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_board_service.py +0 -0
  456. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_board_state.py +0 -0
  457. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_board_wire.py +0 -0
  458. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_brain.py +0 -0
  459. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_branch_model.py +0 -0
  460. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_bug_intake.py +0 -0
  461. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_build_worker_image_env_update.py +0 -0
  462. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_cargo_cache.py +0 -0
  463. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_check_gh_argv_containment.py +0 -0
  464. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_ci_acceptance_gate_1950.py +0 -0
  465. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_ci_fix.py +0 -0
  466. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_ci_gitlab.py +0 -0
  467. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_ci_parity_2091.py +0 -0
  468. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_ci_store.py +0 -0
  469. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_claim.py +0 -0
  470. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_claude_md_budget.py +0 -0
  471. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_cli_acceptance.py +0 -0
  472. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_cli_assign.py +0 -0
  473. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  474. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_cli_assign_interactive_remote.py +0 -0
  475. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_cli_assign_provider.py +0 -0
  476. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  477. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_cli_audit.py +0 -0
  478. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_cli_chat_continue.py +0 -0
  479. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_cli_decide.py +0 -0
  480. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_cli_diagnose_capability_rules.py +0 -0
  481. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_cli_diagnose_config_provenance.py +0 -0
  482. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_cli_diagnose_forge_availability.py +0 -0
  483. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_cli_diagnose_graph.py +0 -0
  484. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_cli_diagnose_self.py +0 -0
  485. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_cli_diagnose_test_coverage.py +0 -0
  486. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_cli_doctor.py +0 -0
  487. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_cli_doctor_config_free_1801.py +0 -0
  488. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  489. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_cli_drive.py +0 -0
  490. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_cli_drive_queue.py +0 -0
  491. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_cli_escalate.py +0 -0
  492. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_cli_fix_headless_review.py +0 -0
  493. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_cli_gate_a.py +0 -0
  494. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_cli_install_drift.py +0 -0
  495. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_cli_install_skills.py +0 -0
  496. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_cli_issue_comment.py +0 -0
  497. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_cli_issue_create_label.py +0 -0
  498. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_cli_issue_reopen.py +0 -0
  499. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_cli_issue_view_list.py +0 -0
  500. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_cli_merge.py +0 -0
  501. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_cli_milestone_assign.py +0 -0
  502. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_cli_milestone_capture.py +0 -0
  503. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_cli_milestone_chat_add_child.py +0 -0
  504. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_cli_milestone_dispatch.py +0 -0
  505. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_cli_milestone_gate_b.py +0 -0
  506. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_cli_milestone_gate_c.py +0 -0
  507. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_cli_milestone_order.py +0 -0
  508. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  509. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_cli_milestone_ship.py +0 -0
  510. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_cli_network.py +0 -0
  511. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_cli_new_issue_chat.py +0 -0
  512. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_cli_plans.py +0 -0
  513. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_cli_portal.py +0 -0
  514. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_cli_pr.py +0 -0
  515. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_cli_pull_artifact.py +0 -0
  516. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_cli_queue.py +0 -0
  517. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_cli_reattach_sessions.py +0 -0
  518. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_cli_refine_board.py +0 -0
  519. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_cli_release_preflight.py +0 -0
  520. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_cli_release_propagate.py +0 -0
  521. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_cli_release_window.py +0 -0
  522. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_cli_repo_2220.py +0 -0
  523. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
  524. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_cli_scorecard.py +0 -0
  525. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_cli_set_review_findings.py +0 -0
  526. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_cli_status_advisory_terminal.py +0 -0
  527. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_cli_status_contested_tag.py +0 -0
  528. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_cli_status_merge_queue.py +0 -0
  529. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_cli_status_provider.py +0 -0
  530. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_cli_status_review_finalizing.py +0 -0
  531. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_cli_status_test_failed_tag.py +0 -0
  532. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_cli_status_usage_limit.py +0 -0
  533. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_cli_sync_comments_873.py +0 -0
  534. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_cli_test_plan.py +0 -0
  535. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_cli_track.py +0 -0
  536. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_cli_tui_update.py +0 -0
  537. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_cli_wait.py +0 -0
  538. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_client_base_install.py +0 -0
  539. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_client_resource_migration_1946.py +0 -0
  540. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_commands_common.py +0 -0
  541. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_comments.py +0 -0
  542. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_completion_summary.py +0 -0
  543. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_config.py +0 -0
  544. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_config_acceptance.py +0 -0
  545. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_config_audit.py +0 -0
  546. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_config_pricing.py +0 -0
  547. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  548. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_config_usage_gate.py +0 -0
  549. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_confirm_test.py +0 -0
  550. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_conflict_fix.py +0 -0
  551. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_conflict_fix_semantic.py +0 -0
  552. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
  553. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_coord_test.py +0 -0
  554. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
  555. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_coord_test_runner_baseline.py +0 -0
  556. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_coord_test_runner_populated_home.py +0 -0
  557. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_coord_test_runner_routing.py +0 -0
  558. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_coord_test_runner_toolchain.py +0 -0
  559. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_coord_uat.py +0 -0
  560. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_coord_web_sse_restart_live.py +0 -0
  561. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_coordinator_machine.py +0 -0
  562. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_cross_platform_imports.py +0 -0
  563. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_dao.py +0 -0
  564. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_dashboard.py +0 -0
  565. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_dashboard_api.py +0 -0
  566. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_dashboard_fixture.py +0 -0
  567. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_dashboard_terminal.py +0 -0
  568. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_dashboard_terminal_live.py +0 -0
  569. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_db.py +0 -0
  570. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_dead_end.py +0 -0
  571. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_deploy_coord_db_backup.py +0 -0
  572. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_deploy_coord_web_dist.py +0 -0
  573. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_deploy_coord_web_rollback.py +0 -0
  574. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_deploy_drive_queue_unit.py +0 -0
  575. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_deploy_failure_notify_unit.py +0 -0
  576. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_deploy_manifest.py +0 -0
  577. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_deploy_notify_unit.py +0 -0
  578. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_deploy_units_lane.py +0 -0
  579. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_deploy_web_unit.py +0 -0
  580. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_deprecation_telemetry.py +0 -0
  581. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_deps.py +0 -0
  582. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_diagnose.py +0 -0
  583. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_dispatch.py +0 -0
  584. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_dispatch_target_validation.py +0 -0
  585. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_dist_name.py +0 -0
  586. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_done_housekeeping.py +0 -0
  587. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_drive.py +0 -0
  588. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_drive_queue.py +0 -0
  589. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_drive_queue_blocked_rendering.py +0 -0
  590. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_drive_queue_launch_argv.py +0 -0
  591. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
  592. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_drive_queue_roll_pending.py +0 -0
  593. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
  594. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_drive_state.py +0 -0
  595. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_drive_tmux.py +0 -0
  596. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_epic_up_capability_detection.py +0 -0
  597. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  598. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_epic_up_image_provenance.py +0 -0
  599. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_errors.py +0 -0
  600. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_events.py +0 -0
  601. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_failure_class.py +0 -0
  602. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_filelock.py +0 -0
  603. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  604. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_fix_of_force_override.py +0 -0
  605. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_fleet_config_health.py +0 -0
  606. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_fleet_health_probes.py +0 -0
  607. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_fleet_health_snapshot.py +0 -0
  608. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_fleet_watchdog.py +0 -0
  609. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_forge_availability.py +0 -0
  610. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_freshness.py +0 -0
  611. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_gate_a.py +0 -0
  612. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_gate_b.py +0 -0
  613. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_gate_snapshot_staleness.py +0 -0
  614. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_gates.py +0 -0
  615. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  616. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_gen_mock_index.py +0 -0
  617. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_generated_rust_fixture.py +0 -0
  618. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_generated_rust_requests.py +0 -0
  619. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_generated_types_fixture.py +0 -0
  620. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_github_ops.py +0 -0
  621. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_github_throttle.py +0 -0
  622. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_goal.py +0 -0
  623. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_graph_health.py +0 -0
  624. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_graph_selfheal_absent_2237.py +0 -0
  625. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_handoff.py +0 -0
  626. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_health_checks.py +0 -0
  627. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_health_cli.py +0 -0
  628. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_health_cli_graph.py +0 -0
  629. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_health_config.py +0 -0
  630. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_health_context.py +0 -0
  631. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_health_coord_tui_ci_pin.py +0 -0
  632. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_health_coord_web_ci_pin.py +0 -0
  633. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_health_deploy_lane_facts.py +0 -0
  634. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_health_fix.py +0 -0
  635. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_health_incident_regression.py +0 -0
  636. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_health_issues_sync_staleness.py +0 -0
  637. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_health_pypi.py +0 -0
  638. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_health_registry.py +0 -0
  639. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_health_release_cordon_probe.py +0 -0
  640. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_health_timer_active.py +0 -0
  641. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_health_toolchain.py +0 -0
  642. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_health_unit_drift.py +0 -0
  643. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_health_unit_enablement.py +0 -0
  644. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_health_wedged_drive_queue.py +0 -0
  645. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_hooks.py +0 -0
  646. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_human_attended_437.py +0 -0
  647. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_init.py +0 -0
  648. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_install_agent_venv_2911.py +0 -0
  649. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_integration.py +0 -0
  650. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_interactive_briefing_echo.py +0 -0
  651. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_interactive_pane_log_2541.py +0 -0
  652. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_interactive_prefill_state.py +0 -0
  653. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_interactive_session_relaunch.py +0 -0
  654. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_interactive_test_verdict_backstop.py +0 -0
  655. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_interactive_token_attribution.py +0 -0
  656. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_interactive_worktree.py +0 -0
  657. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_issue_store_seam.py +0 -0
  658. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_issues_sync_status.py +0 -0
  659. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_liveness_auditor.py +0 -0
  660. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_liveness_notify.py +0 -0
  661. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_lock_contention_ratchet.py +0 -0
  662. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_machine_onboard.py +0 -0
  663. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_machine_pause.py +0 -0
  664. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_merge_queue.py +0 -0
  665. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_merge_verify.py +0 -0
  666. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_milestone_chat.py +0 -0
  667. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_milestone_dispatch.py +0 -0
  668. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_milestone_gate.py +0 -0
  669. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_milestone_order.py +0 -0
  670. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_milestone_seam.py +0 -0
  671. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_mock_author.py +0 -0
  672. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_model_tiering.py +0 -0
  673. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_models.py +0 -0
  674. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_models_config_labels.py +0 -0
  675. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_needs_attention.py +0 -0
  676. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_network.py +0 -0
  677. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_new_issue_chat.py +0 -0
  678. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_next_release_tag.py +0 -0
  679. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_node_shim.py +0 -0
  680. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_notifier_baseline.py +0 -0
  681. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_notifier_cli.py +0 -0
  682. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_notifier_collect.py +0 -0
  683. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_notifier_config.py +0 -0
  684. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_notifier_drive_seam.py +0 -0
  685. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_notifier_isolation.py +0 -0
  686. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_notifier_predicate.py +0 -0
  687. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_notifier_quiet_hours.py +0 -0
  688. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_notifier_service.py +0 -0
  689. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_notify.py +0 -0
  690. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_notify_drain.py +0 -0
  691. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_openapi.py +0 -0
  692. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_operational_defaults.py +0 -0
  693. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_overlap_fence.py +0 -0
  694. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_overlap_predict.py +0 -0
  695. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_packaged_deploy_units.py +0 -0
  696. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_parentage.py +0 -0
  697. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_paste_landed.py +0 -0
  698. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
  699. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_pipeline.py +0 -0
  700. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_plan_followup_approve_plan_command.py +0 -0
  701. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_plan_followup_pr_command.py +0 -0
  702. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_plan_followup_review_command.py +0 -0
  703. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_plan_only.py +0 -0
  704. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_plan_parser.py +0 -0
  705. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_platform_paths.py +0 -0
  706. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_portal_bridge.py +0 -0
  707. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_portal_config.py +0 -0
  708. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_portal_store.py +0 -0
  709. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_portal_sync.py +0 -0
  710. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_pr_body_lint.py +0 -0
  711. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_prereqs.py +0 -0
  712. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_production_db_guard.py +0 -0
  713. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_progress.py +0 -0
  714. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_provider_seam.py +0 -0
  715. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_providers.py +0 -0
  716. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_providers_config_labels.py +0 -0
  717. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_providers_pty.py +0 -0
  718. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_py_rust_mirror_inventory.py +0 -0
  719. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_quiet_hours.py +0 -0
  720. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_quiet_hours_store_2146.py +0 -0
  721. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_reap_merged_sessions.py +0 -0
  722. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_reap_stale_interactive_tick.py +0 -0
  723. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_reconcile.py +0 -0
  724. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_reconcile_branch.py +0 -0
  725. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_reconcile_completions.py +0 -0
  726. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
  727. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_reconcile_merges.py +0 -0
  728. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_reconcile_no_agent_record.py +0 -0
  729. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_reconcile_tick.py +0 -0
  730. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_reconcile_usage_limit_done.py +0 -0
  731. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_refine_chat.py +0 -0
  732. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_release_cordon_2101.py +0 -0
  733. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  734. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_release_cordon_deadlock_2240.py +0 -0
  735. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_release_cordon_stuck_2490.py +0 -0
  736. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_release_propagate.py +0 -0
  737. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_release_propagate_threshold.py +0 -0
  738. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_release_roll_between_legs_2854.py +0 -0
  739. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_release_roll_window_handoff.py +0 -0
  740. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_release_unified_1242.py +0 -0
  741. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_release_verify.py +0 -0
  742. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_release_window.py +0 -0
  743. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_remote_auto_prune.py +0 -0
  744. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_remote_interactive_reaper.py +0 -0
  745. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_repo_add.py +0 -0
  746. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_repo_dormancy.py +0 -0
  747. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_repo_edit_2220.py +0 -0
  748. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_repo_graph_fleet_2237.py +0 -0
  749. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_repo_onboard_2220.py +0 -0
  750. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_report_result_push.py +0 -0
  751. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_reports.py +0 -0
  752. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_retry.py +0 -0
  753. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_retry_advisory_1606.py +0 -0
  754. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_retry_type_1636.py +0 -0
  755. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_revalidate.py +0 -0
  756. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_review.py +0 -0
  757. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_review_end_review_without_verdict.py +0 -0
  758. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_review_parse_failure_diagnostic.py +0 -0
  759. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_review_reaffirm.py +0 -0
  760. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_review_state.py +0 -0
  761. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_review_verdict_backstop.py +0 -0
  762. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_review_verdict_override_audit.py +0 -0
  763. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_review_verdict_relay.py +0 -0
  764. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_review_zero_commits.py +0 -0
  765. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_scoped_review_wiring.py +0 -0
  766. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_scorecard.py +0 -0
  767. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_self_health.py +0 -0
  768. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_serve.py +0 -0
  769. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_serve_app_board_trim.py +0 -0
  770. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_serve_rest_routes.py +0 -0
  771. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_session.py +0 -0
  772. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_slice_issue_attribution.py +0 -0
  773. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_smoke.py +0 -0
  774. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_smoke_live_checkout_restore.py +0 -0
  775. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_smoke_workflow.py +0 -0
  776. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_spend_ceiling.py +0 -0
  777. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_spend_ceiling_coordinator.py +0 -0
  778. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_split.py +0 -0
  779. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_split_work.py +0 -0
  780. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_sql_dialect.py +0 -0
  781. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_sqlite_connect_ratchet.py +0 -0
  782. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_stage_projection.py +0 -0
  783. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_stale_busy_reviewer_697.py +0 -0
  784. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_stalled_pipeline.py +0 -0
  785. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_state.py +0 -0
  786. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_state_review_findings_daemon.py +0 -0
  787. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_status_fleet_footer.py +0 -0
  788. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_stop_1567.py +0 -0
  789. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_store_contract.py +0 -0
  790. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_store_migrate.py +0 -0
  791. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_stuck.py +0 -0
  792. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
  793. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_terminal_command.py +0 -0
  794. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_test_author.py +0 -0
  795. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_test_chat.py +0 -0
  796. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_test_orchestrator.py +0 -0
  797. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_test_report.py +0 -0
  798. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_test_verdict_parsing.py +0 -0
  799. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_test_verdict_transcript_floor.py +0 -0
  800. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_text_io_encoding_audit.py +0 -0
  801. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_thin_client_board_audit.py +0 -0
  802. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_thin_client_config_load_1080.py +0 -0
  803. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_thin_client_daemon_routing_906.py +0 -0
  804. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_tmux_host.py +0 -0
  805. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_tmux_session.py +0 -0
  806. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_transcript_floor.py +0 -0
  807. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_usage.py +0 -0
  808. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_usage_limits.py +0 -0
  809. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_usage_rollup.py +0 -0
  810. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_venv_live_install_2121.py +0 -0
  811. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_version_single_source.py +0 -0
  812. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_watch.py +0 -0
  813. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  814. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_worker_env_venv_isolation.py +0 -0
  815. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_worker_events.py +0 -0
  816. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_worker_image_pin_sync.py +0 -0
  817. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_worker_safety.py +0 -0
  818. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_worker_test_scoping.py +0 -0
  819. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_worktree.py +0 -0
  820. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  821. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/test_write_parity.py +0 -0
  822. {code_coordinator-0.5.327 → code_coordinator-0.5.329}/tests/write_parity.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-coordinator
3
- Version: 0.5.327
3
+ Version: 0.5.329
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.327
3
+ Version: 0.5.329
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.327",
2
+ "tag": "0.5.329",
3
3
  "distance": 0,
4
- "node": "g33af929d66cfc03789a677518e08ff5c0b6d4000",
4
+ "node": "g620161040c983239a8258b25aa0e4e1fc5cf3c8a",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-31"
@@ -4027,14 +4027,36 @@ response (a session that silently chose to file instead of asking is \
4027
4027
  exactly the failure this design exists to prevent); the submission's \
4028
4028
  OUTCOME, AUDIENCE, DONE DEFINITION, and CONSTRAINTS; its mapped repo(s); \
4029
4029
  `coordinator.yml` topology context for those repo(s) (depends_on, which \
4030
- machines claim each repo); and a RUNNING CONTEXT section rendering the \
4031
- submission's full ledger so far — every question asked and (if answered) \
4032
- its answer, every decision on record (current and archived, archived ones \
4033
- carrying WHY they were ruled out), and the current narrative. Read \
4034
- RUNNING CONTEXT before doing anything else: never re-ask a question already \
4035
- answered there, and never re-propose a decision already archived there \
4036
- without new information that changes the calculus — cite the existing \
4037
- entry's seq/reason if the operator or a re-briefed fact brings it up again.
4030
+ machines claim each repo); a HOUSE STACK section (#2997) naming what the \
4031
+ REST of this org's registered repos already run and deploy on, which \
4032
+ managed services are already in use and already paid for, and any coord \
4033
+ gate that assumes a particular host; and a RUNNING CONTEXT section \
4034
+ rendering the submission's full ledger so far — every question asked and \
4035
+ (if answered) its answer, every decision on record (current and archived, \
4036
+ archived ones carrying WHY they were ruled out), and the current \
4037
+ narrative. Read RUNNING CONTEXT before doing anything else: never re-ask a \
4038
+ question already answered there, and never re-propose a decision already \
4039
+ archived there without new information that changes the calculus — cite \
4040
+ the existing entry's seq/reason if the operator or a re-briefed fact \
4041
+ brings it up again.
4042
+
4043
+ **HOUSE STACK is context, not a mandate** — you may still propose \
4044
+ something outside it when it genuinely fits better (a greenfield repo is \
4045
+ not required to inherit the fleet's stack). But you may never propose a \
4046
+ stack/architecture/hosting/vendor decision in SILENCE about it: if HOUSE \
4047
+ STACK names a service that's a plausible fit and you're proposing \
4048
+ something else, you MUST record the house-stack option itself as a \
4049
+ considered-and-rejected alternative (`coord portal decision propose` \
4050
+ naming it, then `coord portal decision reject ... "<why it loses>"`) in \
4051
+ the SAME iteration you propose your own recommendation — the same \
4052
+ "record every alternative you seriously considered and ruled OUT" rule the \
4053
+ PROPOSE terminal move already requires below applies to the house stack \
4054
+ first, not last. The failure this closes (#2997, SUB-1EA1D3) was a session \
4055
+ proposing a brand-new vendor for a greenfield repo with FOUR rejected \
4056
+ alternatives on record and Cloudflare — the stack the rest of the org \
4057
+ already runs and pays for — never mentioned in any of them. Silence, not \
4058
+ disagreement, was the bug; a reasoned rejection is a completely fine \
4059
+ outcome.
4038
4060
 
4039
4061
  You can always re-fetch the live ledger mid-session with:
4040
4062
 
@@ -4260,7 +4282,41 @@ exists. Any time the operator gives you a substantive fact about the \
4260
4282
  client, the users, or the scope, say back what you would record and ask \
4261
4283
  whether to record it. Keep the wording theirs, not your paraphrase — the \
4262
4284
  ledger is verbatim by design, and the narrative (which is regenerable) is \
4263
- where summarizing belongs.\
4285
+ where summarizing belongs.
4286
+
4287
+ **Confirming a decision on the operator's instruction (#2998).** The base \
4288
+ prompt above says never to run `coord portal decision confirm` — that rule \
4289
+ was written for a session with nobody to ask. You have someone to ask: the \
4290
+ operator sitting at this terminal, who is exactly who that command is \
4291
+ reserved for. What never changes, headless or attended, is that YOU may \
4292
+ never confirm your own proposal on your own initiative — inferring consent, \
4293
+ or treating agreement about something else as consent to confirm, is \
4294
+ exactly the self-approval the base rule exists to prevent.
4295
+
4296
+ But when the operator gives you an EXPLICIT, PRESENT-TURN instruction to \
4297
+ confirm a specific decision ("confirm decision 8", "yes, confirm that"), you \
4298
+ MAY act on it, in this order:
4299
+
4300
+ 1. Quote the operator's instruction back, verbatim, so the transcript makes \
4301
+ unambiguous that this was ordered, not inferred.
4302
+ 2. Record the attribution on the ledger BEFORE confirming, so a later \
4303
+ session (or a human reading the ledger) can see this was operator-\
4304
+ instructed rather than session-initiated:
4305
+
4306
+ coord portal note <submission_id> "Operator instructed: confirm decision #<seq> (\"<their exact words>\")"
4307
+
4308
+ 3. Only then run:
4309
+
4310
+ coord portal decision confirm <submission_id> <seq>
4311
+
4312
+ Do not collapse this into one step, and do not run it on a vague or implied \
4313
+ go-ahead — if you are not sure which decision the operator means, ask for \
4314
+ the seq before running anything. This carve-out covers `decision confirm` \
4315
+ ONLY. Every other entry on the deny list stays forbidden in this session \
4316
+ exactly as it is headlessly (raw `gh` mutations, `git push`, `git commit`, \
4317
+ destructive git, `coord approve`, `coord merge`, `coord assign`) — an \
4318
+ operator being present changes who may authorize a RESERVED command, it \
4319
+ does not change whether a DANGEROUS one is safe.\
4264
4320
  """
4265
4321
 
4266
4322
  # Deny list applied to decomposition-chat workers (#2533; extended #2750
@@ -4274,6 +4330,13 @@ where summarizing belongs.\
4274
4330
  # confirm` (the OPERATOR's move, never this session's own — #2750's "Propose"
4275
4331
  # terminal move must not self-confirm), while every write path this session
4276
4332
  # actually needs is allowed by omission.
4333
+ #
4334
+ # This is the HEADLESS list — used verbatim by `default_worker_command`'s
4335
+ # `spec.type == "decomposition-chat"` branch below, where the session
4336
+ # genuinely has nobody to ask, so `decision confirm` stays hard-denied. The
4337
+ # `--interactive` posture has an operator in the room; see
4338
+ # DECOMPOSITION_CHAT_ATTENDED_DENY_COMMANDS below (#2998) for its own,
4339
+ # narrower carve-out of exactly this one entry.
4277
4340
  DECOMPOSITION_CHAT_DENY_COMMANDS: list[str] = [
4278
4341
  "Bash(gh issue edit *)",
4279
4342
  "Bash(gh issue create *)",
@@ -4302,6 +4365,23 @@ DECOMPOSITION_CHAT_DENY_COMMANDS: list[str] = [
4302
4365
  "Bash(coord portal decision confirm *)",
4303
4366
  ]
4304
4367
 
4368
+ # #2998: the ATTENDED counterpart to the list above — every entry the same
4369
+ # EXCEPT `coord portal decision confirm`. An attended session has an
4370
+ # operator sitting at the terminal, and `decision confirm` is RESERVED for
4371
+ # the operator (not DANGEROUS the way `git push`/`coord merge`/destructive
4372
+ # git are) — the question in that posture is who authorised it, not whether
4373
+ # it's safe. DECOMPOSITION_CHAT_ATTENDED_ADDENDUM spells out the condition
4374
+ # under which the session may actually run it (an explicit, present-turn
4375
+ # operator instruction, quoted back and attributed on the ledger via `coord
4376
+ # portal note` before confirming) — this list only stops blanket-denying it
4377
+ # so that addendum isn't fighting a FORBIDDEN COMMANDS entry telling the
4378
+ # session the opposite. Every genuinely dangerous entry stays denied,
4379
+ # unchanged, in both postures.
4380
+ DECOMPOSITION_CHAT_ATTENDED_DENY_COMMANDS: list[str] = [
4381
+ cmd for cmd in DECOMPOSITION_CHAT_DENY_COMMANDS
4382
+ if cmd != "Bash(coord portal decision confirm *)"
4383
+ ]
4384
+
4305
4385
  MOCK_AUTHOR_SYSTEM_PROMPT = """\
4306
4386
  You are an independent mock-author agent for Gate A of a milestone \
4307
4387
  (#930, docs/ORACLE_LOOP.md) — the pre-work architecture gate. You have \
@@ -723,7 +723,7 @@ def _run_decompose_chat_interactive(
723
723
  from coord.agent import ( # noqa: PLC0415
724
724
  AssignmentSpec as _AssignmentSpecDc,
725
725
  DECOMPOSITION_CHAT_ATTENDED_ADDENDUM,
726
- DECOMPOSITION_CHAT_DENY_COMMANDS,
726
+ DECOMPOSITION_CHAT_ATTENDED_DENY_COMMANDS,
727
727
  DECOMPOSITION_CHAT_SYSTEM_PROMPT,
728
728
  build_deny_prompt,
729
729
  )
@@ -731,6 +731,7 @@ def _run_decompose_chat_interactive(
731
731
  build_decomposition_chat_briefing,
732
732
  describe_unapproved_submission,
733
733
  fetch_running_context,
734
+ house_stack_context,
734
735
  render_running_context_section,
735
736
  repo_topology_context,
736
737
  resolve_approved_submission,
@@ -794,6 +795,7 @@ def _run_decompose_chat_interactive(
794
795
  # that the Ask move would "refuse loudly" — no longer true.
795
796
 
796
797
  topology_context = repo_topology_context(cfg, repos)
798
+ house_stack = house_stack_context(cfg, exclude_repos=repos)
797
799
  discuss_mode, discuss_reason = select_discuss_mode(cfg, submission, discuss_override=discuss)
798
800
  running_context = render_running_context_section(fetch_running_context(submission_id))
799
801
  briefing = build_decomposition_chat_briefing(
@@ -802,6 +804,7 @@ def _run_decompose_chat_interactive(
802
804
  discuss=discuss_mode,
803
805
  discuss_reason=discuss_reason,
804
806
  running_context_section=running_context,
807
+ house_stack_context_section=house_stack,
805
808
  )
806
809
 
807
810
  repo_path = str(_Path(machine.repo_path(repos[0]) or str(_Path.cwd())).expanduser())
@@ -819,9 +822,9 @@ def _run_decompose_chat_interactive(
819
822
  seed_prompt = (
820
823
  f"Intake session for portal submission {submission_id} "
821
824
  f"(MODE: {mode_word} — {discuss_reason}): read the full context at "
822
- f"{brief_path} (submission fields, repo topology, and the running-"
823
- "context ledger so far) and let's work through it. This is an "
824
- "ATTENDED session: state your read and your PROPOSED exit, then stop "
825
+ f"{brief_path} (submission fields, repo topology, the house stack, "
826
+ "and the running-context ledger so far) and let's work through it. "
827
+ "This is an ATTENDED session: state your read and your PROPOSED exit, then stop "
825
828
  "and wait for me — write nothing until I answer (#2867)."
826
829
  )
827
830
 
@@ -851,13 +854,21 @@ def _run_decompose_chat_interactive(
851
854
  # This session, by contrast, has a human in the pane: the addendum makes
852
855
  # its first turn confirm-then-write (#2742's absorbed half, which #2750
853
856
  # only ever wired into mode SELECTION, never into the posture itself).
857
+ #
858
+ # #2998: the deny list here is the ATTENDED one — identical to the
859
+ # headless DECOMPOSITION_CHAT_DENY_COMMANDS except it does not blanket-
860
+ # forbid `coord portal decision confirm`, because DECOMPOSITION_CHAT_
861
+ # ATTENDED_ADDENDUM spells out the (narrow, operator-instruction-gated)
862
+ # condition under which this session may run it. The headless path above
863
+ # keeps using the unmodified list, so a headless session still cannot
864
+ # confirm, self-confirm, or be talked into confirming.
854
865
  argv = provider.build_command(
855
866
  spec,
856
867
  resolved_model=resolved_model,
857
868
  system_prompt=(
858
869
  DECOMPOSITION_CHAT_SYSTEM_PROMPT
859
870
  + DECOMPOSITION_CHAT_ATTENDED_ADDENDUM
860
- + build_deny_prompt(DECOMPOSITION_CHAT_DENY_COMMANDS)
871
+ + build_deny_prompt(DECOMPOSITION_CHAT_ATTENDED_DENY_COMMANDS)
861
872
  ),
862
873
  allowed_tools="Read,Bash",
863
874
  )
@@ -409,6 +409,209 @@ def pick_decomposition_chat_machine(cfg: "Config", repos: list[str]) -> "Machine
409
409
  return None
410
410
 
411
411
 
412
+ # ── #2997: HOUSE STACK — the fleet's existing stack, not just this
413
+ # submission's mapped repo(s). See the module briefing (SUB-1EA1D3, the
414
+ # grocery-list submission) for why this section exists: a MODE: DISCUSS
415
+ # iteration proposed Vite+React+Supabase for a greenfield repo without ever
416
+ # weighing Cloudflare — the stack every other repo in this org already runs
417
+ # and pays for — because nothing in the briefing carried it. This section is
418
+ # CONTEXT, not a mandate (the design sketch's own framing): a session may
419
+ # still propose something else, but the system prompt (coord/agent.py) is
420
+ # what requires it to then record the house alternative as a
421
+ # considered-and-rejected decision rather than staying silent about it.
422
+
423
+ #: Root-level marker file -> the stack signal its mere presence implies.
424
+ #: Deliberately mechanical and small, same posture as `_SEEDED_ROOT_FILES`
425
+ #: above: cheap to check, cheap to extend, wrong at worst by omission (a
426
+ #: repo using something unlisted here just contributes nothing) never by a
427
+ #: false positive.
428
+ _ROOT_STACK_MARKERS: dict[str, str] = {
429
+ "wrangler.toml": "Cloudflare Workers/Pages (wrangler.toml)",
430
+ "Cargo.toml": "Rust (Cargo.toml)",
431
+ "package.json": "Node/TypeScript (package.json)",
432
+ "pyproject.toml": "Python (pyproject.toml)",
433
+ }
434
+
435
+ #: Same idea, scoped to `.github/workflows/` — a deploy LANE is a workflow
436
+ #: file, not a root marker.
437
+ _WORKFLOW_STACK_MARKERS: dict[str, str] = {
438
+ "deploy-cloudflare.yml": "Cloudflare Pages deploy (.github/workflows/deploy-cloudflare.yml)",
439
+ }
440
+
441
+ #: `wrangler.toml` binding keys -> the managed Cloudflare service they name
442
+ #: (Cloudflare's own `wrangler.toml` schema) — read only when the file is
443
+ #: actually present, so this never guesses at a service that isn't wired up.
444
+ _WRANGLER_BINDING_MARKERS: dict[str, str] = {
445
+ "d1_databases": "Cloudflare D1 (bound in wrangler.toml)",
446
+ "r2_buckets": "Cloudflare R2 (bound in wrangler.toml)",
447
+ "kv_namespaces": "Cloudflare KV (bound in wrangler.toml)",
448
+ }
449
+
450
+ #: Keywords worth a mention when they show up in a repo's own `CLAUDE.md` —
451
+ #: the design sketch's "cheapest read from each repo's own CLAUDE.md" half,
452
+ #: for a lane that leaves no marker file at all (e.g. Cloudflare Access,
453
+ #: which is edge config, never a repo artifact — coord-portal's own
454
+ #: `docs/CUSTOMER_PORTAL.md` names it in prose, not in a file this module
455
+ #: could otherwise detect). Casefolded substring match: a false positive
456
+ #: here only adds one extra weighed line, never a wrong guess about what
457
+ #: exists, since the word is genuinely present in the repo's own docs.
458
+ _CLAUDE_MD_KEYWORD_MARKERS: dict[str, str] = {
459
+ "cloudflare access": "Cloudflare Access (mentioned in CLAUDE.md)",
460
+ "cloudflare pages": "Cloudflare Pages (mentioned in CLAUDE.md)",
461
+ "cloudflare d1": "Cloudflare D1 (mentioned in CLAUDE.md)",
462
+ "cloudflare r2": "Cloudflare R2 (mentioned in CLAUDE.md)",
463
+ }
464
+
465
+
466
+ def _repo_stack_signals(repo_github: str, branch: str) -> list[str]:
467
+ """Mechanical, best-effort stack signals for *repo_github* on *branch* —
468
+ root-level marker files, known deploy-workflow files under
469
+ `.github/workflows/`, and (when `wrangler.toml` is present) the managed
470
+ Cloudflare services it binds.
471
+
472
+ **Degrades gracefully** (#2997 acceptance criterion): any lookup
473
+ failure, or a repo with nothing recognisable, returns `[]` rather than a
474
+ guess — this feeds an informational briefing section, not a gate, so
475
+ silence is always the safe failure mode.
476
+
477
+ "Any lookup failure" is meant literally, hence the deliberately broad
478
+ ``except Exception`` guards below rather than the narrow
479
+ ``RuntimeError``/``ValueError`` pair an earlier revision used. The
480
+ Contents-API seam this walks is not exception-typed end to end:
481
+ ``github_ops.list_repo_dir`` indexes ``entry["name"]`` on whatever JSON
482
+ came back (``KeyError``/``TypeError`` on a malformed or
483
+ unexpectedly-shaped payload), and ``_gh`` itself is a subprocess
484
+ boundary that a caller lower in the stack can surface as ``OSError``.
485
+ None of those are worth turning an *informational* paragraph into a
486
+ hard failure of ``coord portal decompose-chat`` for — a crash here
487
+ costs the operator the whole intake session, while a swallowed lookup
488
+ costs one unweighed line.
489
+ """
490
+ from coord import github_ops # noqa: PLC0415
491
+
492
+ try:
493
+ root_files, root_dirs = _dir_entries(repo_github, "", branch)
494
+ except Exception: # noqa: BLE001 - informational section, never a gate
495
+ return []
496
+
497
+ signals = [label for marker, label in _ROOT_STACK_MARKERS.items() if marker in root_files]
498
+
499
+ def _file_text(path: str) -> str:
500
+ """*path*'s contents on *branch*, or ``""`` on any lookup failure."""
501
+ try:
502
+ text = github_ops.get_repo_file(repo_github, path, branch)
503
+ # `isinstance` rather than a bare return: a Contents-API payload
504
+ # that decodes to something other than text must not turn a
505
+ # substring probe below into a `TypeError`.
506
+ return text if isinstance(text, str) else ""
507
+ except Exception: # noqa: BLE001 - see the docstring
508
+ # Covers `binascii.Error` (a ValueError subclass) from
509
+ # `get_repo_file_with_sha`'s `base64.b64decode` on a malformed
510
+ # Contents-API response, `GhError` from the subprocess boundary,
511
+ # and anything else the seam can surface: this feeds an
512
+ # informational section, not a gate, so a failed read degrades
513
+ # to "no signal" rather than blowing up the briefing build.
514
+ return ""
515
+
516
+ def _entries(path: str) -> tuple[list[str], list[str]]:
517
+ """``(files, dirs)`` under *path*, or ``([], [])`` on any failure."""
518
+ try:
519
+ return _dir_entries(repo_github, path, branch)
520
+ except Exception: # noqa: BLE001 - see the docstring
521
+ return [], []
522
+
523
+ if "wrangler.toml" in root_files:
524
+ wrangler_text = _file_text("wrangler.toml")
525
+ signals += [
526
+ label for key, label in _WRANGLER_BINDING_MARKERS.items() if key in wrangler_text
527
+ ]
528
+
529
+ if "CLAUDE.md" in root_files:
530
+ claude_md_text = _file_text("CLAUDE.md").casefold()
531
+ signals += [
532
+ label for key, label in _CLAUDE_MD_KEYWORD_MARKERS.items() if key in claude_md_text
533
+ ]
534
+
535
+ if ".github" in root_dirs:
536
+ _, gh_dirs = _entries(".github")
537
+ if "workflows" in gh_dirs:
538
+ wf_files, _ = _entries(".github/workflows")
539
+ signals += [
540
+ label for marker, label in _WORKFLOW_STACK_MARKERS.items() if marker in wf_files
541
+ ]
542
+
543
+ return signals
544
+
545
+
546
+ def house_stack_context(cfg: "Config", exclude_repos: list[str] | None = None) -> str:
547
+ """Render the HOUSE STACK briefing section: what the *rest* of the
548
+ fleet's repos already run and deploy on, derived mechanically from each
549
+ registered repo's tracked files rather than hand-maintained (the design
550
+ sketch's own preference — a hand-maintained approved-stack list rots and
551
+ suppresses the reasoning the decision archive exists to capture).
552
+
553
+ *exclude_repos* is normally the submission's own mapped repo(s) — the
554
+ one(s) actually being decomposed, which say nothing about "the REST of
555
+ the fleet" even when they aren't greenfield.
556
+
557
+ A repo that contributes no recognisable signal (no CLAUDE.md, no known
558
+ marker file, no known workflow file) is omitted from the per-repo list
559
+ entirely — #2997's "degrades gracefully" criterion: nothing beats a
560
+ wrong guess. When *no* repo in the fleet contributes anything, the whole
561
+ section reads as empty rather than asserting a managed-services list or
562
+ a host-coupled gate that nothing here actually evidences.
563
+
564
+ One sick repo never costs the operator the whole intake session: each
565
+ repo's probe is isolated, so a lookup that blows up for `acme/api`
566
+ still leaves `acme/coord-portal`'s Cloudflare signal in the rendered
567
+ section. This section is built on the critical path of *every*
568
+ `coord portal decompose-chat` (headless and `--interactive` alike) —
569
+ an informational paragraph must never be able to abort a dispatch.
570
+ """
571
+ exclude = set(exclude_repos or [])
572
+ per_repo: list[str] = []
573
+ saw_cloudflare = False
574
+ for repo_cfg in cfg.repos:
575
+ if repo_cfg.name in exclude:
576
+ continue
577
+ branch = repo_cfg.default_branch or "main"
578
+ try:
579
+ signals = _repo_stack_signals(repo_cfg.github, branch)
580
+ except Exception: # noqa: BLE001 - one repo must not sink the section
581
+ continue
582
+ if not signals:
583
+ continue
584
+ per_repo.append(f"- {repo_cfg.name} ({repo_cfg.github}): {'; '.join(signals)}")
585
+ if any("Cloudflare" in s for s in signals):
586
+ saw_cloudflare = True
587
+
588
+ if not per_repo:
589
+ return (
590
+ "HOUSE STACK (fleet-wide, #2997): no recognisable stack/deploy signal on any "
591
+ "other registered repo — nothing to weigh here."
592
+ )
593
+
594
+ lines = [
595
+ "HOUSE STACK (fleet-wide, not just this submission's mapped repo(s) — #2997):",
596
+ *per_repo,
597
+ "",
598
+ "This is CONTEXT, not a mandate: propose something else if it genuinely fits "
599
+ "better, but if you do, record the house-stack alternative as a "
600
+ "considered-and-rejected decision with a reason (`coord portal decision propose` "
601
+ "then `coord portal decision reject ... \"<why the house stack loses>\"`) instead "
602
+ "of leaving it unweighed.",
603
+ ]
604
+ if saw_cloudflare:
605
+ lines.append("")
606
+ lines.append(
607
+ "Gate that assumes a host: `coord portal enqueue-preview` reads a Cloudflare "
608
+ "Pages PREVIEW deployment URL created per-PR by `cloudflare/pages-action` "
609
+ "(docs/CUSTOMER_PORTAL.md) — choosing a different host means the #2359 "
610
+ "customer preview-approval gate does not apply without new coord work."
611
+ )
612
+ return "\n".join(lines)
613
+
614
+
412
615
  def repo_topology_context(cfg: "Config", repos: list[str]) -> str:
413
616
  """One paragraph of `coordinator.yml` topology per mapped repo — the
414
617
  "coordinator.yml topology context ... the same way docs/CUSTOMER_PORTAL.md's
@@ -442,6 +645,7 @@ def build_decomposition_chat_briefing(
442
645
  discuss: bool,
443
646
  discuss_reason: str,
444
647
  running_context_section: str = "",
648
+ house_stack_context_section: str = "",
445
649
  ) -> str:
446
650
  """Compose the seed briefing the worker sees as its first user message.
447
651
 
@@ -454,6 +658,15 @@ def build_decomposition_chat_briefing(
454
658
  pane already shows the operator (ms-67 contract §4b: "nothing hidden
455
659
  between 'looks right in the panel' and 'is what the session got'"),
456
660
  plus everything #2749's ledger has accumulated across prior iterations.
661
+
662
+ **#2997:** also carries a HOUSE STACK section (*house_stack_context_section*,
663
+ normally :func:`house_stack_context`'s output) — the fleet's existing
664
+ stack and infrastructure conventions, which used to be entirely absent
665
+ from this briefing. That gap is what let a MODE: DISCUSS iteration on a
666
+ greenfield repo propose a brand-new vendor (Supabase) without ever
667
+ weighing the Cloudflare stack the rest of this org already runs and
668
+ pays for (SUB-1EA1D3, this issue's own measured regression case). Empty
669
+ by default so every existing caller/test keeps working unchanged.
457
670
  """
458
671
  submission_id = submission.get("submission_id", "")
459
672
  repos = submission.get("repos") or []
@@ -484,6 +697,11 @@ def build_decomposition_chat_briefing(
484
697
  parts.append("COORDINATOR.YML TOPOLOGY CONTEXT:")
485
698
  parts.append(topology_context)
486
699
  parts.append("")
700
+ parts.append(
701
+ house_stack_context_section.strip()
702
+ or "HOUSE STACK (fleet-wide, #2997): (not computed for this briefing)"
703
+ )
704
+ parts.append("")
487
705
  parts.append(
488
706
  running_context_section.strip()
489
707
  or "RUNNING CONTEXT (from the portal ledger): (none yet — first iteration)"
@@ -677,6 +895,7 @@ def dispatch_decomposition_chat(
677
895
  machine = picked
678
896
 
679
897
  topology_context = repo_topology_context(config, repos)
898
+ house_stack = house_stack_context(config, exclude_repos=repos)
680
899
  discuss_mode, discuss_reason = select_discuss_mode(
681
900
  config, submission, discuss_override=discuss
682
901
  )
@@ -687,6 +906,7 @@ def dispatch_decomposition_chat(
687
906
  discuss=discuss_mode,
688
907
  discuss_reason=discuss_reason,
689
908
  running_context_section=running_context,
909
+ house_stack_context_section=house_stack,
690
910
  )
691
911
 
692
912
  resolved_model = config.models.default