code-coordinator 0.5.190__tar.gz → 0.5.192__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 (784) hide show
  1. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/code_coordinator.egg-info/scm_version.json +2 -2
  4. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/agent.py +60 -56
  5. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/agents/opencode/agents/work.md +41 -1
  6. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/providers/claude.py +14 -7
  7. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_agent.py +19 -16
  8. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_providers.py +74 -3
  9. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/.claude/commands/board.md +0 -0
  10. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/.claude/commands/complete-session.md +0 -0
  11. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/.claude/commands/coordinator.md +0 -0
  12. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/.githooks/_lib.sh +0 -0
  13. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/.githooks/post-checkout +0 -0
  14. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/.githooks/post-commit +0 -0
  15. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/.githooks/post-merge +0 -0
  16. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  17. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/.github/coord-ci-acceptance.yml +0 -0
  18. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/.github/workflows/auto-release.yml +0 -0
  19. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/.github/workflows/cargo-test.yml +0 -0
  20. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/.github/workflows/publish.yml +0 -0
  21. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/.github/workflows/release-tui.yml +0 -0
  22. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/.github/workflows/test.yml +0 -0
  23. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/.gitignore +0 -0
  24. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/CLAUDE.md +0 -0
  25. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/GOAL.md +0 -0
  26. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/LICENSE +0 -0
  27. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/MANIFEST.in +0 -0
  28. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/README.md +0 -0
  29. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/code_coordinator.egg-info/SOURCES.txt +0 -0
  30. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/code_coordinator.egg-info/dependency_links.txt +0 -0
  31. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/code_coordinator.egg-info/entry_points.txt +0 -0
  32. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/code_coordinator.egg-info/requires.txt +0 -0
  33. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/code_coordinator.egg-info/scm_file_list.json +0 -0
  34. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/code_coordinator.egg-info/top_level.txt +0 -0
  35. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/__init__.py +0 -0
  36. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/_board_mapping.py +0 -0
  37. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/acceptance.py +0 -0
  38. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/acceptance_drivers.py +0 -0
  39. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/agent_app.py +0 -0
  40. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/agent_update.py +0 -0
  41. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/agents/opencode/.gitignore +0 -0
  42. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/agents/opencode/routing.jsonc +0 -0
  43. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/audit.py +0 -0
  44. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/auto_loop.py +0 -0
  45. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/block_log.py +0 -0
  46. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/board_bool_guard.py +0 -0
  47. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/board_service.py +0 -0
  48. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/board_wire.py +0 -0
  49. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/brain.py +0 -0
  50. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/branch_model.py +0 -0
  51. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/bug_intake.py +0 -0
  52. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/cargo_cache.py +0 -0
  53. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/ci_github.py +0 -0
  54. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/ci_store.py +0 -0
  55. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/claim.py +0 -0
  56. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/cli.py +0 -0
  57. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/client.py +0 -0
  58. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/commands/__init__.py +0 -0
  59. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/commands/_common.py +0 -0
  60. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/commands/acceptance.py +0 -0
  61. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/commands/agent_ops.py +0 -0
  62. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/commands/audit.py +0 -0
  63. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/commands/chat.py +0 -0
  64. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/commands/dispatch.py +0 -0
  65. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/commands/dispatch_workers.py +0 -0
  66. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/commands/drive.py +0 -0
  67. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/commands/drive_queue.py +0 -0
  68. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/commands/gate_a.py +0 -0
  69. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/commands/gates.py +0 -0
  70. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/commands/issues.py +0 -0
  71. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/commands/lifecycle.py +0 -0
  72. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/commands/merge.py +0 -0
  73. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/commands/milestone.py +0 -0
  74. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/commands/plan_followup.py +0 -0
  75. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/commands/plans.py +0 -0
  76. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/commands/portal.py +0 -0
  77. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/commands/release.py +0 -0
  78. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/commands/repo.py +0 -0
  79. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/commands/report.py +0 -0
  80. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/commands/review.py +0 -0
  81. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/commands/scorecard.py +0 -0
  82. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/commands/sessions.py +0 -0
  83. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/commands/setup.py +0 -0
  84. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/commands/status.py +0 -0
  85. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/commands/terminal.py +0 -0
  86. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/commands/test_gate.py +0 -0
  87. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/commands/tui.py +0 -0
  88. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/comments.py +0 -0
  89. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/config.py +0 -0
  90. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/config_reload.py +0 -0
  91. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/conflict_fix.py +0 -0
  92. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/dao.py +0 -0
  93. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/dashboard/__init__.py +0 -0
  94. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/dashboard/fixture.py +0 -0
  95. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/dashboard/index.html +0 -0
  96. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/dashboard/server.py +0 -0
  97. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/dashboard/terminal.py +0 -0
  98. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/db.py +0 -0
  99. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/dead_end.py +0 -0
  100. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/deploy/README.md +0 -0
  101. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/deploy/coord-agent.service +0 -0
  102. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/deploy/coord-db-backup.service +0 -0
  103. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/deploy/coord-db-backup.sh +0 -0
  104. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/deploy/coord-db-backup.timer +0 -0
  105. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/deploy/coord-drive-queue.service +0 -0
  106. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/deploy/coord-drive-queue.timer +0 -0
  107. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/deploy/coord-notify.service +0 -0
  108. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/deploy/coord-notify.timer +0 -0
  109. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/deploy/coord-release-propagate.service +0 -0
  110. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/deploy/coord-release-propagate.timer +0 -0
  111. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/deploy/coord-release-window.service +0 -0
  112. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/deploy/coord-release-window.timer +0 -0
  113. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/deploy/coord-serve.service +0 -0
  114. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/deploy/coord-web-dist-build.service +0 -0
  115. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/deploy/coord-web-dist-build.timer +0 -0
  116. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/deploy/coord-web.service +0 -0
  117. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/deploy_manifest.py +0 -0
  118. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/deploy_units.py +0 -0
  119. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/deps.py +0 -0
  120. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/diagnose.py +0 -0
  121. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/dispatch.py +0 -0
  122. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/dist_name.py +0 -0
  123. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/drive.py +0 -0
  124. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/drive_queue.py +0 -0
  125. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/drive_state.py +0 -0
  126. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/events.py +0 -0
  127. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/failure_class.py +0 -0
  128. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/filelock.py +0 -0
  129. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/fleet_config_health.py +0 -0
  130. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/freshness.py +0 -0
  131. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/gate_a.py +0 -0
  132. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/gate_b.py +0 -0
  133. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/gate_snapshot.py +0 -0
  134. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/gates.py +0 -0
  135. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/github_ops.py +0 -0
  136. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/goal.py +0 -0
  137. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/graph_health.py +0 -0
  138. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/health/__init__.py +0 -0
  139. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/health/aggregate.py +0 -0
  140. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/health/checks/__init__.py +0 -0
  141. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/health/checks/agent_install.py +0 -0
  142. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/health/checks/cargo_targets.py +0 -0
  143. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/health/checks/claude_binary.py +0 -0
  144. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/health/checks/coord_web_ci_pin.py +0 -0
  145. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/health/checks/deploy_lane_facts.py +0 -0
  146. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/health/checks/disk.py +0 -0
  147. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/health/checks/fleet_board.py +0 -0
  148. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  149. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/health/checks/fleet_phantom.py +0 -0
  150. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/health/checks/fleet_unit_drift.py +0 -0
  151. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/health/checks/graph.py +0 -0
  152. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/health/checks/graphify_cli.py +0 -0
  153. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/health/checks/index_lock.py +0 -0
  154. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/health/checks/plan_usage.py +0 -0
  155. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/health/checks/repo_state.py +0 -0
  156. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/health/checks/spawned_coord.py +0 -0
  157. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/health/checks/timer_active.py +0 -0
  158. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/health/checks/toolchain.py +0 -0
  159. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/health/checks/unit_drift.py +0 -0
  160. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/health/checks/unit_enablement.py +0 -0
  161. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/health/checks/worktrees.py +0 -0
  162. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/health/cli.py +0 -0
  163. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/health/context.py +0 -0
  164. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/health/fleet_snapshot.py +0 -0
  165. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/health/models.py +0 -0
  166. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/health/pypi.py +0 -0
  167. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/health/registry.py +0 -0
  168. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/health/render.py +0 -0
  169. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/health/units.py +0 -0
  170. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/hooks.py +0 -0
  171. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/housekeeping.py +0 -0
  172. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/interactive.py +0 -0
  173. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/issue_store.py +0 -0
  174. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/liveness_auditor.py +0 -0
  175. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/machine_pause.py +0 -0
  176. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/merge_queue.py +0 -0
  177. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/milestone_chat.py +0 -0
  178. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/milestone_dispatch.py +0 -0
  179. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/milestone_gate.py +0 -0
  180. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/milestone_order.py +0 -0
  181. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/mock_author.py +0 -0
  182. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/models.py +0 -0
  183. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/network.py +0 -0
  184. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/new_issue_chat.py +0 -0
  185. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/notifier/__init__.py +0 -0
  186. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/notifier/baseline.py +0 -0
  187. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/notifier/cli.py +0 -0
  188. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/notifier/collect.py +0 -0
  189. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/notifier/digest.py +0 -0
  190. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/notifier/models.py +0 -0
  191. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/notifier/predicate.py +0 -0
  192. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/notifier/service.py +0 -0
  193. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/notifier/store.py +0 -0
  194. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/notifier/transport.py +0 -0
  195. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/notify.py +0 -0
  196. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/openapi.py +0 -0
  197. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/overlap_fence.py +0 -0
  198. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/overlap_predict.py +0 -0
  199. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/parentage.py +0 -0
  200. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/parentage_github.py +0 -0
  201. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/pipeline.py +0 -0
  202. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/plan_parser.py +0 -0
  203. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/plans.py +0 -0
  204. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/platform_paths.py +0 -0
  205. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/portal_bridge.py +0 -0
  206. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/portal_store.py +0 -0
  207. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/portal_sync.py +0 -0
  208. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/pr_body_lint.py +0 -0
  209. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/prereqs.py +0 -0
  210. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/progress.py +0 -0
  211. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/providers/__init__.py +0 -0
  212. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/providers/base.py +0 -0
  213. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/providers/claude_pty.py +0 -0
  214. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/providers/opencode.py +0 -0
  215. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/queue_diagnose.py +0 -0
  216. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/reconcile.py +0 -0
  217. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/reconcile_tick.py +0 -0
  218. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/refine_chat.py +0 -0
  219. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/release_cordon.py +0 -0
  220. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/release_propagate.py +0 -0
  221. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/release_verify.py +0 -0
  222. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/release_window.py +0 -0
  223. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/repo_edit.py +0 -0
  224. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/repo_onboard.py +0 -0
  225. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/reports.py +0 -0
  226. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/revalidate.py +0 -0
  227. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/review.py +0 -0
  228. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/scorecard.py +0 -0
  229. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/self_health.py +0 -0
  230. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/serve_app.py +0 -0
  231. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  232. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  233. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  234. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  235. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  236. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/skills/portal-followup/SKILL.md +0 -0
  237. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  238. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  239. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/skills/update-issue/SKILL.md +0 -0
  240. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/smoke.py +0 -0
  241. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/spend_ceiling.py +0 -0
  242. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/split_work.py +0 -0
  243. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/stage_projection.py +0 -0
  244. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/state.py +0 -0
  245. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/test_author.py +0 -0
  246. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/test_chat.py +0 -0
  247. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/test_orchestrator.py +0 -0
  248. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/test_report.py +0 -0
  249. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/tui_release.py +0 -0
  250. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/usage.py +0 -0
  251. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/usage_limits.py +0 -0
  252. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/usage_rollup.py +0 -0
  253. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coord/worker_events.py +0 -0
  254. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/coordinator.example.yml +0 -0
  255. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/deploy/coord-agent.service +0 -0
  256. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/deploy/coord-db-backup.service +0 -0
  257. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/deploy/coord-db-backup.sh +0 -0
  258. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/deploy/coord-db-backup.timer +0 -0
  259. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/deploy/coord-drive-queue.service +0 -0
  260. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/deploy/coord-drive-queue.timer +0 -0
  261. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/deploy/coord-notify.service +0 -0
  262. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/deploy/coord-notify.timer +0 -0
  263. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/deploy/coord-release-propagate.service +0 -0
  264. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/deploy/coord-release-propagate.timer +0 -0
  265. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/deploy/coord-release-window.service +0 -0
  266. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/deploy/coord-release-window.timer +0 -0
  267. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/deploy/coord-serve.service +0 -0
  268. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/deploy/coord-web-dist-build.service +0 -0
  269. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/deploy/coord-web-dist-build.sh +0 -0
  270. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/deploy/coord-web-dist-build.timer +0 -0
  271. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/deploy/coord-web-rollback.sh +0 -0
  272. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/deploy/coord-web.service +0 -0
  273. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/deploy/node-shim.sh +0 -0
  274. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  275. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/docs/ADR_COORD_WEB_CI.md +0 -0
  276. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/docs/ADR_COORD_WEB_DIST.md +0 -0
  277. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/docs/AGENT_OPERATIONS.md +0 -0
  278. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/docs/ARCHITECTURE.md +0 -0
  279. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/docs/ARCH_SECURITY_GATES.md +0 -0
  280. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/docs/COCKPIT.md +0 -0
  281. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/docs/CONTROL_CENTER.md +0 -0
  282. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/docs/COST_DISCIPLINE.md +0 -0
  283. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/docs/CROSS_PLATFORM.md +0 -0
  284. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/docs/CUSTOMER_PORTAL.md +0 -0
  285. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/docs/DRIVE_QUEUE.md +0 -0
  286. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/docs/EPHEMERAL_WORKERS.md +0 -0
  287. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/docs/FORGE_MIGRATION.md +0 -0
  288. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/docs/GRAPHIFY_SETUP.md +0 -0
  289. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/docs/ISSUE_GUIDANCE.md +0 -0
  290. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/docs/MAC_MINI.md +0 -0
  291. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  292. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/docs/NOTIFIER.md +0 -0
  293. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/docs/OPENCODE_VERIFICATION.md +0 -0
  294. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/docs/OPERATING_GOTCHAS.md +0 -0
  295. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/docs/ORACLE_LOOP.md +0 -0
  296. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/docs/PHONE_WEBAPP.md +0 -0
  297. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/docs/PIPELINE_V2.md +0 -0
  298. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/docs/PLATFORM_EVOLUTION.md +0 -0
  299. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/docs/SECOND_BACKEND.md +0 -0
  300. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/docs/STORE_SERVICE.md +0 -0
  301. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  302. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/docs/WEB_CONTROL_CENTER.md +0 -0
  303. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/docs/WSL_WINDOWS_WORKER.md +0 -0
  304. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/docs/mocks/web/README.md +0 -0
  305. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/docs/mocks/web/_tokens.css +0 -0
  306. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/docs/mocks/web/issue-detail.html +0 -0
  307. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/docs/mocks/web/pipeline-narrow.html +0 -0
  308. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/docs/mocks/web/pipeline-wide.html +0 -0
  309. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/graphify-out/.gitignore +0 -0
  310. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/install-agent.sh +0 -0
  311. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/pyproject.toml +0 -0
  312. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/scripts/audit_review_verdict_overrides.py +0 -0
  313. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  314. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/scripts/azure-workers/build-worker-image.sh +0 -0
  315. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/scripts/azure-workers/coordinator-machine.py +0 -0
  316. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/scripts/azure-workers/epic-down.sh +0 -0
  317. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/scripts/azure-workers/epic-up.sh +0 -0
  318. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/scripts/azure-workers/preflight.sh +0 -0
  319. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/scripts/azure-workers/provision-worker.sh +0 -0
  320. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  321. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  322. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/scripts/azure-workers/verify-github-token.sh +0 -0
  323. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/scripts/codegen.py +0 -0
  324. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/scripts/coord-test-runner.sh +0 -0
  325. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/scripts/drive-batch.sh +0 -0
  326. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/scripts/gen_board_fixture.py +0 -0
  327. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/scripts/next_release_tag.py +0 -0
  328. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/scripts/run_tests_in_populated_home.sh +0 -0
  329. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/scripts/run_tests_without_gh.sh +0 -0
  330. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/scripts/smoke_437_interactive.py +0 -0
  331. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/scripts/verify_878_review_capture.py +0 -0
  332. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/scripts/verify_release_published.py +0 -0
  333. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/scripts/verify_release_wheel.py +0 -0
  334. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/setup.cfg +0 -0
  335. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/SMOKE_SET.md +0 -0
  336. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/__init__.py +0 -0
  337. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  338. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/acceptance/ms-33/contract.md +0 -0
  339. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/acceptance/ms-33/manifest.yml +0 -0
  340. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  341. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  342. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  343. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  344. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/acceptance/ms-37/conftest.py +0 -0
  345. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/acceptance/ms-37/contract.md +0 -0
  346. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/acceptance/ms-37/manifest.yml +0 -0
  347. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  348. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  349. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/acceptance/ms-38/contract.md +0 -0
  350. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/acceptance/ms-38/manifest.yml +0 -0
  351. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  352. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  353. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  354. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  355. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  356. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  357. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  358. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  359. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  360. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  361. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/acceptance/ms-51/contract.md +0 -0
  362. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  363. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  364. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/acceptance/ms-51/manifest.yml +0 -0
  365. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  366. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/acceptance/ms-51/tsconfig.json +0 -0
  367. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/acceptance/ms-65/board_split_2288.rs +0 -0
  368. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
  369. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
  370. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/acceptance/ms-65/contract.md +0 -0
  371. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
  372. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/acceptance/ms-65/manifest.yml +0 -0
  373. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
  374. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
  375. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
  376. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
  377. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
  378. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
  379. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
  380. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
  381. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
  382. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
  383. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/acceptance/ms-65/tabs_persistence_2286.rs +0 -0
  384. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  385. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/conftest.py +0 -0
  386. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/fixtures/board-pipeline-basic.json +0 -0
  387. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  388. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  389. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  390. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  391. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/fixtures/playwright/all_pass.json +0 -0
  392. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  393. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/fixtures/playwright/mixed_fail.json +0 -0
  394. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  395. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  396. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/fixtures/playwright/skip.json +0 -0
  397. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/fixtures/playwright/truncated.json +0 -0
  398. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  399. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  400. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  401. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  402. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  403. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  404. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  405. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  406. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_acceptance.py +0 -0
  407. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_acceptance_drivers.py +0 -0
  408. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_agent_api_error.py +0 -0
  409. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_agent_app.py +0 -0
  410. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_agent_branch_base.py +0 -0
  411. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_agent_branch_capture.py +0 -0
  412. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_agent_config_free_1712.py +0 -0
  413. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_agent_deploy_units_endpoint.py +0 -0
  414. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_agent_dirty_worktree.py +0 -0
  415. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  416. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_agent_graph_self_heal.py +0 -0
  417. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_agent_health_h3.py +0 -0
  418. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_agent_idle_restart.py +0 -0
  419. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_agent_push_failure.py +0 -0
  420. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_agent_reap.py +0 -0
  421. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_agent_repos_and_pull.py +0 -0
  422. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_agent_restart_services_endpoint.py +0 -0
  423. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_agent_skills_self_heal.py +0 -0
  424. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_agent_startup_diagnostics.py +0 -0
  425. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_agent_update.py +0 -0
  426. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_agent_update_bluegreen.py +0 -0
  427. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_agent_usage_limit.py +0 -0
  428. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_agent_zero_commit.py +0 -0
  429. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_ambient_home_isolation.py +0 -0
  430. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_approve_reject_plan.py +0 -0
  431. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_approve_usage_gate.py +0 -0
  432. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_assignment_already_recorded_daemon.py +0 -0
  433. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_audit_log.py +0 -0
  434. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_audit_outcome.py +0 -0
  435. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_audit_query.py +0 -0
  436. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_auto_loop.py +0 -0
  437. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_auto_release_publish_2035.py +0 -0
  438. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_base_checkout_restore.py +0 -0
  439. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_block_log.py +0 -0
  440. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_board_cap_762.py +0 -0
  441. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_board_fixture.py +0 -0
  442. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_board_read_path.py +0 -0
  443. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_board_service.py +0 -0
  444. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_board_state.py +0 -0
  445. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_board_wire.py +0 -0
  446. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_brain.py +0 -0
  447. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_branch_model.py +0 -0
  448. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_bug_intake.py +0 -0
  449. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_build_worker_image_env_update.py +0 -0
  450. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_cargo_cache.py +0 -0
  451. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_ci_acceptance_gate_1950.py +0 -0
  452. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_ci_parity_2091.py +0 -0
  453. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_ci_store.py +0 -0
  454. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_claim.py +0 -0
  455. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_cli_acceptance.py +0 -0
  456. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_cli_assign.py +0 -0
  457. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  458. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_cli_assign_interactive_remote.py +0 -0
  459. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_cli_assign_provider.py +0 -0
  460. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  461. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_cli_audit.py +0 -0
  462. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_cli_chat_continue.py +0 -0
  463. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_cli_decide.py +0 -0
  464. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_cli_diagnose_config_provenance.py +0 -0
  465. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_cli_diagnose_graph.py +0 -0
  466. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_cli_diagnose_self.py +0 -0
  467. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_cli_doctor.py +0 -0
  468. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_cli_doctor_config_free_1801.py +0 -0
  469. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  470. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_cli_drive.py +0 -0
  471. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_cli_drive_queue.py +0 -0
  472. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_cli_escalate.py +0 -0
  473. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_cli_fix_headless_review.py +0 -0
  474. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_cli_gate_a.py +0 -0
  475. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_cli_install_drift.py +0 -0
  476. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_cli_install_skills.py +0 -0
  477. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_cli_issue_create_label.py +0 -0
  478. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_cli_issue_reopen.py +0 -0
  479. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_cli_merge.py +0 -0
  480. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_cli_milestone_assign.py +0 -0
  481. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_cli_milestone_capture.py +0 -0
  482. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_cli_milestone_chat_add_child.py +0 -0
  483. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_cli_milestone_dispatch.py +0 -0
  484. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_cli_milestone_gate_b.py +0 -0
  485. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_cli_milestone_gate_c.py +0 -0
  486. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_cli_milestone_order.py +0 -0
  487. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  488. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_cli_milestone_ship.py +0 -0
  489. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_cli_network.py +0 -0
  490. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_cli_new_issue_chat.py +0 -0
  491. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_cli_plans.py +0 -0
  492. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_cli_portal.py +0 -0
  493. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_cli_pull_artifact.py +0 -0
  494. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_cli_queue.py +0 -0
  495. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_cli_reattach_sessions.py +0 -0
  496. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_cli_refine_board.py +0 -0
  497. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_cli_release_preflight.py +0 -0
  498. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_cli_release_propagate.py +0 -0
  499. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_cli_release_window.py +0 -0
  500. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_cli_repo_2220.py +0 -0
  501. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_cli_scorecard.py +0 -0
  502. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_cli_set_review_findings.py +0 -0
  503. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_cli_status_advisory_terminal.py +0 -0
  504. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_cli_status_merge_queue.py +0 -0
  505. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_cli_status_provider.py +0 -0
  506. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_cli_status_review_finalizing.py +0 -0
  507. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_cli_status_test_failed_tag.py +0 -0
  508. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_cli_status_usage_limit.py +0 -0
  509. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_cli_sync_comments_873.py +0 -0
  510. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_cli_test_plan.py +0 -0
  511. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_cli_track.py +0 -0
  512. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_cli_tui_update.py +0 -0
  513. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_cli_wait.py +0 -0
  514. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_client_base_install.py +0 -0
  515. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_comments.py +0 -0
  516. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_completion_summary.py +0 -0
  517. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_config.py +0 -0
  518. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_config_acceptance.py +0 -0
  519. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_config_audit.py +0 -0
  520. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_config_pricing.py +0 -0
  521. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  522. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_config_usage_gate.py +0 -0
  523. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_conflict_fix.py +0 -0
  524. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_conflict_fix_semantic.py +0 -0
  525. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_coord_test.py +0 -0
  526. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_coord_test_runner_baseline.py +0 -0
  527. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_coord_test_runner_populated_home.py +0 -0
  528. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_coord_test_runner_routing.py +0 -0
  529. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_coord_test_runner_toolchain.py +0 -0
  530. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_coord_web_sse_restart_live.py +0 -0
  531. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_coordinator_machine.py +0 -0
  532. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_cross_platform_imports.py +0 -0
  533. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_dashboard.py +0 -0
  534. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_dashboard_fixture.py +0 -0
  535. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_dashboard_terminal.py +0 -0
  536. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_dashboard_terminal_live.py +0 -0
  537. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_db.py +0 -0
  538. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_dead_end.py +0 -0
  539. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_deploy_coord_db_backup.py +0 -0
  540. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_deploy_coord_web_dist.py +0 -0
  541. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_deploy_coord_web_rollback.py +0 -0
  542. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_deploy_drive_queue_unit.py +0 -0
  543. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_deploy_manifest.py +0 -0
  544. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_deploy_units_lane.py +0 -0
  545. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_deploy_web_unit.py +0 -0
  546. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_deps.py +0 -0
  547. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_diagnose.py +0 -0
  548. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_dispatch.py +0 -0
  549. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_dispatch_target_validation.py +0 -0
  550. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_dist_name.py +0 -0
  551. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_done_housekeeping.py +0 -0
  552. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_drive.py +0 -0
  553. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_drive_queue.py +0 -0
  554. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_drive_state.py +0 -0
  555. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_drive_tmux.py +0 -0
  556. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_epic_up_capability_detection.py +0 -0
  557. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  558. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_epic_up_image_provenance.py +0 -0
  559. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_errors.py +0 -0
  560. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_events.py +0 -0
  561. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_failure_class.py +0 -0
  562. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_filelock.py +0 -0
  563. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  564. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_fix_of_force_override.py +0 -0
  565. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_fleet_config_health.py +0 -0
  566. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_fleet_health_probes.py +0 -0
  567. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_fleet_health_snapshot.py +0 -0
  568. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_freshness.py +0 -0
  569. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_gate_a.py +0 -0
  570. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_gate_b.py +0 -0
  571. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_gate_snapshot_staleness.py +0 -0
  572. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_gates.py +0 -0
  573. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  574. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_generated_types_fixture.py +0 -0
  575. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_github_ops.py +0 -0
  576. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_goal.py +0 -0
  577. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_graph_health.py +0 -0
  578. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_graph_selfheal_absent_2237.py +0 -0
  579. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_handoff.py +0 -0
  580. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_health_checks.py +0 -0
  581. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_health_cli.py +0 -0
  582. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_health_cli_graph.py +0 -0
  583. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_health_config.py +0 -0
  584. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_health_context.py +0 -0
  585. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_health_coord_web_ci_pin.py +0 -0
  586. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_health_deploy_lane_facts.py +0 -0
  587. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_health_incident_regression.py +0 -0
  588. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_health_pypi.py +0 -0
  589. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_health_registry.py +0 -0
  590. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_health_timer_active.py +0 -0
  591. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_health_toolchain.py +0 -0
  592. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_health_unit_drift.py +0 -0
  593. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_health_unit_enablement.py +0 -0
  594. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_hooks.py +0 -0
  595. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_human_attended_437.py +0 -0
  596. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_init.py +0 -0
  597. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_integration.py +0 -0
  598. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_interactive_briefing_echo.py +0 -0
  599. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_interactive_prefill_state.py +0 -0
  600. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_interactive_session_relaunch.py +0 -0
  601. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_interactive_test_verdict_backstop.py +0 -0
  602. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_interactive_token_attribution.py +0 -0
  603. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_interactive_worktree.py +0 -0
  604. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_issue_store_seam.py +0 -0
  605. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_liveness_auditor.py +0 -0
  606. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_liveness_notify.py +0 -0
  607. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_machine_pause.py +0 -0
  608. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_merge_queue.py +0 -0
  609. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_merge_verify.py +0 -0
  610. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_milestone_chat.py +0 -0
  611. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_milestone_dispatch.py +0 -0
  612. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_milestone_gate.py +0 -0
  613. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_milestone_order.py +0 -0
  614. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_milestone_seam.py +0 -0
  615. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_mock_author.py +0 -0
  616. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_model_tiering.py +0 -0
  617. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_models.py +0 -0
  618. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_models_config_labels.py +0 -0
  619. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_needs_attention.py +0 -0
  620. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_network.py +0 -0
  621. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_new_issue_chat.py +0 -0
  622. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_next_release_tag.py +0 -0
  623. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_no_direct_gh_calls.py +0 -0
  624. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_node_shim.py +0 -0
  625. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_notifier_baseline.py +0 -0
  626. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_notifier_cli.py +0 -0
  627. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_notifier_collect.py +0 -0
  628. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_notifier_config.py +0 -0
  629. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_notifier_drive_seam.py +0 -0
  630. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_notifier_isolation.py +0 -0
  631. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_notifier_predicate.py +0 -0
  632. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_notifier_quiet_hours.py +0 -0
  633. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_notifier_service.py +0 -0
  634. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_notify.py +0 -0
  635. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_notify_drain.py +0 -0
  636. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_openapi.py +0 -0
  637. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_operational_defaults.py +0 -0
  638. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_overlap_fence.py +0 -0
  639. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_overlap_predict.py +0 -0
  640. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_packaged_deploy_units.py +0 -0
  641. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_parentage.py +0 -0
  642. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_paste_landed.py +0 -0
  643. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_pipeline.py +0 -0
  644. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_plan_followup_approve_plan_command.py +0 -0
  645. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_plan_followup_pr_command.py +0 -0
  646. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_plan_followup_review_command.py +0 -0
  647. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_plan_only.py +0 -0
  648. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_plan_parser.py +0 -0
  649. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_platform_paths.py +0 -0
  650. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_portal_bridge.py +0 -0
  651. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_portal_config.py +0 -0
  652. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_portal_sync.py +0 -0
  653. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_pr_body_lint.py +0 -0
  654. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_prereqs.py +0 -0
  655. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_production_db_guard.py +0 -0
  656. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_progress.py +0 -0
  657. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_provider_seam.py +0 -0
  658. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_providers_config_labels.py +0 -0
  659. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_providers_pty.py +0 -0
  660. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_quiet_hours.py +0 -0
  661. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_quiet_hours_store_2146.py +0 -0
  662. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_reap_merged_sessions.py +0 -0
  663. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_reap_stale_interactive_tick.py +0 -0
  664. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_reconcile.py +0 -0
  665. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_reconcile_branch.py +0 -0
  666. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_reconcile_completions.py +0 -0
  667. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_reconcile_merges.py +0 -0
  668. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_reconcile_no_agent_record.py +0 -0
  669. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_reconcile_tick.py +0 -0
  670. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_reconcile_usage_limit_done.py +0 -0
  671. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_refine_chat.py +0 -0
  672. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_release_cordon_2101.py +0 -0
  673. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  674. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_release_cordon_deadlock_2240.py +0 -0
  675. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_release_propagate.py +0 -0
  676. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_release_unified_1242.py +0 -0
  677. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_release_verify.py +0 -0
  678. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_release_window.py +0 -0
  679. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_remote_auto_prune.py +0 -0
  680. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_remote_interactive_reaper.py +0 -0
  681. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_repo_edit_2220.py +0 -0
  682. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_repo_graph_fleet_2237.py +0 -0
  683. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_repo_onboard_2220.py +0 -0
  684. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_report_result_push.py +0 -0
  685. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_reports.py +0 -0
  686. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_retry.py +0 -0
  687. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_retry_advisory_1606.py +0 -0
  688. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_retry_type_1636.py +0 -0
  689. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_revalidate.py +0 -0
  690. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_review.py +0 -0
  691. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_review_end_review_without_verdict.py +0 -0
  692. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_review_parse_failure_diagnostic.py +0 -0
  693. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_review_reaffirm.py +0 -0
  694. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_review_state.py +0 -0
  695. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_review_verdict_backstop.py +0 -0
  696. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_review_verdict_override_audit.py +0 -0
  697. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_review_verdict_relay.py +0 -0
  698. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_review_zero_commits.py +0 -0
  699. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_scoped_review_wiring.py +0 -0
  700. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_scorecard.py +0 -0
  701. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_self_health.py +0 -0
  702. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_serve.py +0 -0
  703. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_serve_app_board_trim.py +0 -0
  704. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_session.py +0 -0
  705. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_slice_issue_attribution.py +0 -0
  706. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_smoke.py +0 -0
  707. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_smoke_live_checkout_restore.py +0 -0
  708. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_smoke_workflow.py +0 -0
  709. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_spend_ceiling.py +0 -0
  710. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_spend_ceiling_coordinator.py +0 -0
  711. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_split.py +0 -0
  712. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_split_work.py +0 -0
  713. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_stage_projection.py +0 -0
  714. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_stalled_pipeline.py +0 -0
  715. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_state.py +0 -0
  716. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_state_review_findings_daemon.py +0 -0
  717. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_status_fleet_footer.py +0 -0
  718. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_stop_1567.py +0 -0
  719. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_stuck.py +0 -0
  720. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_terminal_command.py +0 -0
  721. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_test_author.py +0 -0
  722. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_test_chat.py +0 -0
  723. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_test_orchestrator.py +0 -0
  724. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_test_report.py +0 -0
  725. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_test_verdict_parsing.py +0 -0
  726. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_test_verdict_transcript_floor.py +0 -0
  727. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_thin_client_board_audit.py +0 -0
  728. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_thin_client_config_load_1080.py +0 -0
  729. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_thin_client_daemon_routing_906.py +0 -0
  730. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_tmux_host.py +0 -0
  731. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_tmux_session.py +0 -0
  732. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_transcript_floor.py +0 -0
  733. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_usage.py +0 -0
  734. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_usage_limits.py +0 -0
  735. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_usage_rollup.py +0 -0
  736. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_venv_live_install_2121.py +0 -0
  737. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_version_single_source.py +0 -0
  738. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_watch.py +0 -0
  739. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  740. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_worker_events.py +0 -0
  741. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_worker_image_pin_sync.py +0 -0
  742. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_worker_safety.py +0 -0
  743. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_worker_test_scoping.py +0 -0
  744. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_worktree.py +0 -0
  745. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  746. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tui/Cargo.lock +0 -0
  747. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tui/Cargo.toml +0 -0
  748. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tui/cargo-config-local-quadraui.toml.example +0 -0
  749. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tui/src/app/audit.rs +0 -0
  750. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tui/src/app/chat.rs +0 -0
  751. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tui/src/app/data.rs +0 -0
  752. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tui/src/app/dialogs.rs +0 -0
  753. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tui/src/app/doc_tabs.rs +0 -0
  754. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tui/src/app/drive.rs +0 -0
  755. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tui/src/app/drive_queue.rs +0 -0
  756. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tui/src/app/escalation.rs +0 -0
  757. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tui/src/app/events.rs +0 -0
  758. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tui/src/app/fixtures.rs +0 -0
  759. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tui/src/app/fleet_health.rs +0 -0
  760. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tui/src/app/fleet_sessions.rs +0 -0
  761. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tui/src/app/fleet_terminals.rs +0 -0
  762. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tui/src/app/format.rs +0 -0
  763. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tui/src/app/milestone_dag.rs +0 -0
  764. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tui/src/app/mod.rs +0 -0
  765. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tui/src/app/msv.rs +0 -0
  766. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tui/src/app/pipeline.rs +0 -0
  767. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tui/src/app/plans.rs +0 -0
  768. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tui/src/app/render.rs +0 -0
  769. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tui/src/app/reports.rs +0 -0
  770. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tui/src/app/sessions.rs +0 -0
  771. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tui/src/app/settings_ui.rs +0 -0
  772. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tui/src/app/sidebar.rs +0 -0
  773. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tui/src/app/terminal.rs +0 -0
  774. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tui/src/app/tests.rs +0 -0
  775. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tui/src/app/types.rs +0 -0
  776. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tui/src/app/workspace.rs +0 -0
  777. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tui/src/bin/gtk.rs +0 -0
  778. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tui/src/commands.rs +0 -0
  779. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tui/src/lib.rs +0 -0
  780. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tui/src/main.rs +0 -0
  781. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tui/src/settings.rs +0 -0
  782. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tui/tests/acceptance.rs +0 -0
  783. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tui/tests/cli.rs +0 -0
  784. {code_coordinator-0.5.190 → code_coordinator-0.5.192}/tui/tests/fixtures/board_sample.json +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-coordinator
