code-coordinator 0.5.172__tar.gz → 0.5.175__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 (883) hide show
  1. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/code_coordinator.egg-info/SOURCES.txt +1 -0
  4. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/code_coordinator.egg-info/scm_file_list.json +1 -0
  5. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/code_coordinator.egg-info/scm_version.json +2 -2
  6. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/ci_github.py +50 -17
  7. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/ci_store.py +27 -0
  8. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/commands/merge.py +55 -1
  9. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/drive.py +120 -0
  10. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/gate_snapshot.py +40 -0
  11. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/merge_queue.py +48 -0
  12. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/docs/OPERATING_GOTCHAS.md +17 -0
  13. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/acceptance/ms-65/manifest.yml +155 -0
  14. code_coordinator-0.5.175/tests/acceptance/ms-65/tabs_persistence_2286.rs +1105 -0
  15. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_board_read_path.py +81 -0
  16. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_ci_store.py +69 -0
  17. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_cli_merge.py +93 -0
  18. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_drive.py +72 -1
  19. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_merge_queue.py +78 -0
  20. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tui/tests/acceptance.rs +1 -0
  21. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/.claude/commands/board.md +0 -0
  22. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/.claude/commands/complete-session.md +0 -0
  23. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/.claude/commands/coordinator.md +0 -0
  24. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/.githooks/_lib.sh +0 -0
  25. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/.githooks/post-checkout +0 -0
  26. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/.githooks/post-commit +0 -0
  27. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/.githooks/post-merge +0 -0
  28. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  29. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/.github/coord-ci-acceptance.yml +0 -0
  30. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/.github/workflows/acceptance-web.yml +0 -0
  31. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/.github/workflows/auto-release.yml +0 -0
  32. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/.github/workflows/cargo-test.yml +0 -0
  33. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/.github/workflows/publish.yml +0 -0
  34. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/.github/workflows/release-tui.yml +0 -0
  35. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/.github/workflows/test.yml +0 -0
  36. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/.gitignore +0 -0
  37. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/CLAUDE.md +0 -0
  38. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/GOAL.md +0 -0
  39. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/LICENSE +0 -0
  40. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/MANIFEST.in +0 -0
  41. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/README.md +0 -0
  42. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/code_coordinator.egg-info/dependency_links.txt +0 -0
  43. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/code_coordinator.egg-info/entry_points.txt +0 -0
  44. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/code_coordinator.egg-info/requires.txt +0 -0
  45. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/code_coordinator.egg-info/top_level.txt +0 -0
  46. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/__init__.py +0 -0
  47. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/_board_mapping.py +0 -0
  48. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/acceptance.py +0 -0
  49. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/acceptance_drivers.py +0 -0
  50. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/agent.py +0 -0
  51. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/agent_app.py +0 -0
  52. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/agent_update.py +0 -0
  53. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/agents/opencode/.gitignore +0 -0
  54. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/agents/opencode/agents/work.md +0 -0
  55. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/agents/opencode/routing.jsonc +0 -0
  56. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/audit.py +0 -0
  57. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/auto_loop.py +0 -0
  58. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/block_log.py +0 -0
  59. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/board_bool_guard.py +0 -0
  60. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/board_service.py +0 -0
  61. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/board_wire.py +0 -0
  62. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/brain.py +0 -0
  63. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/branch_model.py +0 -0
  64. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/bug_intake.py +0 -0
  65. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/cargo_cache.py +0 -0
  66. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/claim.py +0 -0
  67. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/cli.py +0 -0
  68. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/client.py +0 -0
  69. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/commands/__init__.py +0 -0
  70. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/commands/_common.py +0 -0
  71. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/commands/acceptance.py +0 -0
  72. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/commands/agent_ops.py +0 -0
  73. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/commands/audit.py +0 -0
  74. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/commands/chat.py +0 -0
  75. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/commands/dispatch.py +0 -0
  76. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/commands/dispatch_workers.py +0 -0
  77. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/commands/drive.py +0 -0
  78. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/commands/drive_queue.py +0 -0
  79. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/commands/gate_a.py +0 -0
  80. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/commands/gates.py +0 -0
  81. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/commands/issues.py +0 -0
  82. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/commands/lifecycle.py +0 -0
  83. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/commands/milestone.py +0 -0
  84. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/commands/plan_followup.py +0 -0
  85. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/commands/plans.py +0 -0
  86. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/commands/portal.py +0 -0
  87. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/commands/release.py +0 -0
  88. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/commands/repo.py +0 -0
  89. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/commands/report.py +0 -0
  90. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/commands/review.py +0 -0
  91. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/commands/scorecard.py +0 -0
  92. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/commands/sessions.py +0 -0
  93. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/commands/setup.py +0 -0
  94. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/commands/status.py +0 -0
  95. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/commands/terminal.py +0 -0
  96. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/commands/test_gate.py +0 -0
  97. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/commands/tui.py +0 -0
  98. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/comments.py +0 -0
  99. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/config.py +0 -0
  100. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/config_reload.py +0 -0
  101. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/conflict_fix.py +0 -0
  102. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dao.py +0 -0
  103. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/__init__.py +0 -0
  104. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/fixture.py +0 -0
  105. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/index.html +0 -0
  106. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/server.py +0 -0
  107. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/terminal.py +0 -0
  108. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/.gitignore +0 -0
  109. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/components.json +0 -0
  110. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/dist/assets/Gallery-BoKs3mpY.js +0 -0
  111. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
  112. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/dist/assets/Terminal-CEsP08iX.js +0 -0
  113. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/dist/assets/index-CDHPlB6k.js +0 -0
  114. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
  115. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
  116. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
  117. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
  118. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
  119. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/dist/index.html +0 -0
  120. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
  121. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/dist/sw.js +0 -0
  122. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
  123. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
  124. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
  125. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
  126. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
  127. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
  128. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
  129. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
  130. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
  131. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
  132. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/eslint.config.js +0 -0
  133. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/index.html +0 -0
  134. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
  135. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/package-lock.json +0 -0
  136. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/package.json +0 -0
  137. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
  138. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/playwright.config.ts +0 -0
  139. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/postcss.config.js +0 -0
  140. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
  141. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
  142. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
  143. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/App.tsx +0 -0
  144. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/api/client.ts +0 -0
  145. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/api/generated.ts +0 -0
  146. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
  147. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
  148. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
  149. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
  150. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
  151. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
  152. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
  153. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
  154. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
  155. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
  156. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
  157. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
  158. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
  159. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
  160. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
  161. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
  162. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
  163. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
  164. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
  165. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
  166. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
  167. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
  168. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
  169. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
  170. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
  171. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
  172. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
  173. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
  174. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
  175. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
  176. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
  177. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
  178. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
  179. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
  180. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/index.css +0 -0
  181. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
  182. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
  183. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/main.tsx +0 -0
  184. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
  185. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
  186. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
  187. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
  188. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
  189. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
  190. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
  191. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
  192. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
  193. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
  194. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
  195. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
  196. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
  197. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
  198. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
  199. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
  200. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
  201. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
  202. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
  203. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
  204. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
  205. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/test-setup.ts +0 -0
  206. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
  207. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/tailwind.config.js +0 -0
  208. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/tsconfig.json +0 -0
  209. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/tsconfig.node.json +0 -0
  210. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dashboard/webapp/vite.config.ts +0 -0
  211. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/db.py +0 -0
  212. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dead_end.py +0 -0
  213. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/deploy/README.md +0 -0
  214. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/deploy/coord-agent.service +0 -0
  215. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/deploy/coord-db-backup.service +0 -0
  216. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/deploy/coord-db-backup.sh +0 -0
  217. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/deploy/coord-db-backup.timer +0 -0
  218. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/deploy/coord-drive-queue.service +0 -0
  219. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/deploy/coord-drive-queue.timer +0 -0
  220. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/deploy/coord-notify.service +0 -0
  221. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/deploy/coord-notify.timer +0 -0
  222. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/deploy/coord-release-propagate.service +0 -0
  223. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/deploy/coord-release-propagate.timer +0 -0
  224. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/deploy/coord-release-window.service +0 -0
  225. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/deploy/coord-release-window.timer +0 -0
  226. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/deploy/coord-serve.service +0 -0
  227. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/deploy/coord-web-dist-build.service +0 -0
  228. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/deploy/coord-web-dist-build.timer +0 -0
  229. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/deploy/coord-web.service +0 -0
  230. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/deploy_manifest.py +0 -0
  231. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/deploy_units.py +0 -0
  232. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/deps.py +0 -0
  233. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/diagnose.py +0 -0
  234. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dispatch.py +0 -0
  235. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/dist_name.py +0 -0
  236. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/drive_queue.py +0 -0
  237. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/drive_state.py +0 -0
  238. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/events.py +0 -0
  239. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/failure_class.py +0 -0
  240. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/filelock.py +0 -0
  241. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/fleet_config_health.py +0 -0
  242. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/freshness.py +0 -0
  243. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/gate_a.py +0 -0
  244. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/gate_b.py +0 -0
  245. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/gates.py +0 -0
  246. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/github_ops.py +0 -0
  247. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/goal.py +0 -0
  248. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/graph_health.py +0 -0
  249. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/health/__init__.py +0 -0
  250. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/health/aggregate.py +0 -0
  251. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/health/checks/__init__.py +0 -0
  252. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/health/checks/agent_install.py +0 -0
  253. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/health/checks/cargo_targets.py +0 -0
  254. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/health/checks/claude_binary.py +0 -0
  255. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/health/checks/deploy_lane_facts.py +0 -0
  256. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/health/checks/disk.py +0 -0
  257. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/health/checks/fleet_board.py +0 -0
  258. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  259. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/health/checks/fleet_phantom.py +0 -0
  260. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/health/checks/fleet_unit_drift.py +0 -0
  261. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/health/checks/graph.py +0 -0
  262. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/health/checks/graphify_cli.py +0 -0
  263. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/health/checks/index_lock.py +0 -0
  264. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/health/checks/plan_usage.py +0 -0
  265. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/health/checks/repo_state.py +0 -0
  266. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/health/checks/spawned_coord.py +0 -0
  267. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/health/checks/timer_active.py +0 -0
  268. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/health/checks/toolchain.py +0 -0
  269. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/health/checks/unit_drift.py +0 -0
  270. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/health/checks/unit_enablement.py +0 -0
  271. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/health/checks/worktrees.py +0 -0
  272. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/health/cli.py +0 -0
  273. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/health/context.py +0 -0
  274. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/health/fleet_snapshot.py +0 -0
  275. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/health/models.py +0 -0
  276. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/health/pypi.py +0 -0
  277. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/health/registry.py +0 -0
  278. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/health/render.py +0 -0
  279. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/health/units.py +0 -0
  280. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/hooks.py +0 -0
  281. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/housekeeping.py +0 -0
  282. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/interactive.py +0 -0
  283. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/issue_store.py +0 -0
  284. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/liveness_auditor.py +0 -0
  285. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/machine_pause.py +0 -0
  286. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/milestone_chat.py +0 -0
  287. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/milestone_dispatch.py +0 -0
  288. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/milestone_gate.py +0 -0
  289. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/milestone_order.py +0 -0
  290. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/mock_author.py +0 -0
  291. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/models.py +0 -0
  292. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/network.py +0 -0
  293. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/new_issue_chat.py +0 -0
  294. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/notifier/__init__.py +0 -0
  295. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/notifier/baseline.py +0 -0
  296. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/notifier/cli.py +0 -0
  297. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/notifier/collect.py +0 -0
  298. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/notifier/digest.py +0 -0
  299. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/notifier/models.py +0 -0
  300. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/notifier/predicate.py +0 -0
  301. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/notifier/service.py +0 -0
  302. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/notifier/store.py +0 -0
  303. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/notifier/transport.py +0 -0
  304. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/notify.py +0 -0
  305. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/openapi.py +0 -0
  306. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/overlap_fence.py +0 -0
  307. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/overlap_predict.py +0 -0
  308. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/parentage.py +0 -0
  309. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/parentage_github.py +0 -0
  310. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/pipeline.py +0 -0
  311. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/plan_parser.py +0 -0
  312. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/plans.py +0 -0
  313. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/platform_paths.py +0 -0
  314. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/portal_bridge.py +0 -0
  315. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/portal_store.py +0 -0
  316. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/portal_sync.py +0 -0
  317. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/pr_body_lint.py +0 -0
  318. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/prereqs.py +0 -0
  319. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/progress.py +0 -0
  320. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/providers/__init__.py +0 -0
  321. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/providers/base.py +0 -0
  322. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/providers/claude.py +0 -0
  323. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/providers/claude_pty.py +0 -0
  324. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/providers/opencode.py +0 -0
  325. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/queue_diagnose.py +0 -0
  326. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/reconcile.py +0 -0
  327. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/reconcile_tick.py +0 -0
  328. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/refine_chat.py +0 -0
  329. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/release_cordon.py +0 -0
  330. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/release_propagate.py +0 -0
  331. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/release_verify.py +0 -0
  332. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/release_window.py +0 -0
  333. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/repo_edit.py +0 -0
  334. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/repo_onboard.py +0 -0
  335. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/reports.py +0 -0
  336. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/revalidate.py +0 -0
  337. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/review.py +0 -0
  338. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/scorecard.py +0 -0
  339. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/self_health.py +0 -0
  340. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/serve_app.py +0 -0
  341. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  342. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  343. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  344. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  345. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  346. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/skills/portal-followup/SKILL.md +0 -0
  347. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  348. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  349. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/skills/update-issue/SKILL.md +0 -0
  350. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/smoke.py +0 -0
  351. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/spend_ceiling.py +0 -0
  352. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/split_work.py +0 -0
  353. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/stage_projection.py +0 -0
  354. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/state.py +0 -0
  355. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/test_author.py +0 -0
  356. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/test_chat.py +0 -0
  357. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/test_orchestrator.py +0 -0
  358. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/test_report.py +0 -0
  359. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/tui_release.py +0 -0
  360. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/usage.py +0 -0
  361. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/usage_limits.py +0 -0
  362. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/usage_rollup.py +0 -0
  363. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coord/worker_events.py +0 -0
  364. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/coordinator.example.yml +0 -0
  365. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/deploy/coord-agent.service +0 -0
  366. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/deploy/coord-db-backup.service +0 -0
  367. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/deploy/coord-db-backup.sh +0 -0
  368. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/deploy/coord-db-backup.timer +0 -0
  369. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/deploy/coord-drive-queue.service +0 -0
  370. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/deploy/coord-drive-queue.timer +0 -0
  371. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/deploy/coord-notify.service +0 -0
  372. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/deploy/coord-notify.timer +0 -0
  373. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/deploy/coord-release-propagate.service +0 -0
  374. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/deploy/coord-release-propagate.timer +0 -0
  375. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/deploy/coord-release-window.service +0 -0
  376. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/deploy/coord-release-window.timer +0 -0
  377. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/deploy/coord-serve.service +0 -0
  378. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/deploy/coord-web-dist-build.service +0 -0
  379. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/deploy/coord-web-dist-build.sh +0 -0
  380. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/deploy/coord-web-dist-build.timer +0 -0
  381. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/deploy/coord-web-rollback.sh +0 -0
  382. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/deploy/coord-web.service +0 -0
  383. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/deploy/node-shim.sh +0 -0
  384. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/docs/ADR_COORD_WEB_DIST.md +0 -0
  385. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/docs/AGENT_OPERATIONS.md +0 -0
  386. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/docs/ARCHITECTURE.md +0 -0
  387. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/docs/ARCH_SECURITY_GATES.md +0 -0
  388. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/docs/COCKPIT.md +0 -0
  389. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/docs/CONTROL_CENTER.md +0 -0
  390. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/docs/COST_DISCIPLINE.md +0 -0
  391. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/docs/CROSS_PLATFORM.md +0 -0
  392. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/docs/CUSTOMER_PORTAL.md +0 -0
  393. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/docs/DRIVE_QUEUE.md +0 -0
  394. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/docs/EPHEMERAL_WORKERS.md +0 -0
  395. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/docs/FORGE_MIGRATION.md +0 -0
  396. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/docs/GRAPHIFY_SETUP.md +0 -0
  397. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/docs/ISSUE_GUIDANCE.md +0 -0
  398. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/docs/MAC_MINI.md +0 -0
  399. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  400. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/docs/NOTIFIER.md +0 -0
  401. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/docs/OPENCODE_VERIFICATION.md +0 -0
  402. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/docs/ORACLE_LOOP.md +0 -0
  403. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/docs/PHONE_WEBAPP.md +0 -0
  404. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/docs/PIPELINE_V2.md +0 -0
  405. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/docs/PLATFORM_EVOLUTION.md +0 -0
  406. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/docs/SECOND_BACKEND.md +0 -0
  407. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/docs/STORE_SERVICE.md +0 -0
  408. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  409. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/docs/WEB_CONTROL_CENTER.md +0 -0
  410. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/docs/WSL_WINDOWS_WORKER.md +0 -0
  411. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/docs/mocks/web/README.md +0 -0
  412. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/docs/mocks/web/_tokens.css +0 -0
  413. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/docs/mocks/web/issue-detail.html +0 -0
  414. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/docs/mocks/web/pipeline-narrow.html +0 -0
  415. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/docs/mocks/web/pipeline-wide.html +0 -0
  416. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/graphify-out/.gitignore +0 -0
  417. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/install-agent.sh +0 -0
  418. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/pyproject.toml +0 -0
  419. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/scripts/audit_review_verdict_overrides.py +0 -0
  420. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  421. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/scripts/azure-workers/build-worker-image.sh +0 -0
  422. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/scripts/azure-workers/coordinator-machine.py +0 -0
  423. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/scripts/azure-workers/epic-down.sh +0 -0
  424. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/scripts/azure-workers/epic-up.sh +0 -0
  425. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/scripts/azure-workers/preflight.sh +0 -0
  426. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/scripts/azure-workers/provision-worker.sh +0 -0
  427. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  428. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  429. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/scripts/azure-workers/verify-github-token.sh +0 -0
  430. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/scripts/codegen.py +0 -0
  431. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/scripts/coord-test-runner.sh +0 -0
  432. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/scripts/drive-batch.sh +0 -0
  433. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/scripts/gen_board_fixture.py +0 -0
  434. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/scripts/next_release_tag.py +0 -0
  435. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/scripts/run_tests_in_populated_home.sh +0 -0
  436. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/scripts/run_tests_without_gh.sh +0 -0
  437. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/scripts/smoke_437_interactive.py +0 -0
  438. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/scripts/verify_878_review_capture.py +0 -0
  439. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/scripts/verify_release_published.py +0 -0
  440. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/scripts/verify_release_wheel.py +0 -0
  441. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/setup.cfg +0 -0
  442. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/SMOKE_SET.md +0 -0
  443. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/__init__.py +0 -0
  444. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  445. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/acceptance/ms-33/contract.md +0 -0
  446. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/acceptance/ms-33/manifest.yml +0 -0
  447. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  448. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  449. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  450. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  451. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/acceptance/ms-37/conftest.py +0 -0
  452. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/acceptance/ms-37/contract.md +0 -0
  453. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/acceptance/ms-37/manifest.yml +0 -0
  454. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  455. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  456. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/acceptance/ms-38/contract.md +0 -0
  457. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/acceptance/ms-38/manifest.yml +0 -0
  458. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  459. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  460. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  461. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  462. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  463. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  464. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  465. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  466. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  467. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  468. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/acceptance/ms-51/contract.md +0 -0
  469. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  470. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  471. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/acceptance/ms-51/manifest.yml +0 -0
  472. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  473. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/acceptance/ms-51/tsconfig.json +0 -0
  474. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
  475. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
  476. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/acceptance/ms-65/contract.md +0 -0
  477. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
  478. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
  479. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
  480. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
  481. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
  482. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
  483. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
  484. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
  485. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
  486. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
  487. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
  488. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  489. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/conftest.py +0 -0
  490. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/fixtures/board-pipeline-basic.json +0 -0
  491. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  492. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  493. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  494. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  495. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/fixtures/playwright/all_pass.json +0 -0
  496. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  497. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/fixtures/playwright/mixed_fail.json +0 -0
  498. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  499. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  500. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/fixtures/playwright/skip.json +0 -0
  501. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/fixtures/playwright/truncated.json +0 -0
  502. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  503. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  504. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  505. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  506. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  507. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  508. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  509. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  510. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_acceptance.py +0 -0
  511. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_acceptance_drivers.py +0 -0
  512. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_agent.py +0 -0
  513. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_agent_api_error.py +0 -0
  514. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_agent_app.py +0 -0
  515. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_agent_branch_base.py +0 -0
  516. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_agent_branch_capture.py +0 -0
  517. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_agent_config_free_1712.py +0 -0
  518. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_agent_deploy_units_endpoint.py +0 -0
  519. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_agent_dirty_worktree.py +0 -0
  520. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  521. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_agent_graph_self_heal.py +0 -0
  522. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_agent_health_h3.py +0 -0
  523. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_agent_idle_restart.py +0 -0
  524. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_agent_push_failure.py +0 -0
  525. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_agent_reap.py +0 -0
  526. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_agent_repos_and_pull.py +0 -0
  527. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_agent_restart_services_endpoint.py +0 -0
  528. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_agent_skills_self_heal.py +0 -0
  529. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_agent_startup_diagnostics.py +0 -0
  530. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_agent_update.py +0 -0
  531. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_agent_update_bluegreen.py +0 -0
  532. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_agent_usage_limit.py +0 -0
  533. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_agent_zero_commit.py +0 -0
  534. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_ambient_home_isolation.py +0 -0
  535. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_approve_reject_plan.py +0 -0
  536. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_approve_usage_gate.py +0 -0
  537. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_assignment_already_recorded_daemon.py +0 -0
  538. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_audit_log.py +0 -0
  539. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_audit_outcome.py +0 -0
  540. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_audit_query.py +0 -0
  541. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_auto_loop.py +0 -0
  542. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_auto_release_publish_2035.py +0 -0
  543. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_base_checkout_restore.py +0 -0
  544. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_block_log.py +0 -0
  545. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_board_cap_762.py +0 -0
  546. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_board_fixture.py +0 -0
  547. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_board_service.py +0 -0
  548. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_board_state.py +0 -0
  549. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_board_wire.py +0 -0
  550. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_brain.py +0 -0
  551. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_branch_model.py +0 -0
  552. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_bug_intake.py +0 -0
  553. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_build_worker_image_env_update.py +0 -0
  554. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_cargo_cache.py +0 -0
  555. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_ci_acceptance_gate_1950.py +0 -0
  556. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_ci_parity_2091.py +0 -0
  557. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_claim.py +0 -0
  558. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_cli_acceptance.py +0 -0
  559. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_cli_assign.py +0 -0
  560. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  561. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_cli_assign_interactive_remote.py +0 -0
  562. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_cli_assign_provider.py +0 -0
  563. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  564. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_cli_audit.py +0 -0
  565. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_cli_chat_continue.py +0 -0
  566. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_cli_decide.py +0 -0
  567. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_cli_diagnose_config_provenance.py +0 -0
  568. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_cli_diagnose_graph.py +0 -0
  569. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_cli_diagnose_self.py +0 -0
  570. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_cli_doctor.py +0 -0
  571. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_cli_doctor_config_free_1801.py +0 -0
  572. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  573. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_cli_drive.py +0 -0
  574. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_cli_drive_queue.py +0 -0
  575. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_cli_escalate.py +0 -0
  576. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_cli_fix_headless_review.py +0 -0
  577. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_cli_gate_a.py +0 -0
  578. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_cli_install_drift.py +0 -0
  579. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_cli_install_skills.py +0 -0
  580. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_cli_issue_create_label.py +0 -0
  581. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_cli_issue_reopen.py +0 -0
  582. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_cli_milestone_assign.py +0 -0
  583. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_cli_milestone_capture.py +0 -0
  584. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_cli_milestone_chat_add_child.py +0 -0
  585. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_cli_milestone_dispatch.py +0 -0
  586. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_cli_milestone_gate_b.py +0 -0
  587. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_cli_milestone_gate_c.py +0 -0
  588. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_cli_milestone_order.py +0 -0
  589. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  590. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_cli_milestone_ship.py +0 -0
  591. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_cli_network.py +0 -0
  592. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_cli_new_issue_chat.py +0 -0
  593. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_cli_plans.py +0 -0
  594. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_cli_portal.py +0 -0
  595. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_cli_pull_artifact.py +0 -0
  596. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_cli_queue.py +0 -0
  597. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_cli_reattach_sessions.py +0 -0
  598. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_cli_refine_board.py +0 -0
  599. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_cli_release_preflight.py +0 -0
  600. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_cli_release_propagate.py +0 -0
  601. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_cli_release_window.py +0 -0
  602. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_cli_repo_2220.py +0 -0
  603. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_cli_scorecard.py +0 -0
  604. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_cli_set_review_findings.py +0 -0
  605. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_cli_status_advisory_terminal.py +0 -0
  606. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_cli_status_merge_queue.py +0 -0
  607. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_cli_status_provider.py +0 -0
  608. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_cli_status_review_finalizing.py +0 -0
  609. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_cli_status_test_failed_tag.py +0 -0
  610. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_cli_status_usage_limit.py +0 -0
  611. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_cli_sync_comments_873.py +0 -0
  612. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_cli_test_plan.py +0 -0
  613. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_cli_track.py +0 -0
  614. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_cli_tui_update.py +0 -0
  615. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_cli_wait.py +0 -0
  616. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_client_base_install.py +0 -0
  617. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_comments.py +0 -0
  618. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_completion_summary.py +0 -0
  619. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_config.py +0 -0
  620. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_config_acceptance.py +0 -0
  621. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_config_audit.py +0 -0
  622. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_config_pricing.py +0 -0
  623. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  624. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_config_usage_gate.py +0 -0
  625. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_conflict_fix.py +0 -0
  626. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_conflict_fix_semantic.py +0 -0
  627. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_coord_test.py +0 -0
  628. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_coord_test_runner_baseline.py +0 -0
  629. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_coord_test_runner_populated_home.py +0 -0
  630. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_coord_test_runner_routing.py +0 -0
  631. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_coord_test_runner_toolchain.py +0 -0
  632. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_coord_web_sse_restart_live.py +0 -0
  633. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_coordinator_machine.py +0 -0
  634. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_cross_platform_imports.py +0 -0
  635. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_dashboard.py +0 -0
  636. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_dashboard_fixture.py +0 -0
  637. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_dashboard_terminal.py +0 -0
  638. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_dashboard_terminal_live.py +0 -0
  639. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_db.py +0 -0
  640. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_dead_end.py +0 -0
  641. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_deploy_coord_db_backup.py +0 -0
  642. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_deploy_coord_web_dist.py +0 -0
  643. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_deploy_coord_web_rollback.py +0 -0
  644. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_deploy_drive_queue_unit.py +0 -0
  645. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_deploy_manifest.py +0 -0
  646. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_deploy_units_lane.py +0 -0
  647. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_deploy_web_unit.py +0 -0
  648. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_deps.py +0 -0
  649. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_diagnose.py +0 -0
  650. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_dispatch.py +0 -0
  651. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_dispatch_target_validation.py +0 -0
  652. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_dist_name.py +0 -0
  653. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_done_housekeeping.py +0 -0
  654. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_drive_queue.py +0 -0
  655. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_drive_state.py +0 -0
  656. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_drive_tmux.py +0 -0
  657. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_epic_up_capability_detection.py +0 -0
  658. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  659. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_epic_up_image_provenance.py +0 -0
  660. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_errors.py +0 -0
  661. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_events.py +0 -0
  662. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_failure_class.py +0 -0
  663. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_filelock.py +0 -0
  664. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  665. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_fix_of_force_override.py +0 -0
  666. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_fleet_config_health.py +0 -0
  667. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_fleet_health_probes.py +0 -0
  668. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_fleet_health_snapshot.py +0 -0
  669. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_freshness.py +0 -0
  670. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_gate_a.py +0 -0
  671. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_gate_b.py +0 -0
  672. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_gate_snapshot_staleness.py +0 -0
  673. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_gates.py +0 -0
  674. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  675. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_generated_types_fixture.py +0 -0
  676. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_github_ops.py +0 -0
  677. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_goal.py +0 -0
  678. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_graph_health.py +0 -0
  679. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_graph_selfheal_absent_2237.py +0 -0
  680. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_handoff.py +0 -0
  681. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_health_checks.py +0 -0
  682. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_health_cli.py +0 -0
  683. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_health_cli_graph.py +0 -0
  684. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_health_config.py +0 -0
  685. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_health_context.py +0 -0
  686. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_health_deploy_lane_facts.py +0 -0
  687. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_health_incident_regression.py +0 -0
  688. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_health_pypi.py +0 -0
  689. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_health_registry.py +0 -0
  690. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_health_timer_active.py +0 -0
  691. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_health_toolchain.py +0 -0
  692. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_health_unit_drift.py +0 -0
  693. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_health_unit_enablement.py +0 -0
  694. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_hooks.py +0 -0
  695. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_human_attended_437.py +0 -0
  696. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_init.py +0 -0
  697. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_integration.py +0 -0
  698. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_interactive_briefing_echo.py +0 -0
  699. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_interactive_prefill_state.py +0 -0
  700. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_interactive_session_relaunch.py +0 -0
  701. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_interactive_test_verdict_backstop.py +0 -0
  702. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_interactive_token_attribution.py +0 -0
  703. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_interactive_worktree.py +0 -0
  704. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_issue_store_seam.py +0 -0
  705. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_liveness_auditor.py +0 -0
  706. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_liveness_notify.py +0 -0
  707. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_machine_pause.py +0 -0
  708. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_merge_verify.py +0 -0
  709. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_milestone_chat.py +0 -0
  710. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_milestone_dispatch.py +0 -0
  711. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_milestone_gate.py +0 -0
  712. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_milestone_order.py +0 -0
  713. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_milestone_seam.py +0 -0
  714. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_mock_author.py +0 -0
  715. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_model_tiering.py +0 -0
  716. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_models.py +0 -0
  717. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_models_config_labels.py +0 -0
  718. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_needs_attention.py +0 -0
  719. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_network.py +0 -0
  720. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_new_issue_chat.py +0 -0
  721. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_next_release_tag.py +0 -0
  722. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_no_direct_gh_calls.py +0 -0
  723. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_node_shim.py +0 -0
  724. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_notifier_baseline.py +0 -0
  725. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_notifier_cli.py +0 -0
  726. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_notifier_collect.py +0 -0
  727. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_notifier_config.py +0 -0
  728. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_notifier_drive_seam.py +0 -0
  729. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_notifier_isolation.py +0 -0
  730. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_notifier_predicate.py +0 -0
  731. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_notifier_quiet_hours.py +0 -0
  732. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_notifier_service.py +0 -0
  733. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_notify.py +0 -0
  734. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_notify_drain.py +0 -0
  735. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_openapi.py +0 -0
  736. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_operational_defaults.py +0 -0
  737. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_overlap_fence.py +0 -0
  738. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_overlap_predict.py +0 -0
  739. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_packaged_deploy_units.py +0 -0
  740. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_parentage.py +0 -0
  741. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_paste_landed.py +0 -0
  742. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_pipeline.py +0 -0
  743. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_plan_followup_approve_plan_command.py +0 -0
  744. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_plan_followup_pr_command.py +0 -0
  745. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_plan_followup_review_command.py +0 -0
  746. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_plan_only.py +0 -0
  747. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_plan_parser.py +0 -0
  748. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_platform_paths.py +0 -0
  749. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_portal_bridge.py +0 -0
  750. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_portal_config.py +0 -0
  751. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_portal_sync.py +0 -0
  752. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_pr_body_lint.py +0 -0
  753. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_prereqs.py +0 -0
  754. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_production_db_guard.py +0 -0
  755. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_progress.py +0 -0
  756. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_provider_seam.py +0 -0
  757. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_providers.py +0 -0
  758. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_providers_config_labels.py +0 -0
  759. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_providers_pty.py +0 -0
  760. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_quiet_hours.py +0 -0
  761. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_quiet_hours_store_2146.py +0 -0
  762. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_reap_merged_sessions.py +0 -0
  763. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_reap_stale_interactive_tick.py +0 -0
  764. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_reconcile.py +0 -0
  765. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_reconcile_branch.py +0 -0
  766. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_reconcile_completions.py +0 -0
  767. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_reconcile_merges.py +0 -0
  768. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_reconcile_no_agent_record.py +0 -0
  769. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_reconcile_tick.py +0 -0
  770. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_reconcile_usage_limit_done.py +0 -0
  771. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_refine_chat.py +0 -0
  772. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_release_cordon_2101.py +0 -0
  773. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  774. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_release_cordon_deadlock_2240.py +0 -0
  775. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_release_propagate.py +0 -0
  776. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_release_unified_1242.py +0 -0
  777. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_release_verify.py +0 -0
  778. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_release_window.py +0 -0
  779. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_remote_auto_prune.py +0 -0
  780. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_remote_interactive_reaper.py +0 -0
  781. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_repo_edit_2220.py +0 -0
  782. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_repo_graph_fleet_2237.py +0 -0
  783. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_repo_onboard_2220.py +0 -0
  784. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_report_result_push.py +0 -0
  785. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_reports.py +0 -0
  786. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_retry.py +0 -0
  787. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_retry_advisory_1606.py +0 -0
  788. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_retry_type_1636.py +0 -0
  789. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_revalidate.py +0 -0
  790. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_review.py +0 -0
  791. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_review_end_review_without_verdict.py +0 -0
  792. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_review_parse_failure_diagnostic.py +0 -0
  793. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_review_reaffirm.py +0 -0
  794. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_review_state.py +0 -0
  795. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_review_verdict_backstop.py +0 -0
  796. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_review_verdict_override_audit.py +0 -0
  797. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_review_verdict_relay.py +0 -0
  798. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_review_zero_commits.py +0 -0
  799. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_scoped_review_wiring.py +0 -0
  800. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_scorecard.py +0 -0
  801. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_self_health.py +0 -0
  802. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_serve.py +0 -0
  803. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_serve_app_board_trim.py +0 -0
  804. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_session.py +0 -0
  805. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_slice_issue_attribution.py +0 -0
  806. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_smoke.py +0 -0
  807. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_smoke_live_checkout_restore.py +0 -0
  808. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_smoke_workflow.py +0 -0
  809. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_spend_ceiling.py +0 -0
  810. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_spend_ceiling_coordinator.py +0 -0
  811. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_split.py +0 -0
  812. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_split_work.py +0 -0
  813. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_stage_projection.py +0 -0
  814. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_stalled_pipeline.py +0 -0
  815. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_state.py +0 -0
  816. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_state_review_findings_daemon.py +0 -0
  817. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_status_fleet_footer.py +0 -0
  818. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_stop_1567.py +0 -0
  819. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_stuck.py +0 -0
  820. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_terminal_command.py +0 -0
  821. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_test_author.py +0 -0
  822. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_test_chat.py +0 -0
  823. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_test_orchestrator.py +0 -0
  824. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_test_report.py +0 -0
  825. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_test_verdict_parsing.py +0 -0
  826. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_test_verdict_transcript_floor.py +0 -0
  827. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_thin_client_board_audit.py +0 -0
  828. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_thin_client_config_load_1080.py +0 -0
  829. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_thin_client_daemon_routing_906.py +0 -0
  830. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_tmux_host.py +0 -0
  831. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_tmux_session.py +0 -0
  832. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_transcript_floor.py +0 -0
  833. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_usage.py +0 -0
  834. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_usage_limits.py +0 -0
  835. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_usage_rollup.py +0 -0
  836. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_venv_live_install_2121.py +0 -0
  837. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_version_single_source.py +0 -0
  838. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_watch.py +0 -0
  839. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  840. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_worker_events.py +0 -0
  841. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_worker_image_pin_sync.py +0 -0
  842. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_worker_safety.py +0 -0
  843. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_worker_test_scoping.py +0 -0
  844. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_worktree.py +0 -0
  845. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  846. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tui/Cargo.lock +0 -0
  847. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tui/Cargo.toml +0 -0
  848. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tui/cargo-config-local-quadraui.toml.example +0 -0
  849. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tui/src/app/audit.rs +0 -0
  850. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tui/src/app/chat.rs +0 -0
  851. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tui/src/app/data.rs +0 -0
  852. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tui/src/app/dialogs.rs +0 -0
  853. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tui/src/app/doc_tabs.rs +0 -0
  854. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tui/src/app/drive.rs +0 -0
  855. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tui/src/app/drive_queue.rs +0 -0
  856. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tui/src/app/escalation.rs +0 -0
  857. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tui/src/app/events.rs +0 -0
  858. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tui/src/app/fixtures.rs +0 -0
  859. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tui/src/app/fleet_health.rs +0 -0
  860. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tui/src/app/fleet_sessions.rs +0 -0
  861. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tui/src/app/fleet_terminals.rs +0 -0
  862. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tui/src/app/format.rs +0 -0
  863. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tui/src/app/milestone_dag.rs +0 -0
  864. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tui/src/app/mod.rs +0 -0
  865. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tui/src/app/msv.rs +0 -0
  866. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tui/src/app/pipeline.rs +0 -0
  867. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tui/src/app/plans.rs +0 -0
  868. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tui/src/app/render.rs +0 -0
  869. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tui/src/app/reports.rs +0 -0
  870. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tui/src/app/sessions.rs +0 -0
  871. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tui/src/app/settings_ui.rs +0 -0
  872. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tui/src/app/sidebar.rs +0 -0
  873. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tui/src/app/terminal.rs +0 -0
  874. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tui/src/app/tests.rs +0 -0
  875. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tui/src/app/types.rs +0 -0
  876. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tui/src/app/workspace.rs +0 -0
  877. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tui/src/bin/gtk.rs +0 -0
  878. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tui/src/commands.rs +0 -0
  879. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tui/src/lib.rs +0 -0
  880. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tui/src/main.rs +0 -0
  881. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tui/src/settings.rs +0 -0
  882. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/tui/tests/cli.rs +0 -0
  883. {code_coordinator-0.5.172 → code_coordinator-0.5.175}/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.172
