code-coordinator 0.5.142__tar.gz → 0.5.145__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 (866) hide show
  1. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/code_coordinator.egg-info/scm_version.json +2 -2
  4. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/ci_github.py +34 -1
  5. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/config.py +2 -2
  6. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/github_ops.py +40 -0
  7. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/merge_queue.py +119 -15
  8. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_ci_store.py +86 -0
  9. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_cli_drive_queue.py +56 -6
  10. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_conflict_fix_semantic.py +1 -1
  11. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_merge_queue.py +140 -0
  12. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tui/src/app/doc_tabs.rs +281 -0
  13. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tui/src/app/events.rs +107 -18
  14. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tui/src/app/fixtures.rs +9 -1
  15. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tui/src/app/mod.rs +75 -1
  16. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tui/src/app/render.rs +93 -13
  17. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tui/src/app/tests.rs +544 -0
  18. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/.claude/commands/board.md +0 -0
  19. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/.claude/commands/complete-session.md +0 -0
  20. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/.claude/commands/coordinator.md +0 -0
  21. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/.githooks/_lib.sh +0 -0
  22. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/.githooks/post-checkout +0 -0
  23. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/.githooks/post-commit +0 -0
  24. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/.githooks/post-merge +0 -0
  25. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  26. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/.github/coord-ci-acceptance.yml +0 -0
  27. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/.github/workflows/auto-release.yml +0 -0
  28. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/.github/workflows/cargo-test.yml +0 -0
  29. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/.github/workflows/publish.yml +0 -0
  30. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/.github/workflows/release-tui.yml +0 -0
  31. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/.github/workflows/test.yml +0 -0
  32. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/.gitignore +0 -0
  33. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/CLAUDE.md +0 -0
  34. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/GOAL.md +0 -0
  35. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/LICENSE +0 -0
  36. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/MANIFEST.in +0 -0
  37. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/README.md +0 -0
  38. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/code_coordinator.egg-info/SOURCES.txt +0 -0
  39. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/code_coordinator.egg-info/dependency_links.txt +0 -0
  40. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/code_coordinator.egg-info/entry_points.txt +0 -0
  41. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/code_coordinator.egg-info/requires.txt +0 -0
  42. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/code_coordinator.egg-info/scm_file_list.json +0 -0
  43. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/code_coordinator.egg-info/top_level.txt +0 -0
  44. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/__init__.py +0 -0
  45. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/_board_mapping.py +0 -0
  46. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/acceptance.py +0 -0
  47. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/acceptance_drivers.py +0 -0
  48. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/agent.py +0 -0
  49. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/agent_app.py +0 -0
  50. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/agent_update.py +0 -0
  51. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/agents/opencode/.gitignore +0 -0
  52. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/agents/opencode/agents/work.md +0 -0
  53. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/agents/opencode/routing.jsonc +0 -0
  54. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/audit.py +0 -0
  55. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/auto_loop.py +0 -0
  56. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/block_log.py +0 -0
  57. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/board_bool_guard.py +0 -0
  58. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/board_service.py +0 -0
  59. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/board_wire.py +0 -0
  60. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/brain.py +0 -0
  61. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/branch_model.py +0 -0
  62. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/bug_intake.py +0 -0
  63. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/cargo_cache.py +0 -0
  64. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/ci_store.py +0 -0
  65. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/claim.py +0 -0
  66. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/cli.py +0 -0
  67. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/client.py +0 -0
  68. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/commands/__init__.py +0 -0
  69. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/commands/_common.py +0 -0
  70. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/commands/acceptance.py +0 -0
  71. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/commands/agent_ops.py +0 -0
  72. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/commands/audit.py +0 -0
  73. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/commands/chat.py +0 -0
  74. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/commands/dispatch.py +0 -0
  75. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/commands/dispatch_workers.py +0 -0
  76. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/commands/drive.py +0 -0
  77. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/commands/drive_queue.py +0 -0
  78. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/commands/gate_a.py +0 -0
  79. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/commands/gates.py +0 -0
  80. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/commands/issues.py +0 -0
  81. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/commands/lifecycle.py +0 -0
  82. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/commands/merge.py +0 -0
  83. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/commands/milestone.py +0 -0
  84. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/commands/plan_followup.py +0 -0
  85. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/commands/plans.py +0 -0
  86. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/commands/portal.py +0 -0
  87. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/commands/release.py +0 -0
  88. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/commands/repo.py +0 -0
  89. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/commands/report.py +0 -0
  90. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/commands/review.py +0 -0
  91. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/commands/scorecard.py +0 -0
  92. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/commands/sessions.py +0 -0
  93. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/commands/setup.py +0 -0
  94. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/commands/status.py +0 -0
  95. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/commands/terminal.py +0 -0
  96. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/commands/test_gate.py +0 -0
  97. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/commands/tui.py +0 -0
  98. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/comments.py +0 -0
  99. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/config_reload.py +0 -0
  100. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/conflict_fix.py +0 -0
  101. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dao.py +0 -0
  102. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/__init__.py +0 -0
  103. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/fixture.py +0 -0
  104. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/index.html +0 -0
  105. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/server.py +0 -0
  106. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/terminal.py +0 -0
  107. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/.gitignore +0 -0
  108. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/components.json +0 -0
  109. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/dist/assets/Gallery-BoKs3mpY.js +0 -0
  110. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
  111. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/dist/assets/Terminal-CEsP08iX.js +0 -0
  112. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/dist/assets/index-CDHPlB6k.js +0 -0
  113. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
  114. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
  115. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
  116. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
  117. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
  118. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/dist/index.html +0 -0
  119. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
  120. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/dist/sw.js +0 -0
  121. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
  122. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
  123. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
  124. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
  125. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
  126. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
  127. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
  128. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
  129. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
  130. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
  131. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/eslint.config.js +0 -0
  132. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/index.html +0 -0
  133. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
  134. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/package-lock.json +0 -0
  135. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/package.json +0 -0
  136. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
  137. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/playwright.config.ts +0 -0
  138. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/postcss.config.js +0 -0
  139. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
  140. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
  141. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
  142. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/src/App.tsx +0 -0
  143. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/src/api/client.ts +0 -0
  144. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/src/api/generated.ts +0 -0
  145. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
  146. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
  147. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
  148. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
  149. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
  150. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
  151. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
  152. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
  153. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
  154. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
  155. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
  156. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
  157. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
  158. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
  159. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
  160. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
  161. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
  162. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
  163. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
  164. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
  165. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
  166. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
  167. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
  168. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
  169. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
  170. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
  171. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
  172. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
  173. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
  174. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
  175. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
  176. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
  177. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
  178. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
  179. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/src/index.css +0 -0
  180. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
  181. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
  182. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/src/main.tsx +0 -0
  183. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
  184. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
  185. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
  186. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
  187. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
  188. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
  189. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
  190. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
  191. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
  192. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
  193. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
  194. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
  195. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
  196. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
  197. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
  198. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
  199. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
  200. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
  201. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
  202. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
  203. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
  204. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/src/test-setup.ts +0 -0
  205. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
  206. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/tailwind.config.js +0 -0
  207. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/tsconfig.json +0 -0
  208. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/tsconfig.node.json +0 -0
  209. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dashboard/webapp/vite.config.ts +0 -0
  210. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/db.py +0 -0
  211. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dead_end.py +0 -0
  212. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/deploy/README.md +0 -0
  213. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/deploy/coord-agent.service +0 -0
  214. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/deploy/coord-db-backup.service +0 -0
  215. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/deploy/coord-db-backup.sh +0 -0
  216. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/deploy/coord-db-backup.timer +0 -0
  217. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/deploy/coord-drive-queue.service +0 -0
  218. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/deploy/coord-drive-queue.timer +0 -0
  219. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/deploy/coord-notify.service +0 -0
  220. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/deploy/coord-notify.timer +0 -0
  221. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/deploy/coord-release-propagate.service +0 -0
  222. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/deploy/coord-release-propagate.timer +0 -0
  223. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/deploy/coord-release-window.service +0 -0
  224. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/deploy/coord-release-window.timer +0 -0
  225. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/deploy/coord-serve.service +0 -0
  226. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/deploy/coord-web-dist-build.service +0 -0
  227. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/deploy/coord-web-dist-build.timer +0 -0
  228. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/deploy/coord-web.service +0 -0
  229. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/deploy_manifest.py +0 -0
  230. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/deploy_units.py +0 -0
  231. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/deps.py +0 -0
  232. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/diagnose.py +0 -0
  233. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dispatch.py +0 -0
  234. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/dist_name.py +0 -0
  235. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/drive.py +0 -0
  236. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/drive_queue.py +0 -0
  237. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/drive_state.py +0 -0
  238. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/events.py +0 -0
  239. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/failure_class.py +0 -0
  240. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/filelock.py +0 -0
  241. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/fleet_config_health.py +0 -0
  242. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/freshness.py +0 -0
  243. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/gate_a.py +0 -0
  244. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/gate_b.py +0 -0
  245. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/gate_snapshot.py +0 -0
  246. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/gates.py +0 -0
  247. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/goal.py +0 -0
  248. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/graph_health.py +0 -0
  249. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/health/__init__.py +0 -0
  250. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/health/aggregate.py +0 -0
  251. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/health/checks/__init__.py +0 -0
  252. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/health/checks/agent_install.py +0 -0
  253. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/health/checks/cargo_targets.py +0 -0
  254. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/health/checks/claude_binary.py +0 -0
  255. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/health/checks/deploy_lane_facts.py +0 -0
  256. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/health/checks/disk.py +0 -0
  257. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/health/checks/fleet_board.py +0 -0
  258. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  259. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/health/checks/fleet_phantom.py +0 -0
  260. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/health/checks/fleet_unit_drift.py +0 -0
  261. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/health/checks/graph.py +0 -0
  262. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/health/checks/graphify_cli.py +0 -0
  263. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/health/checks/index_lock.py +0 -0
  264. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/health/checks/plan_usage.py +0 -0
  265. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/health/checks/repo_state.py +0 -0
  266. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/health/checks/spawned_coord.py +0 -0
  267. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/health/checks/timer_active.py +0 -0
  268. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/health/checks/toolchain.py +0 -0
  269. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/health/checks/unit_drift.py +0 -0
  270. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/health/checks/unit_enablement.py +0 -0
  271. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/health/checks/worktrees.py +0 -0
  272. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/health/cli.py +0 -0
  273. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/health/context.py +0 -0
  274. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/health/fleet_snapshot.py +0 -0
  275. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/health/models.py +0 -0
  276. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/health/pypi.py +0 -0
  277. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/health/registry.py +0 -0
  278. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/health/render.py +0 -0
  279. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/health/units.py +0 -0
  280. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/hooks.py +0 -0
  281. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/housekeeping.py +0 -0
  282. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/interactive.py +0 -0
  283. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/issue_store.py +0 -0
  284. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/liveness_auditor.py +0 -0
  285. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/machine_pause.py +0 -0
  286. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/milestone_chat.py +0 -0
  287. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/milestone_dispatch.py +0 -0
  288. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/milestone_gate.py +0 -0
  289. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/milestone_order.py +0 -0
  290. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/mock_author.py +0 -0
  291. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/models.py +0 -0
  292. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/network.py +0 -0
  293. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/new_issue_chat.py +0 -0
  294. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/notifier/__init__.py +0 -0
  295. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/notifier/baseline.py +0 -0
  296. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/notifier/cli.py +0 -0
  297. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/notifier/collect.py +0 -0
  298. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/notifier/digest.py +0 -0
  299. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/notifier/models.py +0 -0
  300. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/notifier/predicate.py +0 -0
  301. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/notifier/service.py +0 -0
  302. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/notifier/store.py +0 -0
  303. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/notifier/transport.py +0 -0
  304. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/notify.py +0 -0
  305. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/openapi.py +0 -0
  306. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/overlap_fence.py +0 -0
  307. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/overlap_predict.py +0 -0
  308. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/parentage.py +0 -0
  309. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/parentage_github.py +0 -0
  310. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/pipeline.py +0 -0
  311. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/plan_parser.py +0 -0
  312. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/plans.py +0 -0
  313. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/platform_paths.py +0 -0
  314. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/portal_bridge.py +0 -0
  315. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/portal_store.py +0 -0
  316. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/portal_sync.py +0 -0
  317. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/pr_body_lint.py +0 -0
  318. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/prereqs.py +0 -0
  319. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/progress.py +0 -0
  320. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/providers/__init__.py +0 -0
  321. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/providers/base.py +0 -0
  322. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/providers/claude.py +0 -0
  323. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/providers/claude_pty.py +0 -0
  324. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/providers/opencode.py +0 -0
  325. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/queue_diagnose.py +0 -0
  326. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/reconcile.py +0 -0
  327. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/reconcile_tick.py +0 -0
  328. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/refine_chat.py +0 -0
  329. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/release_cordon.py +0 -0
  330. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/release_propagate.py +0 -0
  331. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/release_verify.py +0 -0
  332. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/release_window.py +0 -0
  333. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/repo_edit.py +0 -0
  334. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/repo_onboard.py +0 -0
  335. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/reports.py +0 -0
  336. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/revalidate.py +0 -0
  337. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/review.py +0 -0
  338. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/scorecard.py +0 -0
  339. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/serve_app.py +0 -0
  340. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/skills/portal-followup/SKILL.md +0 -0
  341. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/skills/update-issue/SKILL.md +0 -0
  342. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/smoke.py +0 -0
  343. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/spend_ceiling.py +0 -0
  344. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/split_work.py +0 -0
  345. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/stage_projection.py +0 -0
  346. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/state.py +0 -0
  347. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/test_author.py +0 -0
  348. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/test_chat.py +0 -0
  349. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/test_orchestrator.py +0 -0
  350. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/test_report.py +0 -0
  351. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/tui_release.py +0 -0
  352. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/usage.py +0 -0
  353. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/usage_limits.py +0 -0
  354. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/usage_rollup.py +0 -0
  355. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coord/worker_events.py +0 -0
  356. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/coordinator.example.yml +0 -0
  357. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/deploy/coord-agent.service +0 -0
  358. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/deploy/coord-db-backup.service +0 -0
  359. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/deploy/coord-db-backup.sh +0 -0
  360. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/deploy/coord-db-backup.timer +0 -0
  361. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/deploy/coord-drive-queue.service +0 -0
  362. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/deploy/coord-drive-queue.timer +0 -0
  363. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/deploy/coord-notify.service +0 -0
  364. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/deploy/coord-notify.timer +0 -0
  365. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/deploy/coord-release-propagate.service +0 -0
  366. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/deploy/coord-release-propagate.timer +0 -0
  367. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/deploy/coord-release-window.service +0 -0
  368. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/deploy/coord-release-window.timer +0 -0
  369. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/deploy/coord-serve.service +0 -0
  370. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/deploy/coord-web-dist-build.service +0 -0
  371. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/deploy/coord-web-dist-build.sh +0 -0
  372. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/deploy/coord-web-dist-build.timer +0 -0
  373. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/deploy/coord-web-rollback.sh +0 -0
  374. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/deploy/coord-web.service +0 -0
  375. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/deploy/node-shim.sh +0 -0
  376. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/docs/AGENT_OPERATIONS.md +0 -0
  377. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/docs/ARCHITECTURE.md +0 -0
  378. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/docs/ARCH_SECURITY_GATES.md +0 -0
  379. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/docs/COCKPIT.md +0 -0
  380. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/docs/CONTROL_CENTER.md +0 -0
  381. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/docs/COST_DISCIPLINE.md +0 -0
  382. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/docs/CROSS_PLATFORM.md +0 -0
  383. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/docs/CUSTOMER_PORTAL.md +0 -0
  384. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/docs/DRIVE_QUEUE.md +0 -0
  385. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/docs/EPHEMERAL_WORKERS.md +0 -0
  386. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/docs/FORGE_MIGRATION.md +0 -0
  387. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/docs/GRAPHIFY_SETUP.md +0 -0
  388. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/docs/ISSUE_GUIDANCE.md +0 -0
  389. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/docs/MAC_MINI.md +0 -0
  390. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  391. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/docs/NOTIFIER.md +0 -0
  392. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/docs/OPENCODE_VERIFICATION.md +0 -0
  393. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/docs/OPERATING_GOTCHAS.md +0 -0
  394. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/docs/ORACLE_LOOP.md +0 -0
  395. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/docs/PHONE_WEBAPP.md +0 -0
  396. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/docs/PIPELINE_V2.md +0 -0
  397. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/docs/PLATFORM_EVOLUTION.md +0 -0
  398. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/docs/SECOND_BACKEND.md +0 -0
  399. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/docs/STORE_SERVICE.md +0 -0
  400. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  401. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/docs/WEB_CONTROL_CENTER.md +0 -0
  402. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/docs/WSL_WINDOWS_WORKER.md +0 -0
  403. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/docs/mocks/web/README.md +0 -0
  404. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/docs/mocks/web/_tokens.css +0 -0
  405. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/docs/mocks/web/issue-detail.html +0 -0
  406. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/docs/mocks/web/pipeline-narrow.html +0 -0
  407. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/docs/mocks/web/pipeline-wide.html +0 -0
  408. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/graphify-out/.gitignore +0 -0
  409. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/install-agent.sh +0 -0
  410. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/pyproject.toml +0 -0
  411. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/scripts/audit_review_verdict_overrides.py +0 -0
  412. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  413. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/scripts/azure-workers/build-worker-image.sh +0 -0
  414. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/scripts/azure-workers/coordinator-machine.py +0 -0
  415. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/scripts/azure-workers/epic-down.sh +0 -0
  416. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/scripts/azure-workers/epic-up.sh +0 -0
  417. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/scripts/azure-workers/preflight.sh +0 -0
  418. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/scripts/azure-workers/provision-worker.sh +0 -0
  419. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  420. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  421. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/scripts/azure-workers/verify-github-token.sh +0 -0
  422. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/scripts/codegen.py +0 -0
  423. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/scripts/coord-test-runner.sh +0 -0
  424. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/scripts/drive-batch.sh +0 -0
  425. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/scripts/gen_board_fixture.py +0 -0
  426. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/scripts/next_release_tag.py +0 -0
  427. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/scripts/run_tests_in_populated_home.sh +0 -0
  428. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/scripts/run_tests_without_gh.sh +0 -0
  429. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/scripts/smoke_437_interactive.py +0 -0
  430. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/scripts/verify_878_review_capture.py +0 -0
  431. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/scripts/verify_release_published.py +0 -0
  432. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/scripts/verify_release_wheel.py +0 -0
  433. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/setup.cfg +0 -0
  434. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/SMOKE_SET.md +0 -0
  435. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/__init__.py +0 -0
  436. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  437. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/acceptance/ms-33/contract.md +0 -0
  438. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/acceptance/ms-33/manifest.yml +0 -0
  439. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  440. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  441. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  442. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  443. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/acceptance/ms-37/conftest.py +0 -0
  444. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/acceptance/ms-37/contract.md +0 -0
  445. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/acceptance/ms-37/manifest.yml +0 -0
  446. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  447. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  448. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/acceptance/ms-38/contract.md +0 -0
  449. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/acceptance/ms-38/manifest.yml +0 -0
  450. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  451. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  452. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  453. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  454. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  455. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  456. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  457. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  458. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  459. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  460. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/acceptance/ms-51/contract.md +0 -0
  461. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  462. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  463. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/acceptance/ms-51/manifest.yml +0 -0
  464. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  465. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/acceptance/ms-51/tsconfig.json +0 -0
  466. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
  467. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
  468. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/acceptance/ms-65/contract.md +0 -0
  469. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/acceptance/ms-65/manifest.yml +0 -0
  470. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
  471. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
  472. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
  473. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
  474. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
  475. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
  476. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
  477. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
  478. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  479. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/conftest.py +0 -0
  480. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/fixtures/board-pipeline-basic.json +0 -0
  481. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  482. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  483. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  484. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  485. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/fixtures/playwright/all_pass.json +0 -0
  486. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  487. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/fixtures/playwright/mixed_fail.json +0 -0
  488. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  489. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  490. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/fixtures/playwright/skip.json +0 -0
  491. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/fixtures/playwright/truncated.json +0 -0
  492. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  493. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  494. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  495. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  496. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  497. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  498. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  499. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  500. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_acceptance.py +0 -0
  501. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_acceptance_drivers.py +0 -0
  502. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_agent.py +0 -0
  503. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_agent_api_error.py +0 -0
  504. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_agent_app.py +0 -0
  505. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_agent_branch_base.py +0 -0
  506. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_agent_branch_capture.py +0 -0
  507. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_agent_config_free_1712.py +0 -0
  508. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_agent_deploy_units_endpoint.py +0 -0
  509. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_agent_dirty_worktree.py +0 -0
  510. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  511. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_agent_graph_self_heal.py +0 -0
  512. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_agent_health_h3.py +0 -0
  513. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_agent_idle_restart.py +0 -0
  514. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_agent_push_failure.py +0 -0
  515. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_agent_reap.py +0 -0
  516. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_agent_repos_and_pull.py +0 -0
  517. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_agent_restart_services_endpoint.py +0 -0
  518. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_agent_startup_diagnostics.py +0 -0
  519. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_agent_update.py +0 -0
  520. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_agent_update_bluegreen.py +0 -0
  521. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_agent_usage_limit.py +0 -0
  522. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_agent_zero_commit.py +0 -0
  523. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_ambient_home_isolation.py +0 -0
  524. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_approve_reject_plan.py +0 -0
  525. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_approve_usage_gate.py +0 -0
  526. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_assignment_already_recorded_daemon.py +0 -0
  527. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_audit_log.py +0 -0
  528. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_audit_outcome.py +0 -0
  529. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_audit_query.py +0 -0
  530. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_auto_loop.py +0 -0
  531. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_auto_release_publish_2035.py +0 -0
  532. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_base_checkout_restore.py +0 -0
  533. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_block_log.py +0 -0
  534. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_board_cap_762.py +0 -0
  535. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_board_fixture.py +0 -0
  536. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_board_read_path.py +0 -0
  537. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_board_service.py +0 -0
  538. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_board_state.py +0 -0
  539. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_board_wire.py +0 -0
  540. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_brain.py +0 -0
  541. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_branch_model.py +0 -0
  542. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_bug_intake.py +0 -0
  543. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_build_worker_image_env_update.py +0 -0
  544. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_cargo_cache.py +0 -0
  545. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_ci_acceptance_gate_1950.py +0 -0
  546. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_ci_parity_2091.py +0 -0
  547. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_claim.py +0 -0
  548. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_cli_acceptance.py +0 -0
  549. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_cli_assign.py +0 -0
  550. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  551. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_cli_assign_interactive_remote.py +0 -0
  552. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_cli_assign_provider.py +0 -0
  553. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  554. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_cli_audit.py +0 -0
  555. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_cli_chat_continue.py +0 -0
  556. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_cli_decide.py +0 -0
  557. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_cli_diagnose_config_provenance.py +0 -0
  558. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_cli_diagnose_graph.py +0 -0
  559. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_cli_doctor.py +0 -0
  560. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_cli_doctor_config_free_1801.py +0 -0
  561. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  562. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_cli_drive.py +0 -0
  563. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_cli_escalate.py +0 -0
  564. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_cli_fix_headless_review.py +0 -0
  565. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_cli_gate_a.py +0 -0
  566. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_cli_install_drift.py +0 -0
  567. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_cli_install_skills.py +0 -0
  568. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_cli_issue_create_label.py +0 -0
  569. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_cli_issue_reopen.py +0 -0
  570. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_cli_merge.py +0 -0
  571. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_cli_milestone_assign.py +0 -0
  572. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_cli_milestone_capture.py +0 -0
  573. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_cli_milestone_chat_add_child.py +0 -0
  574. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_cli_milestone_dispatch.py +0 -0
  575. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_cli_milestone_gate_b.py +0 -0
  576. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_cli_milestone_gate_c.py +0 -0
  577. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_cli_milestone_order.py +0 -0
  578. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  579. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_cli_milestone_ship.py +0 -0
  580. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_cli_network.py +0 -0
  581. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_cli_new_issue_chat.py +0 -0
  582. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_cli_plans.py +0 -0
  583. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_cli_portal.py +0 -0
  584. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_cli_pull_artifact.py +0 -0
  585. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_cli_queue.py +0 -0
  586. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_cli_reattach_sessions.py +0 -0
  587. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_cli_refine_board.py +0 -0
  588. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_cli_release_preflight.py +0 -0
  589. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_cli_release_propagate.py +0 -0
  590. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_cli_release_window.py +0 -0
  591. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_cli_repo_2220.py +0 -0
  592. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_cli_scorecard.py +0 -0
  593. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_cli_set_review_findings.py +0 -0
  594. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_cli_status_advisory_terminal.py +0 -0
  595. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_cli_status_merge_queue.py +0 -0
  596. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_cli_status_provider.py +0 -0
  597. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_cli_status_review_finalizing.py +0 -0
  598. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_cli_status_test_failed_tag.py +0 -0
  599. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_cli_status_usage_limit.py +0 -0
  600. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_cli_sync_comments_873.py +0 -0
  601. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_cli_test_plan.py +0 -0
  602. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_cli_track.py +0 -0
  603. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_cli_tui_update.py +0 -0
  604. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_cli_wait.py +0 -0
  605. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_client_base_install.py +0 -0
  606. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_comments.py +0 -0
  607. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_completion_summary.py +0 -0
  608. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_config.py +0 -0
  609. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_config_acceptance.py +0 -0
  610. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_config_audit.py +0 -0
  611. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_config_pricing.py +0 -0
  612. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  613. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_config_usage_gate.py +0 -0
  614. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_conflict_fix.py +0 -0
  615. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_coord_test.py +0 -0
  616. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_coord_test_runner_baseline.py +0 -0
  617. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_coord_test_runner_populated_home.py +0 -0
  618. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_coord_test_runner_routing.py +0 -0
  619. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_coord_test_runner_toolchain.py +0 -0
  620. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_coord_web_sse_restart_live.py +0 -0
  621. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_coordinator_machine.py +0 -0
  622. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_cross_platform_imports.py +0 -0
  623. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_dashboard.py +0 -0
  624. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_dashboard_fixture.py +0 -0
  625. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_dashboard_terminal.py +0 -0
  626. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_dashboard_terminal_live.py +0 -0
  627. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_db.py +0 -0
  628. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_dead_end.py +0 -0
  629. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_deploy_coord_db_backup.py +0 -0
  630. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_deploy_coord_web_dist.py +0 -0
  631. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_deploy_coord_web_rollback.py +0 -0
  632. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_deploy_drive_queue_unit.py +0 -0
  633. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_deploy_manifest.py +0 -0
  634. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_deploy_units_lane.py +0 -0
  635. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_deploy_web_unit.py +0 -0
  636. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_deps.py +0 -0
  637. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_diagnose.py +0 -0
  638. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_dispatch.py +0 -0
  639. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_dispatch_target_validation.py +0 -0
  640. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_dist_name.py +0 -0
  641. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_done_housekeeping.py +0 -0
  642. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_drive.py +0 -0
  643. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_drive_queue.py +0 -0
  644. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_drive_state.py +0 -0
  645. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_drive_tmux.py +0 -0
  646. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_epic_up_capability_detection.py +0 -0
  647. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  648. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_epic_up_image_provenance.py +0 -0
  649. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_errors.py +0 -0
  650. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_events.py +0 -0
  651. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_failure_class.py +0 -0
  652. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_filelock.py +0 -0
  653. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  654. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_fix_of_force_override.py +0 -0
  655. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_fleet_config_health.py +0 -0
  656. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_fleet_health_probes.py +0 -0
  657. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_fleet_health_snapshot.py +0 -0
  658. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_freshness.py +0 -0
  659. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_gate_a.py +0 -0
  660. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_gate_b.py +0 -0
  661. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_gate_snapshot_staleness.py +0 -0
  662. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_gates.py +0 -0
  663. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  664. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_generated_types_fixture.py +0 -0
  665. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_github_ops.py +0 -0
  666. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_goal.py +0 -0
  667. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_graph_health.py +0 -0
  668. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_graph_selfheal_absent_2237.py +0 -0
  669. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_handoff.py +0 -0
  670. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_health_checks.py +0 -0
  671. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_health_cli.py +0 -0
  672. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_health_cli_graph.py +0 -0
  673. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_health_config.py +0 -0
  674. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_health_context.py +0 -0
  675. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_health_deploy_lane_facts.py +0 -0
  676. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_health_incident_regression.py +0 -0
  677. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_health_pypi.py +0 -0
  678. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_health_registry.py +0 -0
  679. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_health_timer_active.py +0 -0
  680. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_health_toolchain.py +0 -0
  681. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_health_unit_drift.py +0 -0
  682. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_health_unit_enablement.py +0 -0
  683. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_hooks.py +0 -0
  684. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_human_attended_437.py +0 -0
  685. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_init.py +0 -0
  686. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_integration.py +0 -0
  687. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_interactive_briefing_echo.py +0 -0
  688. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_interactive_prefill_state.py +0 -0
  689. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_interactive_session_relaunch.py +0 -0
  690. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_interactive_test_verdict_backstop.py +0 -0
  691. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_interactive_token_attribution.py +0 -0
  692. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_interactive_worktree.py +0 -0
  693. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_issue_store_seam.py +0 -0
  694. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_liveness_auditor.py +0 -0
  695. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_liveness_notify.py +0 -0
  696. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_machine_pause.py +0 -0
  697. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_merge_verify.py +0 -0
  698. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_milestone_chat.py +0 -0
  699. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_milestone_dispatch.py +0 -0
  700. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_milestone_gate.py +0 -0
  701. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_milestone_order.py +0 -0
  702. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_milestone_seam.py +0 -0
  703. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_mock_author.py +0 -0
  704. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_model_tiering.py +0 -0
  705. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_models.py +0 -0
  706. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_models_config_labels.py +0 -0
  707. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_needs_attention.py +0 -0
  708. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_network.py +0 -0
  709. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_new_issue_chat.py +0 -0
  710. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_next_release_tag.py +0 -0
  711. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_no_direct_gh_calls.py +0 -0
  712. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_node_shim.py +0 -0
  713. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_notifier_baseline.py +0 -0
  714. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_notifier_cli.py +0 -0
  715. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_notifier_collect.py +0 -0
  716. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_notifier_config.py +0 -0
  717. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_notifier_drive_seam.py +0 -0
  718. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_notifier_isolation.py +0 -0
  719. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_notifier_predicate.py +0 -0
  720. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_notifier_quiet_hours.py +0 -0
  721. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_notifier_service.py +0 -0
  722. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_notify.py +0 -0
  723. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_notify_drain.py +0 -0
  724. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_openapi.py +0 -0
  725. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_operational_defaults.py +0 -0
  726. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_overlap_fence.py +0 -0
  727. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_overlap_predict.py +0 -0
  728. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_packaged_deploy_units.py +0 -0
  729. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_parentage.py +0 -0
  730. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_paste_landed.py +0 -0
  731. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_pipeline.py +0 -0
  732. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_plan_followup_approve_plan_command.py +0 -0
  733. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_plan_followup_pr_command.py +0 -0
  734. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_plan_followup_review_command.py +0 -0
  735. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_plan_only.py +0 -0
  736. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_plan_parser.py +0 -0
  737. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_platform_paths.py +0 -0
  738. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_portal_bridge.py +0 -0
  739. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_portal_config.py +0 -0
  740. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_portal_sync.py +0 -0
  741. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_pr_body_lint.py +0 -0
  742. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_prereqs.py +0 -0
  743. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_production_db_guard.py +0 -0
  744. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_progress.py +0 -0
  745. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_provider_seam.py +0 -0
  746. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_providers.py +0 -0
  747. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_providers_config_labels.py +0 -0
  748. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_providers_pty.py +0 -0
  749. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_quiet_hours.py +0 -0
  750. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_quiet_hours_store_2146.py +0 -0
  751. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_reap_merged_sessions.py +0 -0
  752. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_reap_stale_interactive_tick.py +0 -0
  753. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_reconcile.py +0 -0
  754. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_reconcile_branch.py +0 -0
  755. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_reconcile_completions.py +0 -0
  756. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_reconcile_merges.py +0 -0
  757. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_reconcile_no_agent_record.py +0 -0
  758. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_reconcile_tick.py +0 -0
  759. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_reconcile_usage_limit_done.py +0 -0
  760. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_refine_chat.py +0 -0
  761. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_release_cordon_2101.py +0 -0
  762. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  763. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_release_cordon_deadlock_2240.py +0 -0
  764. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_release_propagate.py +0 -0
  765. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_release_unified_1242.py +0 -0
  766. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_release_verify.py +0 -0
  767. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_release_window.py +0 -0
  768. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_remote_auto_prune.py +0 -0
  769. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_remote_interactive_reaper.py +0 -0
  770. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_repo_edit_2220.py +0 -0
  771. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_repo_graph_fleet_2237.py +0 -0
  772. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_repo_onboard_2220.py +0 -0
  773. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_report_result_push.py +0 -0
  774. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_reports.py +0 -0
  775. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_retry.py +0 -0
  776. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_retry_advisory_1606.py +0 -0
  777. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_retry_type_1636.py +0 -0
  778. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_revalidate.py +0 -0
  779. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_review.py +0 -0
  780. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_review_end_review_without_verdict.py +0 -0
  781. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_review_parse_failure_diagnostic.py +0 -0
  782. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_review_reaffirm.py +0 -0
  783. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_review_state.py +0 -0
  784. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_review_verdict_backstop.py +0 -0
  785. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_review_verdict_override_audit.py +0 -0
  786. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_review_verdict_relay.py +0 -0
  787. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_review_zero_commits.py +0 -0
  788. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_scoped_review_wiring.py +0 -0
  789. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_scorecard.py +0 -0
  790. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_serve.py +0 -0
  791. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_serve_app_board_trim.py +0 -0
  792. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_session.py +0 -0
  793. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_slice_issue_attribution.py +0 -0
  794. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_smoke.py +0 -0
  795. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_smoke_live_checkout_restore.py +0 -0
  796. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_smoke_workflow.py +0 -0
  797. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_spend_ceiling.py +0 -0
  798. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_spend_ceiling_coordinator.py +0 -0
  799. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_split.py +0 -0
  800. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_split_work.py +0 -0
  801. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_stage_projection.py +0 -0
  802. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_stalled_pipeline.py +0 -0
  803. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_state.py +0 -0
  804. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_state_review_findings_daemon.py +0 -0
  805. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_status_fleet_footer.py +0 -0
  806. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_stop_1567.py +0 -0
  807. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_stuck.py +0 -0
  808. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_terminal_command.py +0 -0
  809. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_test_author.py +0 -0
  810. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_test_chat.py +0 -0
  811. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_test_orchestrator.py +0 -0
  812. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_test_report.py +0 -0
  813. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_test_verdict_parsing.py +0 -0
  814. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_test_verdict_transcript_floor.py +0 -0
  815. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_thin_client_board_audit.py +0 -0
  816. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_thin_client_config_load_1080.py +0 -0
  817. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_thin_client_daemon_routing_906.py +0 -0
  818. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_tmux_host.py +0 -0
  819. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_tmux_session.py +0 -0
  820. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_transcript_floor.py +0 -0
  821. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_usage.py +0 -0
  822. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_usage_limits.py +0 -0
  823. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_usage_rollup.py +0 -0
  824. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_venv_live_install_2121.py +0 -0
  825. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_version_single_source.py +0 -0
  826. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_watch.py +0 -0
  827. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  828. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_worker_events.py +0 -0
  829. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_worker_image_pin_sync.py +0 -0
  830. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_worker_safety.py +0 -0
  831. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_worker_test_scoping.py +0 -0
  832. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_worktree.py +0 -0
  833. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  834. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tui/Cargo.lock +0 -0
  835. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tui/Cargo.toml +0 -0
  836. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tui/cargo-config-local-quadraui.toml.example +0 -0
  837. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tui/src/app/audit.rs +0 -0
  838. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tui/src/app/chat.rs +0 -0
  839. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tui/src/app/data.rs +0 -0
  840. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tui/src/app/dialogs.rs +0 -0
  841. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tui/src/app/drive.rs +0 -0
  842. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tui/src/app/drive_queue.rs +0 -0
  843. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tui/src/app/escalation.rs +0 -0
  844. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tui/src/app/fleet_health.rs +0 -0
  845. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tui/src/app/fleet_sessions.rs +0 -0
  846. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tui/src/app/fleet_terminals.rs +0 -0
  847. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tui/src/app/format.rs +0 -0
  848. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tui/src/app/milestone_dag.rs +0 -0
  849. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tui/src/app/msv.rs +0 -0
  850. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tui/src/app/pipeline.rs +0 -0
  851. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tui/src/app/plans.rs +0 -0
  852. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tui/src/app/reports.rs +0 -0
  853. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tui/src/app/sessions.rs +0 -0
  854. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tui/src/app/settings_ui.rs +0 -0
  855. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tui/src/app/sidebar.rs +0 -0
  856. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tui/src/app/terminal.rs +0 -0
  857. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tui/src/app/types.rs +0 -0
  858. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tui/src/app/workspace.rs +0 -0
  859. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tui/src/bin/gtk.rs +0 -0
  860. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tui/src/commands.rs +0 -0
  861. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tui/src/lib.rs +0 -0
  862. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tui/src/main.rs +0 -0
  863. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tui/src/settings.rs +0 -0
  864. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tui/tests/acceptance.rs +0 -0
  865. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/tui/tests/cli.rs +0 -0
  866. {code_coordinator-0.5.142 → code_coordinator-0.5.145}/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.142