3
- Version: 0.5.190
3
+ Version: 0.5.192
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.190
3
+ Version: 0.5.192
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.190",
2
+ "tag": "0.5.192",
3
3
  "distance": 0,
4
- "node": "g99757b0d4a54a8a5b3c7ec90b7c5beeb9f118ecc",
4
+ "node": "g0313297e5d74d0c3c89481051a6be64e88dbe9ec",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-20"
@@ -3901,16 +3901,30 @@ def _base_checkout_write_guard_tools(repo_path: str) -> list[str]:
3901
3901
  # editing coordinator.yml/coord.db) silently also blocked every worker's own
3902
3902
  # worktree under `~/.coord/worktrees/<id>/`, burning a full $5.23 session
3903
3903
  # that reasoned, designed, and only discovered at the very end that it could
3904
- # not save anything. `default_worker_command`'s `--bare` (above, #2462;
3905
- # originally the narrower `--setting-sources user`) closes off the specific
3906
- # mechanism for headless workers they no longer load *any* Claude Code
3907
- # settings.json (user, project, or local) but this preflight check is kept
3908
- # as a defense-in-depth: it still catches a blanket deny rule living in the
3909
- # machine's *user*-level settings (`~/.claude/settings.json`) that would
3910
- # affect the human-attended interactive PTY path (which intentionally keeps
3911
- # the default setting sources, see the comment in `default_worker_command`),
3912
- # and it catches plain OS-level write failures (read-only mount, wrong
3913
- # ownership, full disk) that have nothing to do with Claude Code at all.
3904
+ # not save anything. `default_worker_command`'s `--setting-sources user`
3905
+ # (above) closes off the specific mechanism (workers no longer load
3906
+ # project/local settings at all), but this preflight check is kept as a
3907
+ # defense-in-depth: it also catches a blanket deny rule living in the
3908
+ # machine's *user*-level settings (`~/.claude/settings.json`, still loaded)
3909
+ # and plain OS-level write failures (read-only mount, wrong ownership, full
3910
+ # disk) that have nothing to do with Claude Code at all.
3911
+ #
3912
+ # #2462 EMERGENCY REVERT (2026-08-20): #2462 briefly switched this to
3913
+ # `--bare` to also close the hooks/.mcp.json leak (a never-trusted repo's
3914
+ # `.claude/hooks/` and `.mcp.json` still loading/connecting under
3915
+ # `--setting-sources user`, since that flag only governs settings.json).
3916
+ # `--bare` also unconditionally disables reading OAuth credentials / the
3917
+ # system keychain — this fleet authenticates headless dispatch via
3918
+ # `claude login`/OAuth (CLAUDE.md: "No API key needed... runs on a Max/Pro
3919
+ # subscription via OAuth"), not `ANTHROPIC_API_KEY`, so every worker
3920
+ # dispatch on every machine started failing at turn 1 with "Not logged in"
3921
+ # within the hour it went live (misreported fleet-wide as generic
3922
+ # `api_error`). Reverted back to `--setting-sources user` to restore
3923
+ # dispatch immediately. The hooks/.mcp.json leak this was meant to close is
3924
+ # real and still open — re-closing it needs a fix that doesn't require
3925
+ # `ANTHROPIC_API_KEY`/an `apiKeyHelper` (e.g. explicit `--settings '{}'`
3926
+ # plus verifying whether hooks/.mcp.json can be suppressed without full
3927
+ # `--bare`), tracked as a fresh follow-up rather than re-landing this as-is.
3914
3928
  _DENY_PATTERN_RE = re.compile(r"^(Edit|Write)\(//(.+)\)$")