3
+ Version: 0.5.175
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.172
3
+ Version: 0.5.175
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
@@ -810,6 +810,7 @@ tests/acceptance/ms-65/detail_substate_2285.rs
810
810
  tests/acceptance/ms-65/manifest.yml
811
811
  tests/acceptance/ms-65/pipeline_tabs_2284.rs
812
812
  tests/acceptance/ms-65/tabs_discoverability_2287.rs
813
+ tests/acceptance/ms-65/tabs_persistence_2286.rs
813
814
  tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen
814
815
  tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen
815
816
  tests/acceptance/ms-65/mocks/board-preview-tab.screen
@@ -456,6 +456,7 @@
456
456
  "tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen",
457
457
  "tests/acceptance/ms-65/pipeline_tabs_2284.rs",
458
458
  "tests/acceptance/ms-65/tabs_discoverability_2287.rs",
459
+ "tests/acceptance/ms-65/tabs_persistence_2286.rs",
459
460
  "tests/acceptance/ms-example/mocks/home-active.html",
460
461
  "tests/conftest.py",
461
462
  "tests/fixtures/board-pipeline-basic.json",
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "0.5.172",
2
+ "tag": "0.5.175",
3
3
  "distance": 0,
4
- "node": "gbab69913bc39627dc11bb77bed4e0e8c37519e6e",
4
+ "node": "g517152e1c6b8bcb5f78fa7edd29915934fa18cc9",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-19"
@@ -146,6 +146,49 @@ class GitHubCi:
146
146
  return True