3
+ Version: 0.5.145
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.142
3
+ Version: 0.5.145
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.142",
2
+ "tag": "0.5.145",
3
3
  "distance": 0,
4
- "node": "gf633cd59c13444ede9e9471099a848d9bd3587f4",
4
+ "node": "g2c4967683cf16fc253e1af6018babca87d6eb43a",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-18"
@@ -129,6 +129,13 @@ class GitHubCi:
129
129
  _jobs_cache: dict[tuple[str, str], tuple[float, list[JobRun]]] = field(
130
130
  default_factory=dict
131
131
  )
132
+ # #2388: repo -> (fetched_at, required context names or None). Keyed by
133
+ # repo alone, same reasoning as `_workflow_cache` — required contexts are
134
+ # a branch-protection property of the repo's default branch, not of any
135
+ # particular PR.
136
+ _required_contexts_cache: dict[str, tuple[float, frozenset[str] | None]] = field(
137
+ default_factory=dict
138
+ )
132
139
 
133
140
  @property
134
141
  def is_available(self) -> bool:
@@ -360,7 +367,7 @@ class GitHubCi:
360
367
  return [_unreadable_check(repo, number, str(e))]
361
368
  if not isinstance(raw, list):
362
369
  return [_unreadable_check(repo, number, "gh pr checks returned non-list JSON")]