3915
3929
 
3916
3930
 
@@ -3980,13 +3994,11 @@ def find_blocking_deny_rule(
3980
3994
  """Scan Claude Code settings files for a deny rule blocking *worktree_path*.
3981
3995
 
3982
3996
  Defaults to scanning just the machine's user-level settings
3983
- (``~/.claude/settings.json``). Since #2462, headless workers run with
3984
- ``--bare`` and load no Claude Code settings.json at all (user, project,
3985
- or local) — this file matters for the human-attended interactive PTY
3986
- path (:class:`coord.providers.claude_pty.ClaudePtyProvider`), which
3987
- intentionally keeps the default setting sources; a checkout-local
3988
- ``.claude/settings.local.json`` can no longer reach a headless worker at
3989
- all either way, so it is intentionally not scanned here.
3997
+ (``~/.claude/settings.json``) the one settings source a worker still
3998
+ loads after the ``--setting-sources user`` restriction in
3999
+ :func:`default_worker_command`; a checkout-local
4000
+ ``.claude/settings.local.json`` can no longer reach a worker at all, so
4001
+ it is intentionally not scanned here.
3990
4002
 
3991
4003
  Returns a human-readable ``"'<pattern>' in <file>"`` message for the
3992
4004
  first matching rule found, or ``None`` when no scanned file carries one
@@ -4260,47 +4272,39 @@ def default_worker_command(spec: AssignmentSpec, *, binary: str = DEFAULT_WORKER
4260
4272
  # so a deny rule that never touches the worktree's working directory
4261
4273
  # still blocked Edit/Write calls from a `claude -p` session cwd'd
4262
4274
  # into that worktree.
4275
+ # into that worktree. Restricting to "user" means a worker's
4276
+ # permission profile is fully controlled by the --allowedTools /
4277
+ # --disallowedTools / --permission-mode flags in this function (and
4278
+ # its own hard-coded system prompt), not by the checkout's
4279
+ # settings.json / settings.local.json. This is the headless/
4280
+ # `claude -p` path only — the human-attended interactive PTY path
4281
+ # (coord.providers.claude_pty.ClaudePtyProvider) intentionally keeps
4282
+ # the default sources so an operator's own `coord init`-configured
4283
+ # convenience allow-list still applies to a session they're
4284
+ # attached to and watching.
4263
4285
  #
4264
- # `--setting-sources user` (the original #1445 fix) only closed this
4265
- # for *settings.json* a checkout's `.claude/hooks/` and `.mcp.json`
4266
- # are governed separately and kept loading regardless, so a
4267
- # never-trusted repo's hooks would still run and its MCP servers
4268
- # would still connect in every worker session, because a `-p`
4269
- # session shows neither the workspace-trust dialog nor the
4270
- # per-server MCP approval prompt that would normally gate that (see
4271
- # code.claude.com/docs/en/headless.md). `--bare` is the flag that
4272
- # closes all three sources (settings, hooks, .mcp.json) at once, plus
4273
- # LSP/plugin-sync/CLAUDE.md auto-discovery none of which a headless
4274
- # worker should be picking up *ambiently* from the target repo's own
4275
- # checkout either. A worker's permission profile is fully controlled
4276
- # by the --allowedTools / --disallowedTools / --permission-mode
4277
- # flags in this function (and its own hard-coded system prompt); it
4278
- # needs no MCP servers (no spec.type grants the `Agent` tool, so
4279
- # `--agents` is unneeded too) and no `--settings`.
4280
- #
4281
- # CLAUDE.md is the one exception worth calling out: losing its
4282
- # *ambient* auto-discovery does NOT mean a work-shaped leg loses the
4283
- # content. `_claude_md_system_prompt_suffix` (see the branches
4284
- # above: "plan", "mock-author", and this catch-all "else") reads it
4285
- # explicitly off *spec.repo_path* and embeds it into --system-prompt
4286
- # instead — the same defensive pattern coord.review.read_repo_claude_md
4287
- # already used for review legs (#2462).
4286
+ # #2462 tried `--bare` here (closes settings + hooks + .mcp.json +
4287
+ # CLAUDE.md auto-discovery at once, vs. this flag's settings.json-only
4288
+ # scope) but `--bare` also unconditionally disables reading OAuth
4289
+ # credentials / the system keychain, and this fleet authenticates
4290
+ # headless dispatch via `claude login`/OAuth, not `ANTHROPIC_API_KEY`
4291
+ # (see CLAUDE.md: "No API key needed... Max/Pro subscription via
4292
+ # OAuth"). It went live and broke every worker dispatch fleet-wide
4293
+ # within the hour ("Not logged in · Please run /login", misreported
4294
+ # as generic `api_error`) reverted back to `--setting-sources user`
4295
+ # same-day. The hooks/.mcp.json leak `--bare` closed is real and
4296
+ # still open; re-closing it needs an approach that doesn't require
4297
+ # `ANTHROPIC_API_KEY`/an `apiKeyHelper`, tracked as a fresh
4298
+ # follow-up rather than re-landing `--bare` as-is.
4288
4299
  #
4289
- # AUTH CAVEAT: per Claude Code's own docs, `--bare` "never reads
4290
- # OAuth credentials or the system keychain" only `ANTHROPIC_API_KEY`
4291
- # (env, inherited via `_worker_subprocess_env`) or an `apiKeyHelper`
4292
- # supplied via `--settings` authenticate. This is a behavior change
4293
- # for any fleet machine whose worker auth today comes from
4294
- # `claude setup-token` / `CLAUDE_CODE_OAUTH_TOKEN` or an interactive
4295
- # `claude login` (the pattern docs/CONTROL_CENTER.md §14 documents for
4296
- # per-person subscription auth) rather than an API key — such a
4297
- # machine must switch to `ANTHROPIC_API_KEY` (or an `apiKeyHelper`)
4298
- # for headless dispatch to keep authenticating. This is the
4299
- # headless/`claude -p` path only — the human-attended interactive PTY
4300
- # path (coord.providers.claude_pty.ClaudePtyProvider) intentionally
4301
- # keeps the default sources, so OAuth/keychain login still works for
4302
- # a session an operator is attached to and watching.
4303
- "--bare",
4300
+ # `_claude_md_system_prompt_suffix` (see the "plan", "mock-author",
4301
+ # and catch-all "else" branches above) explicitly embeds the target
4302
+ # repo's CLAUDE.md into --system-prompt regardless kept as
4303
+ # defense-in-depth (the same double-load pattern
4304
+ # coord.review.read_repo_claude_md already used for review legs)
4305
+ # even though `--setting-sources user` alone still lets CLAUDE.md's
4306
+ # own ambient auto-discovery run too.
4307
+ "--setting-sources", "user",
4304
4308
  ]
4305
4309
  if spec.model:
4306
4310
  argv.extend(["--model", spec.model])
@@ -28,6 +28,20 @@ permission:
28
28
  "git branch*": allow
29
29
  "git rev-parse*": allow
30
30
  "git push*": allow
31
+ # #2463: force-push carve-out, listed AFTER "git push*": allow above so
32
+ # it wins under last-match-wins ordering (confirmed against a real
33
+ # opencode binary, see docs/OPENCODE_VERIFICATION.md "Rule precedence
34
+ # is last-match-wins, not first-match-wins" — a deny rule earlier in
35
+ # this list than the allow it's meant to override is silently
36
+ # swallowed). Mirrors coord/config.py's DEFAULT_DENY_COMMANDS
37
+ # force-push entries, including the #2314 reordered-flag pairing (a
38
+ # flag inserted before -f/--force still denies) — an unrestricted "git
39
+ # push*": allow would otherwise let a worker force-push over another
40
+ # worker's branch or silently rewrite pushed history.
41
+ "git push -f*": deny
42
+ "git push --force*": deny
43
+ "git push * -f*": deny
44
+ "git push * --force*": deny
31
45
  "cargo *": allow
32
46
  "make*": allow
33
47
  "pytest*": allow
@@ -40,6 +54,25 @@ permission:
40
54
  edit:
41
55
  "*": allow
42
56
  "tests/acceptance/**": deny
57
+ # #2463: the sealed-oracle prefix above isn't the only high-blast-radius
58
+ # edit a `work` assignment should never make unsupervised — CI config,
59
+ # lockfiles, and migrations are the same class of gap already closed
60
+ # for the Claude-dispatch path's base checkout and sealed acceptance
61
+ # oracle (coord/agent.py's _sealed_write_guard_tools /
62
+ # _base_checkout_write_guard_tools), just not yet extended to this
63
+ # file. A worker that genuinely needs one of these edited should say so
64
+ # in its final report so the coordinator can make the change itself as
65
+ # a declared, reviewable exception, rather than the worker silently
66
+ # editing it inline.
67
+ ".github/workflows/**": deny
68
+ "*.lock": deny
69
+ "**/*.lock": deny
70
+ "package-lock.json": deny
71
+ "**/package-lock.json": deny
72
+ "pnpm-lock.yaml": deny
73
+ "**/pnpm-lock.yaml": deny
74
+ "migrations/**": deny
75
+ "**/migrations/**": deny
43
76
  external_directory: deny
44
77
  ---
45
78
  You are an opencode worker executing an assignment from the coordinator.
@@ -54,7 +87,14 @@ They are managed by the coordinator.
54
87
  - You are already on a feature branch. Commit your work to this branch. \
55
88
  Push with `git push origin HEAD`. \
56
89
  NEVER commit or push to main or develop directly. \
57
- Do NOT open a PR — the coordinator handles that.
90
+ Do NOT open a PR — the coordinator handles that. \
91
+ `git push -f`/`--force` (in any argument position) is denied — you can \
92
+ push new commits, never rewrite history that's already on the remote.
93
+ - Editing `.github/workflows/**`, lockfiles (`*.lock`, `package-lock.json`, \
94
+ `pnpm-lock.yaml`), or anything under a `migrations/` directory is denied. \
95
+ If your assignment genuinely needs one of these changed, say so in your \
96
+ final report instead of finding a way around the block — the coordinator \
97
+ makes that change as a declared, reviewable exception.
58
98
  - Work only inside your current working directory. It is your own git \
59
99
  worktree, checked out from a repo that also lives at `~/src/<repo>` on this \
60
100
  machine — never read or write anything under `~/src/<repo>` (or any other \
@@ -207,8 +207,10 @@ class ClaudeProvider(Provider):
207
207
  # #2462: keep in sync with default_worker_command's identical
208
208
  # catch-all branch — it covers "work", "fix", "conflict-fix"
209
209
  # and "test-author", every one of which edits code and needs
210
- # the target repo's CLAUDE.md conventions, which `--bare`
211
- # below stops Claude Code from auto-discovering.
210
+ # the target repo's CLAUDE.md conventions. Kept as
211
+ # defense-in-depth alongside CLAUDE.md's own ambient
212
+ # auto-discovery (unaffected by `--setting-sources user`,
213
+ # below) even after the `--bare` emergency revert.
212
214
  _sp += _claude_md_system_prompt_suffix(spec.repo_path)
213
215
  # #2169: keep in sync with default_worker_command's identical
214
216
  # branch — Monitor is the sanctioned bounded-poll tool for a
@@ -229,11 +231,16 @@ class ClaudeProvider(Provider):
229
231
  "--system-prompt", system_prompt,
230
232
  "--allowedTools", allowed_tools,
231
233
  "--permission-mode", permission_mode,
232
- # #1445 / #2462: see the matching comment in
233
- # default_worker_command — workers must not inherit the host
234
- # checkout's project/local Claude Code settings, hooks, or
235
- # .mcp.json MCP servers. `--bare` closes all of those at once.
236
- "--bare",
234
+ # #1445: see the matching comment in default_worker_command —
235
+ # workers must not inherit the host checkout's project/local
236
+ # Claude Code settings.
237
+ #
238
+ # #2462 EMERGENCY REVERT (2026-08-20): tried `--bare` here (also
239
+ # closes hooks/.mcp.json), but `--bare` disables OAuth/keychain
240
+ # auth and this fleet authenticates headless dispatch via OAuth,
241
+ # not ANTHROPIC_API_KEY — broke every dispatch fleet-wide within
242
+ # the hour. See the longer comment in default_worker_command.
243
+ "--setting-sources", "user",
237
244
  ]
238
245
  if effective_model:
239
246
  argv.extend(["--model", effective_model])
@@ -1533,12 +1533,12 @@ def test_default_worker_command_mock_author_not_sealed() -> None:
1533
1533
  # ── #1445: worktree-writability preflight ───────────────────────────────────
1534
1534
 
1535
1535
 
1536
- def test_default_worker_command_uses_bare_mode() -> None:
1536
+ def test_default_worker_command_uses_setting_sources_user() -> None:
1537
1537
  """A worker must not inherit the host checkout's project/local Claude
1538
- Code settings, hooks, or .mcp.json MCP servers see #1445 and #2462.
1539
- `--bare` closes all three sources at once; the narrower
1540
- `--setting-sources user` (the original #1445 fix) only closed settings.json
1541
- and left hooks/.mcp.json loading from a never-trusted repo."""
1538
+ Code settings see #1445. #2462 briefly tried `--bare` (also closes
1539
+ hooks/.mcp.json) but that disables OAuth/keychain auth and broke every
1540
+ worker dispatch fleet-wide within the hour on this OAuth-authenticated
1541
+ fleet; reverted same-day back to the narrower `--setting-sources user`."""
1542
1542
  spec = AssignmentSpec(
1543
1543
  repo_name="api",
1544
1544
  repo_path="/tmp/repo",
@@ -1547,11 +1547,13 @@ def test_default_worker_command_uses_bare_mode() -> None:
1547
1547
  briefing="b",
1548
1548
  )
1549
1549
  argv = default_worker_command(spec)
1550
- assert "--bare" in argv
1551
- assert "--setting-sources" not in argv
1550
+ assert "--setting-sources" in argv
1551
+ idx = argv.index("--setting-sources")
1552
+ assert argv[idx + 1] == "user"
1553
+ assert "--bare" not in argv
1552
1554
 
1553
1555
 
1554
- def test_default_worker_command_uses_bare_mode_for_plan_type() -> None:
1556
+ def test_default_worker_command_uses_setting_sources_user_for_plan_type() -> None:
1555
1557
  """Same restriction applies to every spec.type, not just 'work' — all of
1556
1558
  them are headless dispatches that must not depend on host checkout
1557
1559
  state."""
@@ -1564,16 +1566,18 @@ def test_default_worker_command_uses_bare_mode_for_plan_type() -> None:
1564
1566
  type="plan",
1565
1567
  )
1566
1568
  argv = default_worker_command(spec)
1567
- assert "--bare" in argv
1568
- assert "--setting-sources" not in argv
1569
+ assert "--setting-sources" in argv
1570
+ idx = argv.index("--setting-sources")
1571
+ assert argv[idx + 1] == "user"
1572
+ assert "--bare" not in argv
1569
1573
 
1570
1574
 
1571
1575
  def test_default_worker_command_embeds_claude_md_for_work_type(tmp_path: Path) -> None:
1572
- """#2462: `--bare` disables Claude Code's own CLAUDE.md auto-discovery,
1573
- so a work-shaped leg would otherwise never see the target repo's
1574
- CLAUDE.md at all. default_worker_command must embed it into the
1575
- --system-prompt argv itself, mirroring the review leg's
1576
- read_repo_claude_md defensive read (coord/review.py)."""
1576
+ """#2462: added a CLAUDE.md embed into --system-prompt for work-shaped
1577
+ legs (originally to compensate for `--bare` disabling ambient
1578
+ auto-discovery; kept as defense-in-depth after the `--bare` emergency
1579
+ revert), mirroring the review leg's read_repo_claude_md defensive read
1580
+ (coord/review.py)."""
1577
1581
  (tmp_path / "CLAUDE.md").write_text("# Project rules\n\nAlways use tabs.\n")
1578
1582
  spec = AssignmentSpec(
1579
1583
  repo_name="api",
@@ -1583,7 +1587,6 @@ def test_default_worker_command_embeds_claude_md_for_work_type(tmp_path: Path) -
1583
1587
  briefing="b",
1584
1588
  )
1585
1589
  argv = default_worker_command(spec)
1586
- assert "--bare" in argv
1587
1590
  idx = argv.index("--system-prompt")
1588
1591
  system_prompt = argv[idx + 1]
1589
1592
  assert "Always use tabs." in system_prompt
@@ -187,7 +187,7 @@ def test_parity_custom_system_prompt() -> None:
187
187
  _parity(spec)
188
188
 
189
189
 
190
- # ── #2462: CLAUDE.md embed parity (--bare kills auto-discovery) ──────────────
190
+ # ── #2462: CLAUDE.md embed parity ─────────────────────────────────────────────
191
191
  #
192
192
  # The parity helper above uses repo_path="/some/path", which does not exist —
193
193
  # so `_claude_md_system_prompt_suffix` returns "" on BOTH sides and the parity
@@ -198,6 +198,11 @@ def test_parity_custom_system_prompt() -> None:
198
198
  # path production dispatch really takes (coord/commands/dispatch_workers.py
199
199
  # and friends call provider.build_command(), never default_worker_command) —
200
200
  # so "both sides dropped the embed" fails too, not just "they diverged".
201
+ #
202
+ # #2462 originally added this embed to compensate for `--bare` disabling
203
+ # CLAUDE.md's own ambient auto-discovery; `--bare` was reverted same-day
204
+ # (broke OAuth/keychain auth fleet-wide, see default_worker_command's
205
+ # comment), but the embed is kept as defense-in-depth.
201
206
 
202
207
 
203
208
  def _claude_md_repo(tmp_path: Path, body: str) -> Path:
@@ -245,10 +250,11 @@ def test_build_command_embeds_claude_md_for_work_shaped_types(
245
250
  ) -> None:
246
251
  """#2462: the provider seam — the path real dispatch takes — must embed
247
252
  the target repo's CLAUDE.md into --system-prompt for every work-shaped
248
- leg, since `--bare` disables Claude Code's own auto-discovery of it."""
253
+ leg, as defense-in-depth alongside CLAUDE.md's own ambient
254
+ auto-discovery."""
249
255
  repo = _claude_md_repo(tmp_path, f"# Project rules\n\n{rule}\n")
250
256
  argv = ClaudeProvider().build_command(_make_spec(type=spec_type, repo_path=str(repo)))
251
- assert "--bare" in argv
257
+ assert "--setting-sources" in argv
252
258
  system_prompt = argv[argv.index("--system-prompt") + 1]
253
259
  assert rule in system_prompt
254
260
  assert "Project rules (from CLAUDE.md)" in system_prompt
@@ -2451,6 +2457,10 @@ def _init_oc_throwaway_repo(tmp_path: Path) -> Path:
2451
2457
  (repo / "tests" / "acceptance" / "ms-01" / "contract.md").write_text(
2452
2458
  "# oracle contract\n"
2453
2459
  )
2460
+ # #2463: a real CI config file, matching the shape work.md's
2461
+ # ".github/workflows/**" edit deny is meant to protect.
2462
+ (repo / ".github" / "workflows").mkdir(parents=True)
2463
+ (repo / ".github" / "workflows" / "ci.yml").write_text("name: ci\n")
2454
2464
  (repo / "math_utils.py").write_text("def add(a, b):\n return a + b\n")
2455
2465
  run("git", "add", "-A")
2456
2466
  run("git", "commit", "-q", "-m", "init")
@@ -2761,6 +2771,67 @@ def test_opencode_work_agent_blocks_tests_acceptance_edit_end_to_end(
2761
2771
  assert contract.read_text() == "# oracle contract\n"
2762
2772
 
2763
2773
 
2774
+ @_requires_real_opencode
2775
+ def test_opencode_work_agent_blocks_force_push_end_to_end(tmp_path: Path) -> None:
2776
+ """PROOF for #2463: a real `work`-agent opencode run cannot force-push.
2777
+ work.md's permission block denies "git push -f*"/"git push --force*"
2778
+ (listed AFTER "git push*": allow so they win under last-match-wins
2779
+ ordering) — this asserts the denial actually happens inside a real
2780
+ opencode process, not merely that the frontmatter text looks right.
2781
+
2782
+ Before #2463, "git push*": allow had no force-push exception at all —
2783
+ this test would have observed the force-push command succeed (or at
2784
+ least not be denied by the permission layer)."""
2785
+ repo = _init_oc_throwaway_repo(tmp_path)
2786
+ events = _run_real_opencode_work(
2787
+ repo,
2788
+ "Run 'git push --force origin HEAD' via bash and tell me the output.",
2789
+ )
2790
+ force_calls = [
2791
+ e
2792
+ for e in _bash_tool_calls(events)
2793
+ if e["part"].get("state", {}).get("input", {}).get("command", "").strip()
2794
+ == "git push --force origin HEAD"
2795
+ ]
2796
+ _require_attempt(events, force_calls, "'git push --force origin HEAD' via bash")
2797
+ for call in force_calls:
2798
+ state = call["part"]["state"]
2799
+ assert state.get("status") == "error", f"force-push was not blocked: {call}"
2800
+ assert "permission" in str(state.get("error", "")).lower()
2801
+
2802
+
2803
+ @_requires_real_opencode
2804
+ def test_opencode_work_agent_blocks_github_workflows_edit_end_to_end(
2805
+ tmp_path: Path,
2806
+ ) -> None:
2807
+ """PROOF for #2463: a real `work`-agent opencode run cannot edit
2808
+ .github/workflows/** — work.md denies edit under that prefix, the same
2809
+ class of high-blast-radius path as the sealed-oracle prefix covered by
2810
+ ``test_opencode_work_agent_blocks_tests_acceptance_edit_end_to_end``.
2811
+
2812
+ Before #2463, work.md's edit block denied only tests/acceptance/** —
2813
+ this test would have observed the CI config edit succeed."""
2814
+ repo = _init_oc_throwaway_repo(tmp_path)
2815
+ events = _run_real_opencode_work(
2816
+ repo,
2817
+ "Use the edit tool to append the line '# tampered' to the file "
2818
+ ".github/workflows/ci.yml in this repo. Do not attempt anything else.",
2819
+ )
2820
+ edit_calls = _edit_tool_calls(events)
2821
+ workflow_edits = [
2822
+ e
2823
+ for e in edit_calls
2824
+ if ".github/workflows/" in e["part"].get("state", {}).get("input", {}).get("filePath", "")
2825
+ ]
2826
+ _require_attempt(events, workflow_edits, "the edit under .github/workflows/")
2827
+ for call in workflow_edits:
2828
+ assert call["part"]["state"].get("status") == "error", (
2829
+ f"edit under .github/workflows/ was not blocked: {call}"
2830
+ )
2831
+ workflow = repo / ".github" / "workflows" / "ci.yml"
2832
+ assert workflow.read_text() == "name: ci\n"
2833
+
2834
+
2764
2835
  @_requires_real_opencode
2765
2836
  def test_opencode_work_agent_allows_normal_edit_and_git_end_to_end(
2766
2837
  tmp_path: Path,