147
147
 
148
148
  def list_checks_for_pr(self, repo: str, number: int) -> list[CheckRun]:
149
+ """Checks the merge gate evaluates — narrowed to what GitHub's own
150
+ branch protection actually REQUIRES, when that's determinable
151
+ (#2388/#2446).
152
+
153
+ A repo can report far more `gh pr checks` entries than GitHub's
154
+ required-status-check list (this repo: 9 reported, 5 required), and
155
+ every merge-gate predicate downstream of this method
156
+ (`failed_checks`, `in_flight_checks`, `checks_are_stale`) otherwise
157
+ waits on advisory jobs GitHub itself doesn't — a hung/flaky ADVISORY
158
+ check (e.g. `Acceptance (web)`, or an unconditional Playwright/
159
+ Chromium install with no timeout) then blocks `coord merge`
160
+ indefinitely even though the PR is already `MERGEABLE`. Never
161
+ filters (returns everything :meth:`list_all_checks_for_pr` does)
162
+ when the required list can't be determined — #1525's bias: unknown
163
+ reads as "wait on everything reported", not as a free pass to stop
164
+ waiting on something that might matter.
165
+
166
+ #2446: this is deliberately the ONLY narrowed view — see
167
+ :meth:`list_all_checks_for_pr` for the full, unfiltered set that
168
+ feeds `coord merge --plan`'s CI summary, so a regressed advisory
169
+ check stays visible to an operator even though it can no longer gate
170
+ a merge attempt.
171
+ """
172
+ checks = self._all_checks(repo, number)
173
+ required = self._required_contexts(repo)
174
+ if required:
175
+ return [c for c in checks if c.name in required]
176
+ return checks
177
+
178
+ def list_all_checks_for_pr(self, repo: str, number: int) -> list[CheckRun]:
179
+ """Every check `gh pr checks` reports, required or advisory (#2446).
180
+
181
+ Purely a visibility view — `coord merge --plan`/the TUI's CI badges
182
+ read this so a regressed ADVISORY check (one GitHub's branch
183
+ protection doesn't require, and :meth:`list_checks_for_pr` therefore
184
+ no longer waits on) is still something an operator can see, per
185
+ #2446's suggested fix: "still visible ... but should never gate a
186
+ merge attempt." Shares :meth:`list_checks_for_pr`'s cached fetch —
187
+ one `gh pr checks` subprocess call backs both views, never two.
188
+ """
189
+ return self._all_checks(repo, number)
190
+
191
+ def _all_checks(self, repo: str, number: int) -> list[CheckRun]:
149
192
  key = (repo, number)