363
- return [
370
+ checks = [
364
371
  CheckRun(
365
372
  name=str(entry.get("name", "")),
366
373
  status=_status_from_bucket(str(entry.get("bucket", ""))),
@@ -373,6 +380,32 @@ class GitHubCi:
373
380
  for entry in raw
374
381
  if isinstance(entry, dict)
375
382
  ]
383
+ # #2388: narrow to what branch protection actually REQUIRES, when
384
+ # that's determinable — a repo can report far more `gh pr checks`
385
+ # entries than GitHub's own required list (this repo: 9 reported, 5
386
+ # required), and every merge-gate predicate downstream of this
387
+ # method (`failed_checks`, `in_flight_checks`, `checks_are_stale`)
388
+ # otherwise waits on advisory jobs GitHub itself doesn't. A hung
389
+ # advisory job (e.g. an unconditional Playwright/Chromium install
390
+ # with no timeout) would then block `coord merge` indefinitely even
391
+ # though the PR is already `MERGEABLE`. `_required_contexts` returns
392
+ # `None` (never filters) when it can't determine the required list
393
+ # — #1525's bias: unknown reads as "wait on everything reported",
394
+ # not as a free pass to stop waiting on something that might matter.
395
+ required = self._required_contexts(repo)
396
+ if required:
397
+ checks = [c for c in checks if c.name in required]
398
+ return checks
399
+
400
+ def _required_contexts(self, repo: str) -> frozenset[str] | None:
401
+ now = time.time()
402
+ cached = self._required_contexts_cache.get(repo)
403
+ if cached is not None and (now - cached[0]) < self.cache_ttl:
404
+ return cached[1]
405
+ contexts = github_ops.get_required_status_check_contexts(repo)
406
+ result = frozenset(contexts) if contexts else None
407
+ self._required_contexts_cache[repo] = (now, result)
408
+ return result
376
409
 
377
410
 
378
411
  def _unreadable_check(repo: str, number: int, detail: str) -> CheckRun:
@@ -946,7 +946,7 @@ class PipelineConfig:
946
946
  worker that gives up on a **semantic** conflict (it emits the
947
947
  ``coord:conflict=semantic`` marker on its ``STUCK:`` line) gets ONE
948
948
  second attempt from a stronger model
949
- (``semantic_conflict_model``, default ``"fable"``) before the merge
949
+ (``semantic_conflict_model``, default ``"opus"``) before the merge
950
950
  entry is parked ``HUMAN_REQUIRED``. **Defaults to ``False``** — this
951
951
  ships dark until it earns trust on real conflicts. The escalated
952
952
  attempt consumes the existing one-per-entry conflict-fix retry cap, so
@@ -986,7 +986,7 @@ class PipelineConfig:
986
986
  escalate_fix_model: bool = True
987
987
  # #1291 — DEFAULT OFF. See the class docstring.
988
988
  escalate_semantic_conflicts: bool = False
989
- semantic_conflict_model: str = "fable"
989
+ semantic_conflict_model: str = "opus"
990
990
  # #1478 — DEFAULT OFF. See the class docstring.
991
991
  auto_dispatch_stalled: bool = False
992
992
  attention_thresholds: dict[str, float] = field(
@@ -1540,6 +1540,46 @@ def get_repo_workflow_count(repo: str) -> int:
1540
1540
  return data["total_count"]
1541
1541
 
1542
1542
 
1543
+ def get_required_status_check_contexts(repo: str) -> list[str] | None:
1544
+ """Required status-check context names for *repo*'s default branch (#2388).
1545
+
1546
+ Backs the merge gate's "don't wait on an advisory check" filter — a repo
1547
+ can report many more `gh pr checks` entries than GitHub's own branch
1548
+ protection actually requires (this repo: 9 reported, 5 required), and a
1549
+ slow/hung advisory job (an unconditional Playwright/Chromium install
1550
+ step, say) has no business blocking `coord merge` when GitHub itself
1551
+ already considers the PR mergeable.
1552
+
1553
+ Returns ``None`` — never an empty list treated as "nothing required" —
1554
+ when the default branch has no protection configured, or any read
1555
+ step fails (auth, rate-limit, malformed response, `gh` missing). #1525's
1556
+ bias applies here too: "couldn't determine what's required" must read as
1557
+ "don't filter, wait on everything reported", not as a free pass to stop
1558
+ waiting on checks that might in fact be required. Only an actually
1559
+ non-empty ``required_status_checks.contexts`` list narrows the gate.
1560
+ """
1561
+ try:
1562
+ repo_data = _gh_json("api", f"repos/{repo}", default=None)
1563
+ if not isinstance(repo_data, dict):
1564
+ return None
1565
+ default_branch = repo_data.get("default_branch")
1566
+ if not isinstance(default_branch, str) or not default_branch:
1567
+ return None
1568
+ protection = _gh_json(
1569
+ "api", f"repos/{repo}/branches/{default_branch}/protection",
1570
+ default=None,
1571
+ )
1572
+ except (FileNotFoundError, subprocess.TimeoutExpired, RuntimeError):
1573
+ return None
1574
+ if not isinstance(protection, dict):
1575
+ return None
1576
+ contexts = protection.get("required_status_checks", {})
1577
+ contexts = contexts.get("contexts") if isinstance(contexts, dict) else None
1578
+ if not isinstance(contexts, list) or not contexts:
1579
+ return None
1580
+ return [str(c) for c in contexts]
1581
+
1582
+
1543
1583
  def get_pr_checks(repo: str, number: int) -> list[dict]:
1544
1584
  """Return ``gh pr checks``' raw check-run list for PR *number*.
1545
1585
 
@@ -1588,6 +1588,43 @@ def _ci_unreadable_reason(failed: "list[CheckRun]") -> str | None:
1588
1588
  )
1589
1589
 
1590
1590
 
1591
+ # #2380: a bare check-list FETCH failure (`_ci_unreadable_reason`, above) has
1592
+ # TWO readings, exactly like `checks == []` already does (#1877): "GitHub is
1593
+ # genuinely unreachable right now" (real, self-healing — keep retrying), and
1594
+ # "this PR is DIRTY/CONFLICTING against its base, so GitHub can never build a
1595
+ # merge ref for it and `gh pr checks` has nothing to read" (definitive,
1596
+ # self-*never*-healing — no amount of retrying a CI read produces CI that
1597
+ # will never run). The two are indistinguishable from the check list alone;
1598
+ # GitHub's own `mergeable` field is the one thing that tells them apart, and
1599
+ # — unlike CI — it is always computable, conflict or not.
1600
+ def _pr_reports_conflicting(gh_ops, repo: str | None, number: int | None) -> bool:
1601
+ """True only when GitHub's live ``mergeable`` field reads ``CONFLICTING``
1602
+ for PR *number* — definitive, readable evidence a CI-unreadable park can
1603
+ never resolve on its own (#2380).
1604
+
1605
+ Duck-typed the same way the sibling #1877 checks-absent conflict probe
1606
+ (a few lines above each of this function's call sites) already is:
1607
+ ``gh_ops`` on the board/plan read path may be a :class:`~coord.gate_
1608
+ snapshot.GateSnapshot` with no ``check_pr_mergeable`` at all (#1336
1609
+ Invariant 1 — no third-party I/O there), and any of "no probe available",
1610
+ "the probe raised", or a ``True``/``None`` verdict (cleanly mergeable, or
1611
+ GitHub still computing it) must read as "not confirmed conflicting" —
1612
+ never as false evidence of one. This is intentionally narrower than the
1613
+ design's "``mergeable == CONFLICTING`` or ``mergeStateStatus == DIRTY``"
1614
+ framing: :func:`coord.github_ops.check_pr_mergeable` already reads GitHub's
1615
+ ``mergeable`` field, which is exactly ``CONFLICTING`` whenever
1616
+ ``mergeStateStatus`` would read ``DIRTY`` — one probe, one `gh` call,
1617
+ same readable-and-definitive signal either way.
1618
+ """
1619
+ probe = getattr(gh_ops, "check_pr_mergeable", None)
1620
+ if probe is None or not repo or number is None:
1621
+ return False
1622
+ try:
1623
+ return probe(repo, number) is False
1624
+ except Exception: # noqa: BLE001 — inconclusive, not a confirmed conflict
1625
+ return False
1626
+
1627
+
1591
1628
  def _ci_infra_reason(
1592
1629
  ci: "CiStore", repo: str, number: int, failed: "list[CheckRun]"
1593
1630
  ) -> str | None:
@@ -3820,21 +3857,36 @@ def _entry_gate_status(
3820
3857
  # `process()`'s own live reading.
3821
3858
  unreadable_reason = _ci_unreadable_reason(failed)
3822
3859
  if unreadable_reason is not None:
3823
- return PLAN_BLOCKED, unreadable_reason
3824
- summary = ", ".join(f"{c.name} ({c.conclusion})" for c in failed)
3825
- return PLAN_BLOCKED, f"CI failed: {summary}"
3826
- pending = in_flight_checks(checks)
3827
- if pending:
3828
- summary = ", ".join(c.name for c in pending)
3829
- return PLAN_BLOCKED, f"{CI_PENDING_PREFIX} {summary}"
3830
- if checks and _ci_checks_are_stale(
3831
- checks, gh_ops, entry.repo_github, entry.target_branch, smoke
3832
- ):
3833
- return (
3834
- PLAN_BLOCKED,
3835
- f"{CI_STALE_PREFIX} checks predate the current base — "
3836
- "re-run CI (`coord merge --revalidate`) before merging",
3837
- )
3860
+ # #2380: a fetch failure this uniform (EVERY failing check is
3861
+ # the synthetic unreadable stand-in) is ALSO exactly what a
3862
+ # DIRTY/CONFLICTING PR produces — see
3863
+ # :func:`_pr_reports_conflicting`'s docstring. Same "don't
3864
+ # block, mirror `process()`, let the real conflict surface"
3865
+ # response as the #1877 checks-absent case immediately above
3866
+ # deliberately NOT falling into the `pending`/staleness
3867
+ # checks below, which assume (per `_ci_checks_are_stale`'s
3868
+ # own docstring) a *non-empty, no-failed-entries* check list;
3869
+ # this one is neither.
3870
+ if not _pr_reports_conflicting(
3871
+ gh_ops, entry.repo_github, entry.pr_number
3872
+ ):
3873
+ return PLAN_BLOCKED, unreadable_reason
3874
+ else:
3875
+ summary = ", ".join(f"{c.name} ({c.conclusion})" for c in failed)
3876
+ return PLAN_BLOCKED, f"CI failed: {summary}"
3877
+ else:
3878
+ pending = in_flight_checks(checks)
3879
+ if pending:
3880
+ summary = ", ".join(c.name for c in pending)
3881
+ return PLAN_BLOCKED, f"{CI_PENDING_PREFIX} {summary}"
3882
+ if checks and _ci_checks_are_stale(
3883
+ checks, gh_ops, entry.repo_github, entry.target_branch, smoke
3884
+ ):
3885
+ return (
3886
+ PLAN_BLOCKED,
3887
+ f"{CI_STALE_PREFIX} checks predate the current base — "
3888
+ "re-run CI (`coord merge --revalidate`) before merging",
3889
+ )
3838
3890
  if gh_ops is not None and entry.pr_number:
3839
3891
  try:
3840
3892
  commit_messages = gh_ops.get_pr_commit_messages(
@@ -5176,6 +5228,25 @@ def process(
5176
5228
  # checked first, mirroring the live path's
5177
5229
  # ordering — see `_ci_unreadable_reason`.
5178
5230
  unreadable_reason = _ci_unreadable_reason(failed)
5231
+ # #2380: mirror the real path's straight-to-
5232
+ # conflict routing — see the identical check a
5233
+ # few lines above (#1877) and the live path's own
5234
+ # `_pr_reports_conflicting` branch. Preview-only:
5235
+ # never mutates `entry.state`, same as every
5236
+ # other branch in this dry-run block.
5237
+ if unreadable_reason is not None and _pr_reports_conflicting(
5238
+ gh_ops, entry.repo_github, entry.pr_number
5239
+ ):
5240
+ events.append(MergeEvent(
5241
+ entry, "conflict",
5242
+ f"(dry run) {entry.branch} conflicts "
5243
+ f"with {entry.target_branch} and its CI "
5244
+ "check-list fetch fails for the same "
5245
+ "reason — a real run would route to the "
5246
+ "#241 conflict-fix path rather than park "
5247
+ "on an unreadable CI retry (#2380)",
5248
+ ))
5249
+ continue
5179
5250
  infra_reason = None if unreadable_reason else _ci_infra_reason(
5180
5251
  ci, entry.repo_github, entry.pr_number, failed
5181
5252
  )
@@ -5528,6 +5599,39 @@ def process(
5528
5599
  # to evaluate unconditionally, every time.
5529
5600
  unreadable_reason = _ci_unreadable_reason(failed)
5530
5601
  if unreadable_reason is not None:
5602
+ # #2380: a check-list fetch failure this uniform
5603
+ # (EVERY failing check is the synthetic unreadable
5604
+ # stand-in) is ALSO exactly what GitHub reports for a
5605
+ # DIRTY/CONFLICTING PR — it can never build a merge
5606
+ # ref, so `gh pr checks` has nothing to read either.
5607
+ # `_pr_reports_conflicting` tells the two apart the
5608
+ # same way the #1877 checks-absent branch above does:
5609
+ # GitHub's own `mergeable` field, definitive and
5610
+ # always computable, conflict or not. When it reads
5611
+ # CONFLICTING, retrying the CI read can never
5612
+ # succeed — route STRAIGHT to the same `conflict`
5613
+ # event / `_dispatch_conflict_fixes` path a readable
5614
+ # CONFLICT merge-queue status already triggers
5615
+ # (#1474/#241), instead of parking behind a read that
5616
+ # will never resolve.
5617
+ if _pr_reports_conflicting(
5618
+ gh_ops, entry.repo_github, entry.pr_number
5619
+ ):
5620
+ msg = (
5621
+ f"merge conflict: GitHub reports PR "
5622
+ f"#{entry.pr_number} ({entry.branch}) as "
5623
+ f"CONFLICTING against {entry.target_branch} "
5624
+ "— no CI ever ran because GitHub cannot "
5625
+ "build a merge ref for a conflicting PR, so "
5626
+ "the check-list fetch failure was never a "
5627
+ "transient GitHub outage (#2380). Rebase "
5628
+ f"the branch onto {entry.target_branch} and "
5629
+ "resolve."
5630
+ )
5631
+ entry.state = CONFLICT
5632
+ entry.error = msg
5633
+ events.append(MergeEvent(entry, "conflict", msg))
5634
+ continue # #292: skip, don't halt the group
5531
5635
  if entry.ci_unreadable_reruns < MAX_CI_UNREADABLE_RERUNS:
5532
5636
  entry.ci_unreadable_reruns += 1
5533
5637
  _log.info(
@@ -31,6 +31,24 @@ from coord.ci_store import (
31
31
  )
32
32
 
33
33
 
34
+ # Captured before the autouse fixture below ever patches it, so a test that
35
+ # needs the REAL caching/lookup behavior can restore it for just itself.
36
+ _REAL_REQUIRED_CONTEXTS = GitHubCi._required_contexts
37
+
38
+
39
+ @pytest.fixture(autouse=True)
40
+ def _no_required_contexts_filter(monkeypatch):
41
+ """#2388: default every `GitHubCi` in this file to "couldn't determine
42
+ required contexts, don't filter" — every test below that mocks raw
43
+ `gh` subprocess calls does so with an exact expected call sequence, and
44
+ the required-contexts lookup (a repo lookup + a branch-protection
45
+ lookup) would otherwise insert two extra calls into that sequence for
46
+ tests that never intended to exercise it. `TestGitHubCiRequiredContexts`
47
+ below overrides this directly to exercise the real filtering path.
48
+ """
49
+ monkeypatch.setattr(GitHubCi, "_required_contexts", lambda self, repo: None)
50
+
51
+
34
52
  # ── NoOpCi ───────────────────────────────────────────────────────────────────
35
53
 
36
54
  class TestNoOpCi:
@@ -770,6 +788,74 @@ class TestGitHubCiExpectsChecks:
770
788
  assert fn.call_count == 2
771
789
 
772
790
 
791
+ class TestGitHubCiRequiredContexts:
792
+ """#2388: `list_checks_for_pr` narrows to branch-protection-required
793
+ contexts when they're determinable, so an advisory job (e.g. a hung,
794
+ unconditional Playwright/Chromium install with no timeout) can't block
795
+ the merge gate on its own — GitHub itself doesn't wait on it either."""
796
+
797
+ def test_narrows_to_required_contexts_when_known(self) -> None:
798
+ payload = json.dumps([
799
+ {"name": "test (3.12)", "state": "SUCCESS", "bucket": "pass",
800
+ "link": "", "startedAt": "", "completedAt": ""},
801
+ {"name": "acceptance", "state": "PENDING", "bucket": "pending",
802
+ "link": "", "startedAt": "", "completedAt": ""},
803
+ ])
804
+ store = GitHubCi()
805
+ with (
806
+ patch("coord.ci_github.subprocess.run", return_value=_gh_result(payload)),
807
+ patch.object(
808
+ GitHubCi, "_required_contexts",
809
+ lambda self, repo: frozenset({"test (3.12)"}),
810
+ ),
811
+ ):
812
+ checks = store.list_checks_for_pr("acme/api", 42)
813
+ assert [c.name for c in checks] == ["test (3.12)"]
814
+ # The gate no longer sees the advisory `acceptance` check at all —
815
+ # a hung advisory job can't make this read as in-flight.
816
+ assert in_flight_checks(checks) == []
817
+
818
+ def test_does_not_filter_when_required_contexts_unknown(self) -> None:
819
+ """No branch protection configured / unreadable — #1525's bias:
820
+ unknown must read as "wait on everything reported", not as license
821
+ to stop waiting on something that might in fact be required."""
822
+ payload = json.dumps([
823
+ {"name": "test (3.12)", "state": "SUCCESS", "bucket": "pass",
824
+ "link": "", "startedAt": "", "completedAt": ""},
825
+ {"name": "acceptance", "state": "PENDING", "bucket": "pending",
826
+ "link": "", "startedAt": "", "completedAt": ""},
827
+ ])
828
+ store = GitHubCi()
829
+ with patch("coord.ci_github.subprocess.run", return_value=_gh_result(payload)):
830
+ checks = store.list_checks_for_pr("acme/api", 42) # fixture default: None
831
+ assert {c.name for c in checks} == {"test (3.12)", "acceptance"}
832
+ assert len(in_flight_checks(checks)) == 1
833
+
834
+ def test_required_contexts_cached_per_repo(self, monkeypatch) -> None:
835
+ monkeypatch.setattr(GitHubCi, "_required_contexts", _REAL_REQUIRED_CONTEXTS)
836
+ store = GitHubCi(cache_ttl=60.0)
837
+ with patch(
838
+ "coord.github_ops.get_required_status_check_contexts",
839
+ return_value=["test (3.12)"],
840
+ ) as fn:
841
+ store._required_contexts("acme/api")
842
+ store._required_contexts("acme/api")
843
+ assert fn.call_count == 1
844
+
845
+ def test_empty_required_list_reads_as_unknown_not_nothing_required(
846
+ self, monkeypatch,
847
+ ) -> None:
848
+ """An empty `contexts` list from the API (protection configured but
849
+ zero required checks — an unusual but real repo state) must not be
850
+ read as "filter everything out". Only a non-empty list narrows."""
851
+ monkeypatch.setattr(GitHubCi, "_required_contexts", _REAL_REQUIRED_CONTEXTS)
852
+ store = GitHubCi()
853
+ with patch(
854
+ "coord.github_ops.get_required_status_check_contexts", return_value=[],
855
+ ):
856
+ assert store._required_contexts("acme/api") is None
857
+
858
+
773
859
  class TestGitHubCiRerunForPr:
774
860
  """#1851: the remedy side — re-running a PR's CI via `gh run rerun`."""
775
861
 
@@ -1724,17 +1724,29 @@ def live_ci_backend(monkeypatch):
1724
1724
  """Fake the live `ci_store`/`github_ops` seam #2182's re-check calls.
1725
1725
 
1726
1726
  Patches `coord.ci_store.build_ci_store` (what constructs the live
1727
- backend) and the two `coord.github_ops` functions the CI gate reaches
1727
+ backend) and the three `coord.github_ops` functions the CI gate reaches
1728
1728
  for once the checks themselves resolve (`get_branch_commit_timestamp`
1729
1729
  for the #1851 staleness check, `get_pr_commit_messages` for the #1318
1730
- epic-closing-keyword gate) the same seams `tests/test_board_read_
1731
- path.py` fakes for the equivalent `/board`-side gate. Returns a setter,
1732
- `live_ci_backend(checks)`.
1730
+ epic-closing-keyword gate, and `check_pr_mergeable` for the #1877 /
1731
+ #2380 "is this PR actually CONFLICTING?" disambiguation) the same
1732
+ seams `tests/test_board_read_path.py` fakes for the equivalent
1733
+ `/board`-side gate. Returns a setter, `live_ci_backend(checks,
1734
+ mergeable=...)`.
1735
+
1736
+ `mergeable` defaults to `None` — GitHub's own "still computing /
1737
+ unknown" verdict, which every gate treats as inconclusive, so the
1738
+ default leaves the pre-#2380 reading of every scenario here untouched.
1739
+ Pass `mergeable=False` for the #2380 case (a DIRTY/CONFLICTING PR,
1740
+ whose `gh pr checks` fetch fails because GitHub can never build a merge
1741
+ ref for it). Faking it matters beyond convenience: `launches`
1742
+ monkeypatches `subprocess.run` process-wide, so an unfaked probe would
1743
+ (a) really shell out to `gh` from a unit test and (b) land in
1744
+ `launches` as a phantom extra "launch".
1733
1745
  """
1734
1746
  import coord.ci_store as ci_store_module
1735
1747
  import coord.github_ops as github_ops
1736
1748
 
1737
- state: dict = {"checks": []}
1749
+ state: dict = {"checks": [], "mergeable": None}
1738
1750
  monkeypatch.setattr(
1739
1751
  ci_store_module, "build_ci_store", lambda t: _FakeLiveCi(state)
1740
1752
  )
@@ -1744,9 +1756,13 @@ def live_ci_backend(monkeypatch):
1744
1756
  github_ops, "get_branch_commit_timestamp", lambda repo, branch: 1.0
1745
1757
  )
1746
1758
  monkeypatch.setattr(github_ops, "get_pr_commit_messages", lambda repo, n: [])
1759
+ monkeypatch.setattr(
1760
+ github_ops, "check_pr_mergeable", lambda repo, n: state["mergeable"]
1761
+ )
1747
1762
 
1748
- def _set(checks: list) -> None:
1763
+ def _set(checks: list, *, mergeable: bool | None = None) -> None:
1749
1764
  state["checks"] = checks
1765
+ state["mergeable"] = mergeable
1750
1766
 
1751
1767
  return _set
1752
1768
 
@@ -1885,6 +1901,40 @@ def test_a_parked_entrys_reason_is_corrected_when_github_is_unreachable(
1885
1901
  assert queued(2159)["state"] == "running"
1886
1902
 
1887
1903
 
1904
+ def test_a_parked_entry_whose_pr_is_confirmed_conflicting_stops_waiting_on_ci(
1905
+ cli_no_gates, seed, launches, coord_db, live_ci_backend,
1906
+ ):
1907
+ """#2380 at the drive-queue tick: the SAME unreadable check list as the
1908
+ #2347 test above, but GitHub's `mergeable` field reads CONFLICTING.
1909
+
1910
+ That combination is not a transient outage and never becomes readable
1911
+ on its own — GitHub cannot build a merge ref for a conflicting PR, so
1912
+ `gh pr checks` has nothing to read, forever. Parking on "retry the CI
1913
+ read" therefore wedges the entry until the 45-minute ceiling, every
1914
+ ceiling, with zero forward progress (the live incident: claude-
1915
+ coordinator#2375 / PR #2379 parked 6x). The live re-check must stop
1916
+ treating it as still-blocked-on-CI and let the entry move again, so the
1917
+ merge path can route it to the #241 conflict-fix dispatch.
1918
+ """
1919
+ _park_with_pr(cli_no_gates, seed, coord_db)
1920
+ assert queued(2159)["state"] == "parked"
1921
+ assert len(launches) == 1, launches
1922
+
1923
+ from coord.ci_github import _unreadable_check
1924
+ live_ci_backend(
1925
+ [_unreadable_check(REPO, 2159, "HTTP 503: No server is currently available")],
1926
+ mergeable=False,
1927
+ )
1928
+
1929
+ result = cli_no_gates("tick")
1930
+ assert result.exit_code == 0, result.output
1931
+ entry = queued(2159)
1932
+ assert entry["state"] != "parked", entry # no longer wedged on a dead read
1933
+ from coord.merge_queue import is_ci_unreadable_reason
1934
+ assert not is_ci_unreadable_reason(entry["last_reason"] or ""), entry
1935
+ assert "parked" not in cli_no_gates("status").output
1936
+
1937
+
1888
1938
  def test_a_live_ready_wins_even_over_a_stale_cached_plan_reading(
1889
1939
  cli_no_gates, seed, launches, coord_db, live_ci_backend, board_merge_plan,
1890
1940
  ):
@@ -463,7 +463,7 @@ def _patched_dispatch(client: _FakeClient):
463
463
  class TestConfigFlag:
464
464
  def test_defaults_off(self) -> None:
465
465
  assert PipelineConfig().escalate_semantic_conflicts is False
466
- assert PipelineConfig().semantic_conflict_model == "fable"
466
+ assert PipelineConfig().semantic_conflict_model == "opus"
467
467
 
468
468
  def test_parsed_from_yaml(self, tmp_path) -> None:
469
469
  from coord.config import load