150
193
  now = time.time()
151
194
  cached = self._cache.get(key)
@@ -367,7 +410,13 @@ class GitHubCi:
367
410
  return [_unreadable_check(repo, number, str(e))]
368
411
  if not isinstance(raw, list):
369
412
  return [_unreadable_check(repo, number, "gh pr checks returned non-list JSON")]
370
- checks = [
413
+ # #2446: `_all_checks` (this method's only caller) is the single
414
+ # unfiltered fetch shared by both `list_checks_for_pr` (narrowed to
415
+ # required contexts) and `list_all_checks_for_pr` (everything) — the
416
+ # required-contexts narrowing used to happen here, which meant an
417
+ # advisory check's regression was invisible everywhere, not just to
418
+ # the merge gate. See both methods' docstrings.
419
+ return [
371
420
  CheckRun(
372
421
  name=str(entry.get("name", "")),
373
422
  status=_status_from_bucket(str(entry.get("bucket", ""))),
@@ -380,22 +429,6 @@ class GitHubCi:
380
429
  for entry in raw
381
430
  if isinstance(entry, dict)
382
431
  ]
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
432
 
400
433
  def _required_contexts(self, repo: str) -> frozenset[str] | None:
401
434
  now = time.time()
@@ -125,6 +125,28 @@ class CiStore(Protocol):
125
125
 
126
126
  def list_checks_for_pr(self, repo: str, number: int) -> list[CheckRun]: ...
127
127
 
128
+ def list_all_checks_for_pr(self, repo: str, number: int) -> list[CheckRun]:
129
+ """Every check reported for *repo*/*number*, required or advisory
130
+ (#2446) — the unfiltered counterpart to :meth:`list_checks_for_pr`,
131
+ which narrows to what branch protection actually requires so the
132
+ merge gate never blocks on a merely-advisory check (see that
133
+ method's docstring on :class:`coord.ci_github.GitHubCi`).
134
+
135
+ Purely a visibility view: `coord merge --plan`'s CI summary reads
136
+ this so a regressed advisory check is still visible to an operator
137
+ even though it can no longer gate a merge attempt — matching what
138
+ GitHub's own merge button already allows.
139
+
140
+ Optional/duck-typed like :meth:`rerun_failed_for_pr` — call sites
141
+ use ``getattr(ci_store, "list_all_checks_for_pr", None)`` and fall
142
+ back to :meth:`list_checks_for_pr` for a stand-in (a test stub, or
143
+ :class:`coord.gate_snapshot.GateSnapshot` when its own snapshot
144
+ wasn't refreshed with the unfiltered view) that predates this
145
+ capability — read as "no separate advisory view available", not an
146
+ error.
147
+ """
148
+ ...
149
+
128
150
  @property
129
151
  def is_available(self) -> bool: ...
130
152
 
@@ -232,6 +254,11 @@ class NoOpCi:
232
254
  def list_checks_for_pr(self, repo: str, number: int) -> list[CheckRun]:
233
255
  return []
234
256
 
257
+ def list_all_checks_for_pr(self, repo: str, number: int) -> list[CheckRun]:
258
+ """No-op: CI gating is disabled entirely, so there is nothing to
259
+ show either the gate or an operator (#2446)."""
260
+ return []
261
+
235
262
  @property
236
263
  def is_available(self) -> bool:
237
264
  return False
@@ -944,6 +944,60 @@ def _reconcile_via_daemon(svc, params: dict) -> None:
944
944
  sys.exit(int(code))
945
945
 
946
946
 
947
+ def _ci_field(summary, name: str, default=0):
948
+ """Read *name* off a CI rollup, tolerating both shapes ``p.ci_summary``/
949
+ ``p.ci_summary_all`` can arrive in (#2446).
950
+
951
+ ``coord.merge_queue.plan()`` (the local, in-process path) hands back
952
+ real :class:`~coord.ci_store.CiCheckSummary` instances. ``coord merge
953
+ --plan`` against a daemon instead reconstructs ``PlannedMerge`` from the
954
+ ``/board`` JSON payload (``_show_plan_from_daemon`` below) — the server
955
+ side flattens each rollup with ``dataclasses.asdict`` and nothing
956
+ re-hydrates it, so on that path both fields arrive as plain ``dict``s
957
+ instead. ``summary`` is ``None`` on either path when there's nothing to
958
+ report (no PR yet, no ``ci_store``, …).
959
+ """
960
+ if summary is None:
961
+ return default
962
+ if isinstance(summary, dict):
963
+ return summary.get(name, default)
964
+ return getattr(summary, name, default)
965
+
966
+
967
+ def _advisory_ci_note(p) -> str:
968
+ """#2446: describe any check failing/still-running in the unfiltered
969
+ (required + advisory) CI rollup that the required-only rollup
970
+ (``p.ci_summary`` — the same view the merge gate itself evaluates)
971
+ doesn't already account for.
972
+
973
+ A regression here is on a check GitHub's own branch protection doesn't
974
+ require — `coord merge`'s gate correctly no longer blocks on it (see
975
+ ``coord.ci_github.GitHubCi.list_checks_for_pr``'s docstring), but an
976
+ operator staring at a READY row while a real job is red/hung nearby
977
+ still deserves to see it. Returns ``""`` when there's nothing extra to
978
+ report (no ``ci_summary_all``, or it agrees with ``ci_summary``).
979
+ """
980
+ if p.ci_summary_all is None:
981
+ return ""
982
+ req_failed = _ci_field(p.ci_summary, "failed")
983
+ req_running = _ci_field(p.ci_summary, "running")
984
+ req_failed_names = set(_ci_field(p.ci_summary, "failed_names", []) or [])
985
+ extra_failed = _ci_field(p.ci_summary_all, "failed") - req_failed
986
+ extra_running = _ci_field(p.ci_summary_all, "running") - req_running
987
+ if extra_failed <= 0 and extra_running <= 0:
988
+ return ""
989
+ all_failed_names = _ci_field(p.ci_summary_all, "failed_names", []) or []
990
+ advisory_failed_names = [n for n in all_failed_names if n not in req_failed_names]
991
+ bits = []
992
+ if advisory_failed_names:
993
+ bits.append("failing: " + ", ".join(advisory_failed_names))
994
+ elif extra_failed > 0:
995
+ bits.append(f"{extra_failed} failing")
996
+ if extra_running > 0:
997
+ bits.append(f"{extra_running} running")
998
+ return " [advisory CI, not blocking — " + "; ".join(bits) + "]"
999
+
1000
+
947
1001
  def _print_merge_plan_entries(planned: list) -> None:
948
1002
  """Print a list of PlannedMerge entries grouped by repo → target_branch."""
949
1003
  if not planned:
@@ -963,7 +1017,7 @@ def _print_merge_plan_entries(planned: list) -> None:
963
1017
  _status_str = f"{_p.status} {_p.reason}"
964
1018
  click.echo(
965
1019
  f" {_p.rank}. #{_p.issue_number} {_size_str} "
966
- f"{_status_str} {_p.issue_title}"
1020
+ f"{_status_str} {_p.issue_title}{_advisory_ci_note(_p)}"
967
1021
  )
968
1022
 
969
1023
 
@@ -114,6 +114,7 @@ from coord.failure_class import (
114
114
  plan_usage_limit_resume,
115
115
  )
116
116
  from coord.models import DELIVERABLE_ANALYSIS_LABEL, POLICY_REFUSAL_MARKER
117
+ from coord.self_health import self_freshness
117
118
  from coord.usage_limits import PlanLimits, evaluate_usage_gate, get_plan_limits
118
119
  # Lost in the #1584-onto-#1590 rebase: _decide_review() calls this, but the
119
120
  # import lived in a hunk #1590 rewrote, so the merge came out textually clean
@@ -181,6 +182,20 @@ EXIT_DISPATCH_REFUSED = 5
181
182
  # vimcode#635 for the two live incidents (140 minutes and ~25 minutes of a
182
183
  # held queue slot, respectively, producing nothing).
183
184
  EXIT_DEAD_END = 6
185
+ # #2443: a deliberate SELF-HEAL exit, not a failure — the drive loop noticed
186
+ # it was stuck repeating the identical WAIT reason (see `_SELF_HEAL_WAIT_
187
+ # STREAK`) while its OWN on-disk `coord` install had moved since this
188
+ # session started. Python never reloads an already-imported module, so a
189
+ # fix landing mid-run is otherwise invisible to a live session for as long
190
+ # as `--deadline` allows — the claude-coordinator#2286 incident this closes
191
+ # polled one unfetchable path every ~60s for 2+ hours after the fix was
192
+ # already on disk. Distinct from EXIT_DISPATCH_REFUSED/EXIT_DEAD_END on
193
+ # purpose: this condition is NOT permanent — relaunching is exactly the fix
194
+ # — so it must fall through `coord.drive_queue._reconcile_running`'s
195
+ # ordinary `retry` branch rather than either of those two `blocked`
196
+ # branches, which is why nothing in drive_queue.py needs to special-case
197
+ # this code at all.
198
+ EXIT_SELF_STALE = 7
184
199
 
185
200
 
186
201
  class DriveError(Exception):
@@ -218,6 +233,31 @@ _CAPTURED_OUTPUT_LIMIT = 4000
218
233
  # never *tightened* for the environmental case.
219
234
  _ENVIRONMENTAL_WORK_RETRY_BUDGET = 5
220
235
 
236
+ # #2443: how many CONSECUTIVE polls of the IDENTICAL `Action.label` to
237
+ # tolerate before `Driver._loop` checks whether its own on-disk `coord`
238
+ # install has moved since this session started. Below this, a same-label
239
+ # repeat is indistinguishable from an ordinary slow-but-progressing wait (a
240
+ # 10-20 minute test, a slow CI check) and checking would just be wasted
241
+ # subprocess calls; at/above it, the check itself is a single local `git
242
+ # rev-parse HEAD` (no network — see `coord.self_health.self_freshness
243
+ # (fetch=False)`), cheap enough to run on every remaining poll of the
244
+ # streak. At the default `--poll` of 60s this is ~10 minutes — fast enough
245
+ # to matter against a multi-hour `--deadline`, slow enough that a routine
246
+ # wait is never mistaken for the stuck case this exists to catch.
247
+ _SELF_HEAL_WAIT_STREAK = 10
248
+
249
+
250
+ def _current_self_head() -> str | None:
251
+ """Real default for `Driver.self_head_probe` (#2443): THIS process's own
252
+ on-disk `coord` install's current HEAD, or ``None`` when it can't be
253
+ determined (not a git checkout, unreadable HEAD — see
254
+ :func:`coord.self_health.self_freshness`). ``fetch=False``: this only
255
+ needs to notice code that has ALREADY landed locally (e.g. a prior `git
256
+ pull`), never reaches the network, and therefore never blocks the poll
257
+ loop on a slow/unreachable origin.
258
+ """
259
+ return self_freshness(fetch=False).head_sha
260
+
221
261
 
222
262
  def _bounded_tail(text: str, limit: int = _CAPTURED_OUTPUT_LIMIT) -> str:
223
263
  """*text*, or its last *limit* characters if longer — the tail, because
@@ -3685,8 +3725,19 @@ class Driver:
3685
3725
  # real `claude -p "/usage"` subprocess — mirrors *verifier*/*oracle_gate*
3686
3726
  # above. Defaults to the real (cached, ~60s) probe.
3687
3727
  usage_prober: Callable[[], PlanLimits] = get_plan_limits
3728
+ # #2443: injected so tests can script a fake on-disk HEAD sequence
3729
+ # without a real git checkout — same shape as *usage_prober* above.
3730
+ # Defaults to the real, local-only (`fetch=False`) probe.
3731
+ self_head_probe: Callable[[], str | None] = _current_self_head
3688
3732
 
3689
3733
  _run_log: Path | None = field(default=None, init=False, repr=False)
3734
+ # #2443: this session's own on-disk `coord` HEAD, captured once by
3735
+ # `_loop()` right as the poll loop begins — the baseline every later
3736
+ # `_self_heal_drift_message` check compares against. `None` when it
3737
+ # could not be determined (not a git checkout, unreadable HEAD), which
3738
+ # keeps the self-heal check permanently a no-op for this run rather than
3739
+ # ever comparing against a placeholder.
3740
+ _start_head_sha: str | None = field(default=None, init=False, repr=False)
3690
3741
  # #1499: the terminating Action's own message, captured by `_loop()` right
3691
3742
  # before it returns — `run()` folds this into the `drive_exited` audit
3692
3743
  # summary/details so a non-exceptional terminal exit (e.g. `decide()`
@@ -3818,6 +3869,36 @@ class Driver:
3818
3869
  finally:
3819
3870
  lock.release()
3820
3871
 
3872
+ # ── self-heal (#2443) ──────────────────────────────────────────────
3873
+ def _self_heal_drift_message(self, label: str, streak: int) -> str | None:
3874
+ """Has THIS process's own on-disk ``coord`` install moved since this
3875
+ drive session started? ``None`` when it hasn't — or when freshness
3876
+ can't be determined at all, which must never be misread as drift —
3877
+ the overwhelmingly common case, so the caller just keeps waiting
3878
+ exactly as before.
3879
+
3880
+ Only ever consulted once *label* (a WAIT ``Action``'s own reason)
3881
+ has repeated *streak* times in a row (``_loop``'s
3882
+ ``_SELF_HEAL_WAIT_STREAK`` gate) — this is specifically the #2286
3883
+ shape: ``_decide_acceptance_author``'s "could not verify commits
3884
+ (git fetch failed), retrying" arm returned the IDENTICAL label every
3885
+ ~60s for 2+ hours after the fix that would have resolved it had
3886
+ already landed on disk, because Python never reloads an
3887
+ already-imported module. A stale in-memory `coord/drive.py` has no
3888
+ way to notice that on its own — this is the bounded check that lets
3889
+ it notice anyway.
3890
+ """
3891
+ current = self.self_head_probe()
3892
+ if not current or not self._start_head_sha or current == self._start_head_sha:
3893
+ return None
3894
+ return (
3895
+ "code changed underneath this session — on-disk coord moved "
3896
+ f"from {self._start_head_sha[:8]} to {current[:8]} while stuck "
3897
+ f"repeating the same wait {streak}x: {label!r}. Exiting "
3898
+ "(EXIT_SELF_STALE) so coord drive-queue relaunches with "
3899
+ f"current code instead of continuing to wait on stale logic (#2443)."
3900
+ )
3901
+
3821
3902
  def _post_escalation_comment(self, state: IssueState, message: str) -> None:
3822
3903
  """#1526: durably surface an escalation's reason onto the issue
3823
3904
  itself, not just this run's tmux pane and the ``coord escalate``
@@ -4061,6 +4142,15 @@ class Driver:
4061
4142
  # nudge) while guaranteeing a stalled stage is never more than one
4062
4143
  # `stall_secs` window away from a fresh check.
4063
4144
  last_nudge: float | None = None
4145
+ # #2443: this session's own on-disk `coord` HEAD, captured once,
4146
+ # right as the poll loop begins — see `_self_heal_drift_message`.
4147
+ self._start_head_sha = self.self_head_probe()
4148
+ # A distinct object (never equal to any real `Action.label`, empty
4149
+ # string included) so the very first WAIT of the run always starts
4150
+ # its streak at 1 rather than accidentally matching an unset
4151
+ # sentinel.
4152
+ last_wait_label: object = object()
4153
+ same_wait_streak = 0
4064
4154
 
4065
4155
  while True:
4066
4156
  now = self.clock()
@@ -4155,6 +4245,36 @@ class Driver:
4155
4245
  for warning in action.warnings:
4156
4246
  self.warn(warning)
4157
4247
 
4248
+ # #2443: self-heal — see `_self_heal_drift_message`. Tracked off
4249
+ # the Action's own `label`, NOT `fingerprint` above: a WAIT can
4250
+ # (and, in the #2286 shape, does) repeat the identical reason
4251
+ # poll after poll while the board fingerprint itself is static
4252
+ # for the same underlying reason, so this is really the same
4253
+ # signal — but keying directly on what the loop is ABOUT TO DO
4254
+ # keeps this correct even for a WAIT arm whose label happens to
4255
+ # be static text unrelated to fingerprint (e.g. "TEST: in
4256
+ # progress on a capability-matched machine") without needing to
4257
+ # reason about the two staying in lockstep. A non-WAIT action
4258
+ # (RUN or EXIT) always resets the streak: dispatching something
4259
+ # is progress by definition.
4260
+ if action.kind == WAIT:
4261
+ if action.label == last_wait_label:
4262
+ same_wait_streak += 1
4263
+ else:
4264
+ last_wait_label = action.label
4265
+ same_wait_streak = 1
4266
+ if same_wait_streak >= _SELF_HEAL_WAIT_STREAK:
4267
+ drift = self._self_heal_drift_message(
4268
+ action.label, same_wait_streak
4269
+ )
4270
+ if drift:
4271
+ self._last_exit_message = drift
4272
+ self.warn(drift)
4273
+ return EXIT_SELF_STALE
4274
+ else:
4275
+ last_wait_label = object()
4276
+ same_wait_streak = 0
4277
+
4158
4278
  if action.is_exit:
4159
4279
  # #1499: capture the exit reason for the audit boundary before
4160
4280
  # anything below can fail — the escalation write is explicitly
@@ -136,6 +136,16 @@ class GateSnapshot:
136
136
  """
137
137
 
138
138
  checks: dict[tuple[str, int], list[CheckRun]] = field(default_factory=dict)
139
+ # #2446: the unfiltered counterpart to `checks` above — `checks` is
140
+ # already narrowed to branch-protection-required contexts (see
141
+ # `coord.ci_github.GitHubCi.list_checks_for_pr`'s docstring), so a
142
+ # regressed ADVISORY check (one GitHub's own merge button doesn't wait
143
+ # on either) would otherwise be invisible to `coord merge --plan`'s CI
144
+ # summary, not just to the merge gate. Populated from
145
+ # `list_all_checks_for_pr` when the inner `CiStore` offers it; falls
146
+ # back to the same (already-narrowed) data as `checks` for a backend
147
+ # that doesn't, same fail-open shape as `workflows_declared` below.
148
+ all_checks: dict[tuple[str, int], list[CheckRun]] = field(default_factory=dict)
139
149
  commit_messages: dict[tuple[str, int], list[str]] = field(default_factory=dict)
140
150
  epic_issues: dict[tuple[str, int], bool] = field(default_factory=dict)
141
151
  # #1640: (repo, branch) -> HEAD SHA, and (repo, base, head) -> patch-id,
@@ -180,6 +190,19 @@ class GateSnapshot:
180
190
  return [_stale_check(age)]
181
191
  return self.checks.get((repo, number), [])
182
192
 
193
+ def list_all_checks_for_pr(self, repo: str, number: int) -> list[CheckRun]:
194
+ """Unfiltered counterpart to :meth:`list_checks_for_pr` (#2446) —
195
+ same staleness handling, but keyed off ``all_checks`` so an
196
+ advisory check's regression stays visible to `coord merge --plan`
197
+ even though `list_checks_for_pr` (the gate's own view) no longer
198
+ waits on it.
199
+ """
200
+ if self.ci_available:
201
+ age = None if self.refreshed_at is None else time.time() - self.refreshed_at
202
+ if age is None or age > STALE_AFTER_SECONDS:
203
+ return [_stale_check(age)]
204
+ return self.all_checks.get((repo, number), [])
205
+
183
206
  def expects_checks(self, repo: str, number: int) -> bool:
184
207
  # #1904: unlike `list_checks_for_pr`'s "unknown reads as failing"
185
208
  # (#1525) posture, a repo this snapshot hasn't cached an answer for
@@ -286,6 +309,7 @@ class GateSnapshotRefresher:
286
309
  entries = [e for e in pending if e.pr_number]
287
310
 
288
311
  checks: dict[tuple[str, int], list[CheckRun]] = {}
312
+ all_checks: dict[tuple[str, int], list[CheckRun]] = {}
289
313
  messages: dict[tuple[str, int], list[str]] = {}
290
314
  epics: dict[tuple[str, int], bool] = {}
291
315
  branch_shas: dict[tuple[str, str], str | None] = {}
@@ -342,6 +366,21 @@ class GateSnapshotRefresher:
342
366
  checks[key] = inner.list_checks_for_pr(*key)
343
367
  except Exception: # noqa: BLE001 — fail-open for this entry
344
368
  checks[key] = []
369
+ # #2446: the unfiltered view backing `coord merge --plan`'s
370
+ # CI summary — see `GateSnapshot.all_checks`'s field
371
+ # comment. `list_all_checks_for_pr` is optional/duck-typed
372
+ # (a `CiStore` stand-in that predates #2446 doesn't offer
373
+ # it); falling back to the already-fetched `checks[key]`
374
+ # degrades to "advisory checks aren't shown separately",
375
+ # never to an extra `gh` call or a missing key.
376
+ list_all = getattr(inner, "list_all_checks_for_pr", None)
377
+ if list_all is not None:
378
+ try:
379
+ all_checks[key] = list_all(*key)
380
+ except Exception: # noqa: BLE001 — fail-open for this entry
381
+ all_checks[key] = checks[key]
382
+ else:
383
+ all_checks[key] = checks[key]
345
384
  # #1904: repo-wide, so dedupe across every pending entry in
346
385
  # the same repo — one `gh api .../actions/workflows` call
347
386
  # per repo per tick, not one per PR. A failure here reads
@@ -372,6 +411,7 @@ class GateSnapshotRefresher:
372
411
 
373
412
  snap = GateSnapshot(
374
413
  checks=checks,
414
+ all_checks=all_checks,
375
415
  commit_messages=messages,
376
416
  epic_issues=epics,
377
417
  branch_shas=branch_shas,
@@ -3984,6 +3984,20 @@ class PlannedMerge:
3984
3984
  # when no PR is open yet, or `ci_store` has no checks for this PR.
3985
3985
  pr_number: int | None = None
3986
3986
  ci_summary: "CiCheckSummary | None" = None
3987
+ # #2446: the unfiltered (required + advisory) counterpart to
3988
+ # `ci_summary` above, which is narrowed to what GitHub's branch
3989
+ # protection actually requires — the same scope the merge gate itself
3990
+ # evaluates (see `_entry_gate_status`/`coord.ci_github.GitHubCi.
3991
+ # list_checks_for_pr`'s docstrings). A merely-advisory check regressing
3992
+ # (a flaky/hung job the branch's own protection rules don't wait on
3993
+ # either) must never gate a merge attempt, but it's still worth an
3994
+ # operator seeing — this is what `coord merge --plan` renders that from.
3995
+ # `None` under the same conditions as `ci_summary` (no PR yet, or no
3996
+ # `ci_store`); a `CiStore` that predates `list_all_checks_for_pr` yields
3997
+ # the same value as `ci_summary` rather than `None`, so a plan built
3998
+ # against an older store still shows *something* instead of silently
3999
+ # losing the badge.
4000
+ ci_summary_all: "CiCheckSummary | None" = None
3987
4001
  # #2397: mirrors `config.merge.auto_drain` (default False) at plan-build
3988
4002
  # time — read-only exposure, no gate-logic change. The TUI's per-issue
3989
4003
  # Merge stage box needs this to tell "nothing retries until a human runs
@@ -4101,6 +4115,7 @@ def plan(
4101
4115
  reason: str | None = None
4102
4116
 
4103
4117
  ci_summary = None
4118
+ ci_summary_all = None
4104
4119
  if entry.state == PENDING:
4105
4120
  base_status, reason = _entry_gate_status(
4106
4121
  entry, board, config, ci_store, gh_ops
@@ -4126,11 +4141,43 @@ def plan(
4126
4141
  # only ever populates checks for entries that are PENDING at
4127
4142
  # refresh time, so a MERGING/MERGED row never had real
4128
4143
  # snapshot data to render in the first place.
4144
+ #
4145
+ # #2446: `ci_summary` MUST stay derived from the same
4146
+ # (already required-narrowed) `list_checks_for_pr` view
4147
+ # `_entry_gate_status` just consulted above — do not widen it
4148
+ # to the unfiltered check list. `coord.drive_queue
4149
+ # ._ci_rollup_all_clear` reads this exact field as positive
4150
+ # evidence that a frozen "CI running:" raw-row string has
4151
+ # gone stale, and that evidence is only valid when it is
4152
+ # counting the SAME checks the live gate decision is based
4153
+ # on (see that function's docstring); widening it here would
4154
+ # make a still-pending ADVISORY check block the #2158
4155
+ # park-recovery self-heal even though the gate itself (and
4156
+ # GitHub's own merge button) is already clear. Advisory
4157
+ # visibility is a genuinely separate concern — see
4158
+ # `ci_summary_all` below.
4129
4159
  if ci_store is not None and ci_store.is_available and entry.pr_number:
4130
4160
  checks = ci_store.list_checks_for_pr(entry.repo_github, entry.pr_number)
4131
4161
  if checks:
4132
4162
  ci_summary = summarize_counts(checks)
4133
4163
 
4164
+ # #2446: the unfiltered (required + advisory) rollup —
4165
+ # pure visibility, never consulted by any gate decision
4166
+ # or self-heal evidence. Lets `coord merge --plan`/the
4167
+ # TUI still show a regressed advisory check (e.g.
4168
+ # `Acceptance (web)`) even though it can no longer block
4169
+ # `_entry_gate_status` above or the #2158 recovery read
4170
+ # above. Falls back to `ci_summary` for a `CiStore`
4171
+ # stand-in that predates `list_all_checks_for_pr`.
4172
+ list_all = getattr(ci_store, "list_all_checks_for_pr", None)
4173
+ all_checks = (
4174
+ list_all(entry.repo_github, entry.pr_number)
4175
+ if list_all is not None
4176
+ else checks
4177
+ )
4178
+ if all_checks:
4179
+ ci_summary_all = summarize_counts(all_checks)
4180
+
4134
4181
  result.append(PlannedMerge(
4135
4182
  assignment_id=entry.assignment_id,
4136
4183
  repo_name=entry.repo_name,
@@ -4145,6 +4192,7 @@ def plan(
4145
4192
  reason=reason,
4146
4193
  pr_number=entry.pr_number,
4147
4194
  ci_summary=ci_summary,
4195
+ ci_summary_all=ci_summary_all,
4148
4196
  enqueued_at=entry.enqueued_at,
4149
4197
  last_attempt=entry.last_attempt,
4150
4198
  milestone=milestones.get((entry.repo_name, entry.issue_number)),
@@ -44,6 +44,23 @@ doc's guess) and reports STALE with a commit count when it hasn't been pulled
44
44
  since a `coord/**` fix merged — the checkable gate for this row, the same way
45
45
  `coord diagnose --graph` is the checkable gate for graphify freshness.
46
46
 
47
+ **#2443: a LIVE `coord drive` session now self-heals mid-run too.** #2436
48
+ above only helps *before* a new launch — it says nothing about a session
49
+ that was already running, with the OLD code loaded into memory, when the fix
50
+ landed. Python never reloads an already-imported module, so a stale live
51
+ session has no way to notice a fix on its own. `coord/drive.py`'s poll loop
52
+ now watches its own `WAIT` actions: once the identical wait reason repeats
53
+ `_SELF_HEAL_WAIT_STREAK` (10) polls in a row, it compares its own on-disk
54
+ `coord` HEAD (captured once, at session start) against the current one
55
+ (`coord.self_health.self_freshness(fetch=False)` — a local `git rev-parse
56
+ HEAD`, no network). If the checkout moved underneath it, the session exits
57
+ `EXIT_SELF_STALE` — a clean, non-permanent exit `coord drive-queue`'s
58
+ ordinary retry/relaunch path picks straight back up under the current code —
59
+ instead of continuing to poll dead logic for the rest of `--deadline`. This
60
+ is the actual fix for the incident #2436 diagnosed after the fact: a live
61
+ session on dellserver polled one unfetchable path every ~60s for 2+ hours
62
+ after the #2319/#2320 fix that would have resolved it was already on disk.
63
+
47
64
  Not academic. #1394 (worker strands uncommitted work, then cleanup destroys it)
48
65
  sat merged-but-undeployed, and the very next dispatch — #1402 — hit the
49
66
  identical bug: **$3.44 and 10 minutes lost to something already fixed on