code-coordinator 0.5.150__tar.gz → 0.5.153__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 (870) hide show
  1. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. code_coordinator-0.5.153/code_coordinator.egg-info/scm_version.json +8 -0
  4. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/commands/drive_queue.py +54 -10
  5. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/drive_queue.py +13 -0
  6. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_cli_drive_queue.py +59 -0
  7. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_drive_queue.py +110 -0
  8. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tui/src/app/data.rs +13 -1
  9. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tui/src/app/dialogs.rs +147 -0
  10. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tui/src/app/doc_tabs.rs +8 -7
  11. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tui/src/app/events.rs +103 -2
  12. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tui/src/app/fixtures.rs +1 -0
  13. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tui/src/app/format.rs +30 -0
  14. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tui/src/app/mod.rs +21 -1
  15. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tui/src/app/pipeline.rs +300 -20
  16. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tui/src/app/render.rs +97 -3
  17. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tui/src/app/sidebar.rs +2 -0
  18. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tui/src/app/tests.rs +305 -38
  19. code_coordinator-0.5.150/code_coordinator.egg-info/scm_version.json +0 -8
  20. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/.claude/commands/board.md +0 -0
  21. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/.claude/commands/complete-session.md +0 -0
  22. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/.claude/commands/coordinator.md +0 -0
  23. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/.githooks/_lib.sh +0 -0
  24. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/.githooks/post-checkout +0 -0
  25. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/.githooks/post-commit +0 -0
  26. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/.githooks/post-merge +0 -0
  27. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  28. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/.github/coord-ci-acceptance.yml +0 -0
  29. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/.github/workflows/acceptance-web.yml +0 -0
  30. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/.github/workflows/auto-release.yml +0 -0
  31. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/.github/workflows/cargo-test.yml +0 -0
  32. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/.github/workflows/publish.yml +0 -0
  33. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/.github/workflows/release-tui.yml +0 -0
  34. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/.github/workflows/test.yml +0 -0
  35. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/.gitignore +0 -0
  36. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/CLAUDE.md +0 -0
  37. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/GOAL.md +0 -0
  38. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/LICENSE +0 -0
  39. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/MANIFEST.in +0 -0
  40. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/README.md +0 -0
  41. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/code_coordinator.egg-info/SOURCES.txt +0 -0
  42. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/code_coordinator.egg-info/dependency_links.txt +0 -0
  43. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/code_coordinator.egg-info/entry_points.txt +0 -0
  44. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/code_coordinator.egg-info/requires.txt +0 -0
  45. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/code_coordinator.egg-info/scm_file_list.json +0 -0
  46. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/code_coordinator.egg-info/top_level.txt +0 -0
  47. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/__init__.py +0 -0
  48. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/_board_mapping.py +0 -0
  49. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/acceptance.py +0 -0
  50. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/acceptance_drivers.py +0 -0
  51. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/agent.py +0 -0
  52. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/agent_app.py +0 -0
  53. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/agent_update.py +0 -0
  54. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/agents/opencode/.gitignore +0 -0
  55. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/agents/opencode/agents/work.md +0 -0
  56. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/agents/opencode/routing.jsonc +0 -0
  57. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/audit.py +0 -0
  58. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/auto_loop.py +0 -0
  59. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/block_log.py +0 -0
  60. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/board_bool_guard.py +0 -0
  61. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/board_service.py +0 -0
  62. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/board_wire.py +0 -0
  63. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/brain.py +0 -0
  64. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/branch_model.py +0 -0
  65. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/bug_intake.py +0 -0
  66. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/cargo_cache.py +0 -0
  67. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/ci_github.py +0 -0
  68. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/ci_store.py +0 -0
  69. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/claim.py +0 -0
  70. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/cli.py +0 -0
  71. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/client.py +0 -0
  72. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/commands/__init__.py +0 -0
  73. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/commands/_common.py +0 -0
  74. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/commands/acceptance.py +0 -0
  75. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/commands/agent_ops.py +0 -0
  76. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/commands/audit.py +0 -0
  77. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/commands/chat.py +0 -0
  78. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/commands/dispatch.py +0 -0
  79. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/commands/dispatch_workers.py +0 -0
  80. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/commands/drive.py +0 -0
  81. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/commands/gate_a.py +0 -0
  82. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/commands/gates.py +0 -0
  83. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/commands/issues.py +0 -0
  84. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/commands/lifecycle.py +0 -0
  85. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/commands/merge.py +0 -0
  86. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/commands/milestone.py +0 -0
  87. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/commands/plan_followup.py +0 -0
  88. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/commands/plans.py +0 -0
  89. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/commands/portal.py +0 -0
  90. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/commands/release.py +0 -0
  91. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/commands/repo.py +0 -0
  92. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/commands/report.py +0 -0
  93. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/commands/review.py +0 -0
  94. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/commands/scorecard.py +0 -0
  95. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/commands/sessions.py +0 -0
  96. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/commands/setup.py +0 -0
  97. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/commands/status.py +0 -0
  98. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/commands/terminal.py +0 -0
  99. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/commands/test_gate.py +0 -0
  100. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/commands/tui.py +0 -0
  101. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/comments.py +0 -0
  102. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/config.py +0 -0
  103. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/config_reload.py +0 -0
  104. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/conflict_fix.py +0 -0
  105. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dao.py +0 -0
  106. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/__init__.py +0 -0
  107. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/fixture.py +0 -0
  108. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/index.html +0 -0
  109. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/server.py +0 -0
  110. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/terminal.py +0 -0
  111. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/.gitignore +0 -0
  112. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/components.json +0 -0
  113. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/dist/assets/Gallery-BoKs3mpY.js +0 -0
  114. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
  115. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/dist/assets/Terminal-CEsP08iX.js +0 -0
  116. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/dist/assets/index-CDHPlB6k.js +0 -0
  117. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
  118. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
  119. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
  120. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
  121. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
  122. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/dist/index.html +0 -0
  123. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
  124. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/dist/sw.js +0 -0
  125. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
  126. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
  127. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
  128. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
  129. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
  130. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
  131. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
  132. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
  133. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
  134. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
  135. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/eslint.config.js +0 -0
  136. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/index.html +0 -0
  137. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
  138. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/package-lock.json +0 -0
  139. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/package.json +0 -0
  140. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
  141. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/playwright.config.ts +0 -0
  142. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/postcss.config.js +0 -0
  143. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
  144. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
  145. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
  146. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/src/App.tsx +0 -0
  147. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/src/api/client.ts +0 -0
  148. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/src/api/generated.ts +0 -0
  149. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
  150. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
  151. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
  152. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
  153. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
  154. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
  155. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
  156. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
  157. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
  158. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
  159. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
  160. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
  161. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
  162. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
  163. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
  164. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
  165. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
  166. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
  167. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
  168. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
  169. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
  170. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
  171. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
  172. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
  173. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
  174. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
  175. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
  176. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
  177. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
  178. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
  179. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
  180. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
  181. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
  182. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
  183. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/src/index.css +0 -0
  184. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
  185. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
  186. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/src/main.tsx +0 -0
  187. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
  188. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
  189. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
  190. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
  191. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
  192. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
  193. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
  194. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
  195. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
  196. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
  197. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
  198. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
  199. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
  200. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
  201. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
  202. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
  203. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
  204. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
  205. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
  206. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
  207. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
  208. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/src/test-setup.ts +0 -0
  209. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
  210. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/tailwind.config.js +0 -0
  211. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/tsconfig.json +0 -0
  212. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/tsconfig.node.json +0 -0
  213. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dashboard/webapp/vite.config.ts +0 -0
  214. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/db.py +0 -0
  215. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dead_end.py +0 -0
  216. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/deploy/README.md +0 -0
  217. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/deploy/coord-agent.service +0 -0
  218. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/deploy/coord-db-backup.service +0 -0
  219. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/deploy/coord-db-backup.sh +0 -0
  220. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/deploy/coord-db-backup.timer +0 -0
  221. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/deploy/coord-drive-queue.service +0 -0
  222. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/deploy/coord-drive-queue.timer +0 -0
  223. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/deploy/coord-notify.service +0 -0
  224. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/deploy/coord-notify.timer +0 -0
  225. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/deploy/coord-release-propagate.service +0 -0
  226. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/deploy/coord-release-propagate.timer +0 -0
  227. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/deploy/coord-release-window.service +0 -0
  228. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/deploy/coord-release-window.timer +0 -0
  229. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/deploy/coord-serve.service +0 -0
  230. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/deploy/coord-web-dist-build.service +0 -0
  231. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/deploy/coord-web-dist-build.timer +0 -0
  232. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/deploy/coord-web.service +0 -0
  233. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/deploy_manifest.py +0 -0
  234. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/deploy_units.py +0 -0
  235. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/deps.py +0 -0
  236. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/diagnose.py +0 -0
  237. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dispatch.py +0 -0
  238. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/dist_name.py +0 -0
  239. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/drive.py +0 -0
  240. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/drive_state.py +0 -0
  241. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/events.py +0 -0
  242. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/failure_class.py +0 -0
  243. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/filelock.py +0 -0
  244. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/fleet_config_health.py +0 -0
  245. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/freshness.py +0 -0
  246. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/gate_a.py +0 -0
  247. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/gate_b.py +0 -0
  248. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/gate_snapshot.py +0 -0
  249. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/gates.py +0 -0
  250. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/github_ops.py +0 -0
  251. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/goal.py +0 -0
  252. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/graph_health.py +0 -0
  253. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/health/__init__.py +0 -0
  254. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/health/aggregate.py +0 -0
  255. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/health/checks/__init__.py +0 -0
  256. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/health/checks/agent_install.py +0 -0
  257. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/health/checks/cargo_targets.py +0 -0
  258. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/health/checks/claude_binary.py +0 -0
  259. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/health/checks/deploy_lane_facts.py +0 -0
  260. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/health/checks/disk.py +0 -0
  261. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/health/checks/fleet_board.py +0 -0
  262. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  263. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/health/checks/fleet_phantom.py +0 -0
  264. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/health/checks/fleet_unit_drift.py +0 -0
  265. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/health/checks/graph.py +0 -0
  266. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/health/checks/graphify_cli.py +0 -0
  267. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/health/checks/index_lock.py +0 -0
  268. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/health/checks/plan_usage.py +0 -0
  269. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/health/checks/repo_state.py +0 -0
  270. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/health/checks/spawned_coord.py +0 -0
  271. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/health/checks/timer_active.py +0 -0
  272. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/health/checks/toolchain.py +0 -0
  273. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/health/checks/unit_drift.py +0 -0
  274. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/health/checks/unit_enablement.py +0 -0
  275. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/health/checks/worktrees.py +0 -0
  276. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/health/cli.py +0 -0
  277. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/health/context.py +0 -0
  278. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/health/fleet_snapshot.py +0 -0
  279. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/health/models.py +0 -0
  280. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/health/pypi.py +0 -0
  281. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/health/registry.py +0 -0
  282. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/health/render.py +0 -0
  283. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/health/units.py +0 -0
  284. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/hooks.py +0 -0
  285. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/housekeeping.py +0 -0
  286. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/interactive.py +0 -0
  287. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/issue_store.py +0 -0
  288. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/liveness_auditor.py +0 -0
  289. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/machine_pause.py +0 -0
  290. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/merge_queue.py +0 -0
  291. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/milestone_chat.py +0 -0
  292. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/milestone_dispatch.py +0 -0
  293. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/milestone_gate.py +0 -0
  294. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/milestone_order.py +0 -0
  295. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/mock_author.py +0 -0
  296. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/models.py +0 -0
  297. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/network.py +0 -0
  298. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/new_issue_chat.py +0 -0
  299. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/notifier/__init__.py +0 -0
  300. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/notifier/baseline.py +0 -0
  301. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/notifier/cli.py +0 -0
  302. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/notifier/collect.py +0 -0
  303. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/notifier/digest.py +0 -0
  304. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/notifier/models.py +0 -0
  305. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/notifier/predicate.py +0 -0
  306. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/notifier/service.py +0 -0
  307. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/notifier/store.py +0 -0
  308. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/notifier/transport.py +0 -0
  309. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/notify.py +0 -0
  310. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/openapi.py +0 -0
  311. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/overlap_fence.py +0 -0
  312. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/overlap_predict.py +0 -0
  313. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/parentage.py +0 -0
  314. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/parentage_github.py +0 -0
  315. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/pipeline.py +0 -0
  316. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/plan_parser.py +0 -0
  317. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/plans.py +0 -0
  318. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/platform_paths.py +0 -0
  319. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/portal_bridge.py +0 -0
  320. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/portal_store.py +0 -0
  321. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/portal_sync.py +0 -0
  322. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/pr_body_lint.py +0 -0
  323. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/prereqs.py +0 -0
  324. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/progress.py +0 -0
  325. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/providers/__init__.py +0 -0
  326. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/providers/base.py +0 -0
  327. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/providers/claude.py +0 -0
  328. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/providers/claude_pty.py +0 -0
  329. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/providers/opencode.py +0 -0
  330. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/queue_diagnose.py +0 -0
  331. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/reconcile.py +0 -0
  332. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/reconcile_tick.py +0 -0
  333. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/refine_chat.py +0 -0
  334. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/release_cordon.py +0 -0
  335. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/release_propagate.py +0 -0
  336. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/release_verify.py +0 -0
  337. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/release_window.py +0 -0
  338. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/repo_edit.py +0 -0
  339. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/repo_onboard.py +0 -0
  340. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/reports.py +0 -0
  341. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/revalidate.py +0 -0
  342. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/review.py +0 -0
  343. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/scorecard.py +0 -0
  344. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/serve_app.py +0 -0
  345. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/skills/portal-followup/SKILL.md +0 -0
  346. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/skills/update-issue/SKILL.md +0 -0
  347. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/smoke.py +0 -0
  348. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/spend_ceiling.py +0 -0
  349. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/split_work.py +0 -0
  350. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/stage_projection.py +0 -0
  351. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/state.py +0 -0
  352. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/test_author.py +0 -0
  353. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/test_chat.py +0 -0
  354. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/test_orchestrator.py +0 -0
  355. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/test_report.py +0 -0
  356. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/tui_release.py +0 -0
  357. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/usage.py +0 -0
  358. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/usage_limits.py +0 -0
  359. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/usage_rollup.py +0 -0
  360. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coord/worker_events.py +0 -0
  361. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/coordinator.example.yml +0 -0
  362. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/deploy/coord-agent.service +0 -0
  363. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/deploy/coord-db-backup.service +0 -0
  364. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/deploy/coord-db-backup.sh +0 -0
  365. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/deploy/coord-db-backup.timer +0 -0
  366. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/deploy/coord-drive-queue.service +0 -0
  367. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/deploy/coord-drive-queue.timer +0 -0
  368. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/deploy/coord-notify.service +0 -0
  369. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/deploy/coord-notify.timer +0 -0
  370. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/deploy/coord-release-propagate.service +0 -0
  371. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/deploy/coord-release-propagate.timer +0 -0
  372. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/deploy/coord-release-window.service +0 -0
  373. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/deploy/coord-release-window.timer +0 -0
  374. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/deploy/coord-serve.service +0 -0
  375. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/deploy/coord-web-dist-build.service +0 -0
  376. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/deploy/coord-web-dist-build.sh +0 -0
  377. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/deploy/coord-web-dist-build.timer +0 -0
  378. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/deploy/coord-web-rollback.sh +0 -0
  379. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/deploy/coord-web.service +0 -0
  380. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/deploy/node-shim.sh +0 -0
  381. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/docs/ADR_COORD_WEB_DIST.md +0 -0
  382. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/docs/AGENT_OPERATIONS.md +0 -0
  383. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/docs/ARCHITECTURE.md +0 -0
  384. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/docs/ARCH_SECURITY_GATES.md +0 -0
  385. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/docs/COCKPIT.md +0 -0
  386. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/docs/CONTROL_CENTER.md +0 -0
  387. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/docs/COST_DISCIPLINE.md +0 -0
  388. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/docs/CROSS_PLATFORM.md +0 -0
  389. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/docs/CUSTOMER_PORTAL.md +0 -0
  390. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/docs/DRIVE_QUEUE.md +0 -0
  391. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/docs/EPHEMERAL_WORKERS.md +0 -0
  392. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/docs/FORGE_MIGRATION.md +0 -0
  393. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/docs/GRAPHIFY_SETUP.md +0 -0
  394. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/docs/ISSUE_GUIDANCE.md +0 -0
  395. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/docs/MAC_MINI.md +0 -0
  396. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  397. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/docs/NOTIFIER.md +0 -0
  398. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/docs/OPENCODE_VERIFICATION.md +0 -0
  399. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/docs/OPERATING_GOTCHAS.md +0 -0
  400. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/docs/ORACLE_LOOP.md +0 -0
  401. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/docs/PHONE_WEBAPP.md +0 -0
  402. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/docs/PIPELINE_V2.md +0 -0
  403. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/docs/PLATFORM_EVOLUTION.md +0 -0
  404. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/docs/SECOND_BACKEND.md +0 -0
  405. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/docs/STORE_SERVICE.md +0 -0
  406. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  407. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/docs/WEB_CONTROL_CENTER.md +0 -0
  408. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/docs/WSL_WINDOWS_WORKER.md +0 -0
  409. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/docs/mocks/web/README.md +0 -0
  410. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/docs/mocks/web/_tokens.css +0 -0
  411. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/docs/mocks/web/issue-detail.html +0 -0
  412. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/docs/mocks/web/pipeline-narrow.html +0 -0
  413. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/docs/mocks/web/pipeline-wide.html +0 -0
  414. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/graphify-out/.gitignore +0 -0
  415. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/install-agent.sh +0 -0
  416. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/pyproject.toml +0 -0
  417. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/scripts/audit_review_verdict_overrides.py +0 -0
  418. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  419. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/scripts/azure-workers/build-worker-image.sh +0 -0
  420. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/scripts/azure-workers/coordinator-machine.py +0 -0
  421. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/scripts/azure-workers/epic-down.sh +0 -0
  422. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/scripts/azure-workers/epic-up.sh +0 -0
  423. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/scripts/azure-workers/preflight.sh +0 -0
  424. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/scripts/azure-workers/provision-worker.sh +0 -0
  425. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  426. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  427. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/scripts/azure-workers/verify-github-token.sh +0 -0
  428. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/scripts/codegen.py +0 -0
  429. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/scripts/coord-test-runner.sh +0 -0
  430. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/scripts/drive-batch.sh +0 -0
  431. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/scripts/gen_board_fixture.py +0 -0
  432. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/scripts/next_release_tag.py +0 -0
  433. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/scripts/run_tests_in_populated_home.sh +0 -0
  434. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/scripts/run_tests_without_gh.sh +0 -0
  435. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/scripts/smoke_437_interactive.py +0 -0
  436. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/scripts/verify_878_review_capture.py +0 -0
  437. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/scripts/verify_release_published.py +0 -0
  438. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/scripts/verify_release_wheel.py +0 -0
  439. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/setup.cfg +0 -0
  440. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/SMOKE_SET.md +0 -0
  441. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/__init__.py +0 -0
  442. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  443. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/acceptance/ms-33/contract.md +0 -0
  444. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/acceptance/ms-33/manifest.yml +0 -0
  445. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  446. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  447. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  448. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  449. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/acceptance/ms-37/conftest.py +0 -0
  450. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/acceptance/ms-37/contract.md +0 -0
  451. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/acceptance/ms-37/manifest.yml +0 -0
  452. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  453. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  454. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/acceptance/ms-38/contract.md +0 -0
  455. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/acceptance/ms-38/manifest.yml +0 -0
  456. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  457. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  458. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  459. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  460. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  461. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  462. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  463. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  464. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  465. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  466. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/acceptance/ms-51/contract.md +0 -0
  467. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  468. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  469. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/acceptance/ms-51/manifest.yml +0 -0
  470. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  471. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/acceptance/ms-51/tsconfig.json +0 -0
  472. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
  473. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
  474. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/acceptance/ms-65/contract.md +0 -0
  475. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/acceptance/ms-65/manifest.yml +0 -0
  476. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
  477. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
  478. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
  479. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
  480. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
  481. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
  482. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
  483. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
  484. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
  485. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  486. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/conftest.py +0 -0
  487. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/fixtures/board-pipeline-basic.json +0 -0
  488. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  489. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  490. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  491. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  492. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/fixtures/playwright/all_pass.json +0 -0
  493. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  494. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/fixtures/playwright/mixed_fail.json +0 -0
  495. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  496. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  497. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/fixtures/playwright/skip.json +0 -0
  498. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/fixtures/playwright/truncated.json +0 -0
  499. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  500. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  501. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  502. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  503. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  504. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  505. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  506. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  507. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_acceptance.py +0 -0
  508. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_acceptance_drivers.py +0 -0
  509. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_agent.py +0 -0
  510. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_agent_api_error.py +0 -0
  511. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_agent_app.py +0 -0
  512. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_agent_branch_base.py +0 -0
  513. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_agent_branch_capture.py +0 -0
  514. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_agent_config_free_1712.py +0 -0
  515. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_agent_deploy_units_endpoint.py +0 -0
  516. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_agent_dirty_worktree.py +0 -0
  517. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  518. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_agent_graph_self_heal.py +0 -0
  519. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_agent_health_h3.py +0 -0
  520. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_agent_idle_restart.py +0 -0
  521. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_agent_push_failure.py +0 -0
  522. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_agent_reap.py +0 -0
  523. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_agent_repos_and_pull.py +0 -0
  524. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_agent_restart_services_endpoint.py +0 -0
  525. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_agent_startup_diagnostics.py +0 -0
  526. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_agent_update.py +0 -0
  527. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_agent_update_bluegreen.py +0 -0
  528. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_agent_usage_limit.py +0 -0
  529. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_agent_zero_commit.py +0 -0
  530. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_ambient_home_isolation.py +0 -0
  531. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_approve_reject_plan.py +0 -0
  532. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_approve_usage_gate.py +0 -0
  533. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_assignment_already_recorded_daemon.py +0 -0
  534. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_audit_log.py +0 -0
  535. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_audit_outcome.py +0 -0
  536. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_audit_query.py +0 -0
  537. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_auto_loop.py +0 -0
  538. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_auto_release_publish_2035.py +0 -0
  539. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_base_checkout_restore.py +0 -0
  540. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_block_log.py +0 -0
  541. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_board_cap_762.py +0 -0
  542. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_board_fixture.py +0 -0
  543. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_board_read_path.py +0 -0
  544. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_board_service.py +0 -0
  545. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_board_state.py +0 -0
  546. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_board_wire.py +0 -0
  547. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_brain.py +0 -0
  548. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_branch_model.py +0 -0
  549. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_bug_intake.py +0 -0
  550. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_build_worker_image_env_update.py +0 -0
  551. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_cargo_cache.py +0 -0
  552. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_ci_acceptance_gate_1950.py +0 -0
  553. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_ci_parity_2091.py +0 -0
  554. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_ci_store.py +0 -0
  555. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_claim.py +0 -0
  556. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_cli_acceptance.py +0 -0
  557. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_cli_assign.py +0 -0
  558. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  559. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_cli_assign_interactive_remote.py +0 -0
  560. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_cli_assign_provider.py +0 -0
  561. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  562. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_cli_audit.py +0 -0
  563. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_cli_chat_continue.py +0 -0
  564. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_cli_decide.py +0 -0
  565. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_cli_diagnose_config_provenance.py +0 -0
  566. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_cli_diagnose_graph.py +0 -0
  567. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_cli_doctor.py +0 -0
  568. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_cli_doctor_config_free_1801.py +0 -0
  569. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  570. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_cli_drive.py +0 -0
  571. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_cli_escalate.py +0 -0
  572. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_cli_fix_headless_review.py +0 -0
  573. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_cli_gate_a.py +0 -0
  574. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_cli_install_drift.py +0 -0
  575. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_cli_install_skills.py +0 -0
  576. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_cli_issue_create_label.py +0 -0
  577. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_cli_issue_reopen.py +0 -0
  578. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_cli_merge.py +0 -0
  579. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_cli_milestone_assign.py +0 -0
  580. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_cli_milestone_capture.py +0 -0
  581. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_cli_milestone_chat_add_child.py +0 -0
  582. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_cli_milestone_dispatch.py +0 -0
  583. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_cli_milestone_gate_b.py +0 -0
  584. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_cli_milestone_gate_c.py +0 -0
  585. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_cli_milestone_order.py +0 -0
  586. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  587. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_cli_milestone_ship.py +0 -0
  588. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_cli_network.py +0 -0
  589. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_cli_new_issue_chat.py +0 -0
  590. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_cli_plans.py +0 -0
  591. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_cli_portal.py +0 -0
  592. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_cli_pull_artifact.py +0 -0
  593. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_cli_queue.py +0 -0
  594. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_cli_reattach_sessions.py +0 -0
  595. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_cli_refine_board.py +0 -0
  596. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_cli_release_preflight.py +0 -0
  597. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_cli_release_propagate.py +0 -0
  598. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_cli_release_window.py +0 -0
  599. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_cli_repo_2220.py +0 -0
  600. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_cli_scorecard.py +0 -0
  601. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_cli_set_review_findings.py +0 -0
  602. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_cli_status_advisory_terminal.py +0 -0
  603. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_cli_status_merge_queue.py +0 -0
  604. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_cli_status_provider.py +0 -0
  605. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_cli_status_review_finalizing.py +0 -0
  606. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_cli_status_test_failed_tag.py +0 -0
  607. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_cli_status_usage_limit.py +0 -0
  608. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_cli_sync_comments_873.py +0 -0
  609. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_cli_test_plan.py +0 -0
  610. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_cli_track.py +0 -0
  611. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_cli_tui_update.py +0 -0
  612. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_cli_wait.py +0 -0
  613. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_client_base_install.py +0 -0
  614. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_comments.py +0 -0
  615. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_completion_summary.py +0 -0
  616. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_config.py +0 -0
  617. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_config_acceptance.py +0 -0
  618. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_config_audit.py +0 -0
  619. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_config_pricing.py +0 -0
  620. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  621. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_config_usage_gate.py +0 -0
  622. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_conflict_fix.py +0 -0
  623. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_conflict_fix_semantic.py +0 -0
  624. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_coord_test.py +0 -0
  625. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_coord_test_runner_baseline.py +0 -0
  626. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_coord_test_runner_populated_home.py +0 -0
  627. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_coord_test_runner_routing.py +0 -0
  628. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_coord_test_runner_toolchain.py +0 -0
  629. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_coord_web_sse_restart_live.py +0 -0
  630. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_coordinator_machine.py +0 -0
  631. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_cross_platform_imports.py +0 -0
  632. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_dashboard.py +0 -0
  633. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_dashboard_fixture.py +0 -0
  634. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_dashboard_terminal.py +0 -0
  635. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_dashboard_terminal_live.py +0 -0
  636. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_db.py +0 -0
  637. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_dead_end.py +0 -0
  638. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_deploy_coord_db_backup.py +0 -0
  639. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_deploy_coord_web_dist.py +0 -0
  640. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_deploy_coord_web_rollback.py +0 -0
  641. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_deploy_drive_queue_unit.py +0 -0
  642. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_deploy_manifest.py +0 -0
  643. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_deploy_units_lane.py +0 -0
  644. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_deploy_web_unit.py +0 -0
  645. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_deps.py +0 -0
  646. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_diagnose.py +0 -0
  647. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_dispatch.py +0 -0
  648. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_dispatch_target_validation.py +0 -0
  649. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_dist_name.py +0 -0
  650. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_done_housekeeping.py +0 -0
  651. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_drive.py +0 -0
  652. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_drive_state.py +0 -0
  653. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_drive_tmux.py +0 -0
  654. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_epic_up_capability_detection.py +0 -0
  655. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  656. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_epic_up_image_provenance.py +0 -0
  657. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_errors.py +0 -0
  658. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_events.py +0 -0
  659. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_failure_class.py +0 -0
  660. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_filelock.py +0 -0
  661. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  662. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_fix_of_force_override.py +0 -0
  663. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_fleet_config_health.py +0 -0
  664. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_fleet_health_probes.py +0 -0
  665. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_fleet_health_snapshot.py +0 -0
  666. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_freshness.py +0 -0
  667. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_gate_a.py +0 -0
  668. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_gate_b.py +0 -0
  669. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_gate_snapshot_staleness.py +0 -0
  670. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_gates.py +0 -0
  671. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  672. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_generated_types_fixture.py +0 -0
  673. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_github_ops.py +0 -0
  674. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_goal.py +0 -0
  675. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_graph_health.py +0 -0
  676. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_graph_selfheal_absent_2237.py +0 -0
  677. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_handoff.py +0 -0
  678. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_health_checks.py +0 -0
  679. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_health_cli.py +0 -0
  680. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_health_cli_graph.py +0 -0
  681. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_health_config.py +0 -0
  682. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_health_context.py +0 -0
  683. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_health_deploy_lane_facts.py +0 -0
  684. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_health_incident_regression.py +0 -0
  685. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_health_pypi.py +0 -0
  686. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_health_registry.py +0 -0
  687. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_health_timer_active.py +0 -0
  688. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_health_toolchain.py +0 -0
  689. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_health_unit_drift.py +0 -0
  690. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_health_unit_enablement.py +0 -0
  691. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_hooks.py +0 -0
  692. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_human_attended_437.py +0 -0
  693. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_init.py +0 -0
  694. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_integration.py +0 -0
  695. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_interactive_briefing_echo.py +0 -0
  696. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_interactive_prefill_state.py +0 -0
  697. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_interactive_session_relaunch.py +0 -0
  698. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_interactive_test_verdict_backstop.py +0 -0
  699. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_interactive_token_attribution.py +0 -0
  700. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_interactive_worktree.py +0 -0
  701. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_issue_store_seam.py +0 -0
  702. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_liveness_auditor.py +0 -0
  703. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_liveness_notify.py +0 -0
  704. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_machine_pause.py +0 -0
  705. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_merge_queue.py +0 -0
  706. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_merge_verify.py +0 -0
  707. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_milestone_chat.py +0 -0
  708. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_milestone_dispatch.py +0 -0
  709. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_milestone_gate.py +0 -0
  710. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_milestone_order.py +0 -0
  711. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_milestone_seam.py +0 -0
  712. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_mock_author.py +0 -0
  713. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_model_tiering.py +0 -0
  714. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_models.py +0 -0
  715. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_models_config_labels.py +0 -0
  716. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_needs_attention.py +0 -0
  717. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_network.py +0 -0
  718. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_new_issue_chat.py +0 -0
  719. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_next_release_tag.py +0 -0
  720. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_no_direct_gh_calls.py +0 -0
  721. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_node_shim.py +0 -0
  722. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_notifier_baseline.py +0 -0
  723. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_notifier_cli.py +0 -0
  724. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_notifier_collect.py +0 -0
  725. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_notifier_config.py +0 -0
  726. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_notifier_drive_seam.py +0 -0
  727. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_notifier_isolation.py +0 -0
  728. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_notifier_predicate.py +0 -0
  729. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_notifier_quiet_hours.py +0 -0
  730. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_notifier_service.py +0 -0
  731. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_notify.py +0 -0
  732. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_notify_drain.py +0 -0
  733. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_openapi.py +0 -0
  734. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_operational_defaults.py +0 -0
  735. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_overlap_fence.py +0 -0
  736. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_overlap_predict.py +0 -0
  737. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_packaged_deploy_units.py +0 -0
  738. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_parentage.py +0 -0
  739. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_paste_landed.py +0 -0
  740. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_pipeline.py +0 -0
  741. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_plan_followup_approve_plan_command.py +0 -0
  742. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_plan_followup_pr_command.py +0 -0
  743. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_plan_followup_review_command.py +0 -0
  744. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_plan_only.py +0 -0
  745. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_plan_parser.py +0 -0
  746. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_platform_paths.py +0 -0
  747. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_portal_bridge.py +0 -0
  748. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_portal_config.py +0 -0
  749. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_portal_sync.py +0 -0
  750. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_pr_body_lint.py +0 -0
  751. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_prereqs.py +0 -0
  752. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_production_db_guard.py +0 -0
  753. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_progress.py +0 -0
  754. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_provider_seam.py +0 -0
  755. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_providers.py +0 -0
  756. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_providers_config_labels.py +0 -0
  757. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_providers_pty.py +0 -0
  758. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_quiet_hours.py +0 -0
  759. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_quiet_hours_store_2146.py +0 -0
  760. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_reap_merged_sessions.py +0 -0
  761. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_reap_stale_interactive_tick.py +0 -0
  762. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_reconcile.py +0 -0
  763. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_reconcile_branch.py +0 -0
  764. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_reconcile_completions.py +0 -0
  765. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_reconcile_merges.py +0 -0
  766. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_reconcile_no_agent_record.py +0 -0
  767. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_reconcile_tick.py +0 -0
  768. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_reconcile_usage_limit_done.py +0 -0
  769. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_refine_chat.py +0 -0
  770. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_release_cordon_2101.py +0 -0
  771. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  772. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_release_cordon_deadlock_2240.py +0 -0
  773. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_release_propagate.py +0 -0
  774. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_release_unified_1242.py +0 -0
  775. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_release_verify.py +0 -0
  776. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_release_window.py +0 -0
  777. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_remote_auto_prune.py +0 -0
  778. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_remote_interactive_reaper.py +0 -0
  779. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_repo_edit_2220.py +0 -0
  780. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_repo_graph_fleet_2237.py +0 -0
  781. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_repo_onboard_2220.py +0 -0
  782. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_report_result_push.py +0 -0
  783. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_reports.py +0 -0
  784. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_retry.py +0 -0
  785. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_retry_advisory_1606.py +0 -0
  786. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_retry_type_1636.py +0 -0
  787. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_revalidate.py +0 -0
  788. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_review.py +0 -0
  789. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_review_end_review_without_verdict.py +0 -0
  790. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_review_parse_failure_diagnostic.py +0 -0
  791. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_review_reaffirm.py +0 -0
  792. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_review_state.py +0 -0
  793. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_review_verdict_backstop.py +0 -0
  794. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_review_verdict_override_audit.py +0 -0
  795. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_review_verdict_relay.py +0 -0
  796. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_review_zero_commits.py +0 -0
  797. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_scoped_review_wiring.py +0 -0
  798. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_scorecard.py +0 -0
  799. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_serve.py +0 -0
  800. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_serve_app_board_trim.py +0 -0
  801. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_session.py +0 -0
  802. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_slice_issue_attribution.py +0 -0
  803. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_smoke.py +0 -0
  804. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_smoke_live_checkout_restore.py +0 -0
  805. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_smoke_workflow.py +0 -0
  806. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_spend_ceiling.py +0 -0
  807. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_spend_ceiling_coordinator.py +0 -0
  808. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_split.py +0 -0
  809. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_split_work.py +0 -0
  810. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_stage_projection.py +0 -0
  811. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_stalled_pipeline.py +0 -0
  812. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_state.py +0 -0
  813. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_state_review_findings_daemon.py +0 -0
  814. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_status_fleet_footer.py +0 -0
  815. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_stop_1567.py +0 -0
  816. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_stuck.py +0 -0
  817. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_terminal_command.py +0 -0
  818. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_test_author.py +0 -0
  819. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_test_chat.py +0 -0
  820. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_test_orchestrator.py +0 -0
  821. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_test_report.py +0 -0
  822. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_test_verdict_parsing.py +0 -0
  823. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_test_verdict_transcript_floor.py +0 -0
  824. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_thin_client_board_audit.py +0 -0
  825. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_thin_client_config_load_1080.py +0 -0
  826. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_thin_client_daemon_routing_906.py +0 -0
  827. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_tmux_host.py +0 -0
  828. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_tmux_session.py +0 -0
  829. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_transcript_floor.py +0 -0
  830. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_usage.py +0 -0
  831. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_usage_limits.py +0 -0
  832. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_usage_rollup.py +0 -0
  833. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_venv_live_install_2121.py +0 -0
  834. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_version_single_source.py +0 -0
  835. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_watch.py +0 -0
  836. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  837. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_worker_events.py +0 -0
  838. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_worker_image_pin_sync.py +0 -0
  839. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_worker_safety.py +0 -0
  840. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_worker_test_scoping.py +0 -0
  841. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_worktree.py +0 -0
  842. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  843. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tui/Cargo.lock +0 -0
  844. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tui/Cargo.toml +0 -0
  845. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tui/cargo-config-local-quadraui.toml.example +0 -0
  846. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tui/src/app/audit.rs +0 -0
  847. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tui/src/app/chat.rs +0 -0
  848. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tui/src/app/drive.rs +0 -0
  849. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tui/src/app/drive_queue.rs +0 -0
  850. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tui/src/app/escalation.rs +0 -0
  851. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tui/src/app/fleet_health.rs +0 -0
  852. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tui/src/app/fleet_sessions.rs +0 -0
  853. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tui/src/app/fleet_terminals.rs +0 -0
  854. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tui/src/app/milestone_dag.rs +0 -0
  855. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tui/src/app/msv.rs +0 -0
  856. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tui/src/app/plans.rs +0 -0
  857. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tui/src/app/reports.rs +0 -0
  858. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tui/src/app/sessions.rs +0 -0
  859. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tui/src/app/settings_ui.rs +0 -0
  860. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tui/src/app/terminal.rs +0 -0
  861. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tui/src/app/types.rs +0 -0
  862. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tui/src/app/workspace.rs +0 -0
  863. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tui/src/bin/gtk.rs +0 -0
  864. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tui/src/commands.rs +0 -0
  865. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tui/src/lib.rs +0 -0
  866. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tui/src/main.rs +0 -0
  867. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tui/src/settings.rs +0 -0
  868. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tui/tests/acceptance.rs +0 -0
  869. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/tui/tests/cli.rs +0 -0
  870. {code_coordinator-0.5.150 → code_coordinator-0.5.153}/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.150
3
+ Version: 0.5.153
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.150
3
+ Version: 0.5.153
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
@@ -0,0 +1,8 @@
1
+ {
2
+ "tag": "0.5.153",
3
+ "distance": 0,
4
+ "node": "g2968c6a10a7c3b15da201f4fd9049f641c23b3ee",
5
+ "dirty": false,
6
+ "branch": "HEAD",
7
+ "node_date": "2026-08-19"
8
+ }
@@ -71,6 +71,7 @@ from coord.drive_queue import (
71
71
  find_cycle,
72
72
  fired_holds,
73
73
  is_permanent_block_reason,
74
+ is_unsatisfiable_prereq_reason,
74
75
  parse_after_spec,
75
76
  parse_key,
76
77
  pending_probe_targets,
@@ -562,13 +563,31 @@ _BLOCKED_REMEDY = (
562
563
  "actually fixed, not merely because a pre-req merged"
563
564
  )
564
565
 
565
- # #2230: `blocked`'s MERGE GATE (as opposed to its `after=` graph, which
566
- # `_BLOCKED_REMEDY` above still correctly calls never-re-checked) is no
567
- # longer unconditionally terminal see `coord.drive_queue.
568
- # is_permanent_block_reason`/`_reconcile_blocked`. Shown only for `blocked`
569
- # (never `failed`, which #2230 does not touch at all) so an operator reading
570
- # `list` right after this ships doesn't have to go read the issue to learn
571
- # their remove+add might be about to race an automatic resume.
566
+ # #2362: a `blocked` row (never `failed` the tick's `after=` resume sweep,
567
+ # `coord.drive_queue._reconcile_blocked_after`, is scoped to `blocked` only)
568
+ # whose OWN `last_reason` IS `_resolve_prereqs`'s "queued but blocked/failed
569
+ # it will never satisfy" verdict is auto re-checked every tick, and
570
+ # resumes to `waiting` on its own the moment every named pre-req lands.
571
+ # `_BLOCKED_REMEDY` above is flatly wrong for exactly this row shape (it is
572
+ # in fact re-checked, on its own, without an operator) — this note replaces
573
+ # it there instead of merely appending, mirroring #2230's own concern: an
574
+ # operator told "never re-checked" for a row about to self-resume would
575
+ # either do a needless remove+add or race the automatic one.
576
+ _BLOCKED_AFTER_NOTE = (
577
+ "remedy: {state}'s `after=` graph above IS re-checked automatically "
578
+ "every tick (#2362) — once every named pre-req lands (`facts.landed`), "
579
+ "this row resumes to `waiting` on its own, attempt budget reset; no "
580
+ "operator remove+add needed. See `resumes=` above if it has already "
581
+ "self-resumed and re-blocked for an unrelated reason."
582
+ )
583
+
584
+ # #2230: `blocked`'s MERGE GATE (as opposed to its `after=` graph, handled by
585
+ # `_BLOCKED_AFTER_NOTE`/`_BLOCKED_REMEDY` above) is no longer unconditionally
586
+ # terminal — see `coord.drive_queue.is_permanent_block_reason`/
587
+ # `_reconcile_blocked`. Shown only for `blocked` (never `failed`, which
588
+ # #2230 does not touch at all) so an operator reading `list` right after this
589
+ # ships doesn't have to go read the issue to learn their remove+add might be
590
+ # about to race an automatic resume.
572
591
  _BLOCKED_GATE_NOTE = (
573
592
  "note: a re-evaluable blocked cause (i.e. not a #1844/#2019 permanent "
574
593
  "refusal) IS re-checked against the merge gate automatically (#2230) — "
@@ -693,12 +712,37 @@ def drive_queue_list(repo: str | None, output_json: bool, config_path: Path) ->
693
712
  # #2183 point 4: `blocked`/`failed` is terminal — say so where the
694
713
  # operator is already reading the row, not just in an unrelated
695
714
  # operator's hand-written `--hold-after` note.
696
- click.echo(f" {_BLOCKED_REMEDY.format(state=entry.state)}")
715
+ #
716
+ # #2404: EXCEPT when this row's own `last_reason` is exactly the
717
+ # unsatisfiable-`after=`-pre-req verdict on a `blocked` (not
718
+ # `failed`) entry — that shape auto-resumes on its own every tick
719
+ # (#2362), so the generic "never re-checked on its own" remedy
720
+ # would be actively wrong for it; swap in the note that says so.
721
+ if entry.state == STATE_BLOCKED and is_unsatisfiable_prereq_reason(
722
+ entry.last_reason
723
+ ):
724
+ click.echo(f" {_BLOCKED_AFTER_NOTE.format(state=entry.state)}")
725
+ else:
726
+ click.echo(f" {_BLOCKED_REMEDY.format(state=entry.state)}")
697
727
  # #2230: independent of the `after=` diagnosis above (most `blocked`
698
728
  # rows have no `after=` at all — they blocked on attempts, not a
699
729
  # pre-req), so gated on the row's OWN state and cause, not `diagnosed`.
700
- if entry.state == STATE_BLOCKED and not is_permanent_block_reason(
701
- entry.last_reason
730
+ #
731
+ # #2404 review: EXCLUDE the unsatisfiable-`after=`-pre-req shape
732
+ # `_BLOCKED_AFTER_NOTE` above already covers. #2230's sweep
733
+ # (`_blocked_gate_reading`) returns `None` — "no evidence" — for an
734
+ # entry that never reached the merge queue at all, which is exactly
735
+ # what a purely `after=`-caused block is; showing this note there
736
+ # would stack two auto-recheck notes citing two different issue
737
+ # numbers under one row, one of which has nothing to say about that
738
+ # row's actual cause. `is_permanent_block_reason` rows already skip
739
+ # this note on their own; this adds the sibling exclusion so the two
740
+ # notes stay mutually exclusive, matching what each mechanism can
741
+ # actually promise for a given row.
742
+ if (
743
+ entry.state == STATE_BLOCKED
744
+ and not is_permanent_block_reason(entry.last_reason)
745
+ and not is_unsatisfiable_prereq_reason(entry.last_reason)
702
746
  ):
703
747
  click.echo(f" {_BLOCKED_GATE_NOTE}")
704
748
  for line in _hold_lines(entry):
@@ -1600,6 +1600,19 @@ def _is_unsatisfiable_prereq_reason(text: str | None) -> bool:
1600
1600
  return bool(text) and _UNSATISFIABLE_PREREQ_MARKER in text
1601
1601
 
1602
1602
 
1603
+ def is_unsatisfiable_prereq_reason(text: str | None) -> bool:
1604
+ """Public alias for :func:`_is_unsatisfiable_prereq_reason`.
1605
+
1606
+ `coord drive-queue list`'s rendering (#2404) needs to tell whether a
1607
+ `blocked` row's frozen ``last_reason`` is the exact shape
1608
+ :func:`_reconcile_blocked_after` (#2362) auto-resumes once every named
1609
+ pre-req lands, so it can stop telling the operator the ``after=`` graph
1610
+ "is never re-checked on its own" for a row where that has stopped being
1611
+ true — see ``coord.commands.drive_queue._BLOCKED_AFTER_NOTE``.
1612
+ """
1613
+ return _is_unsatisfiable_prereq_reason(text)
1614
+
1615
+
1603
1616
  def _reconcile_blocked_after(
1604
1617
  entry: QueueEntry,
1605
1618
  board: BoardView,
@@ -692,6 +692,65 @@ def test_blocked_row_purely_by_an_unsatisfiable_prereq_is_unchanged(cli, seed):
692
692
  assert dep_reason in result.output
693
693
 
694
694
 
695
+ def test_blocked_row_purely_by_an_unsatisfiable_prereq_gets_the_2362_note(
696
+ cli, seed
697
+ ):
698
+ """#2404: unlike a `blocked` row whose own cause is unrelated to its
699
+ `after=` graph (genuinely "never re-checked on its own" — see the #542
700
+ control case above), a row blocked purely because a named pre-req is
701
+ itself `blocked`/`failed` DOES get re-checked automatically every tick
702
+ (#2362): the moment that pre-req lands, this row resumes to `waiting` on
703
+ its own. `list`'s remedy line must say so instead of sending an operator
704
+ to a needless (or racing) manual `remove`+`add`."""
705
+ seed(issues={1650: "open"})
706
+ # 1650: blocked for its own, unrelated reason — nothing re-checks this.
707
+ cli("add", REPO, "1650")
708
+ state._update_drive_queue_entry_local(
709
+ REPO, 1650, state="blocked", last_reason="drive session died"
710
+ )
711
+ # 1654 (the #492 shape): blocked ONLY because its pre-req (1650) is
712
+ # itself blocked — the exact shape #2362's tick sweep auto-resumes.
713
+ cli("add", REPO, "1654", "--after", "1650")
714
+ dep_reason = f"pre-req {REPO}#1650 is queued but blocked — it will never satisfy"
715
+ state._update_drive_queue_entry_local(
716
+ REPO, 1654, state="blocked", last_reason=dep_reason
717
+ )
718
+
719
+ result = cli("list")
720
+ assert result.exit_code == 0, result.output
721
+
722
+ # 1650 has no `after=` at all, so #2183's diagnosis (and any remedy
723
+ # line) never applies to it — nothing to assert there beyond it existing.
724
+ assert _row_for(result.output, f"{REPO}#1650")
725
+
726
+ # Split the transcript at 1654's own row header — 1654 is the last
727
+ # (only remaining) row, so everything from there on is exactly ITS
728
+ # block (summary/last:/note lines), never 1650's.
729
+ idx_1654 = result.output.index(f"{REPO}#1654")
730
+ block_1650 = result.output[:idx_1654]
731
+ block_1654 = result.output[idx_1654:]
732
+
733
+ # 1654's remedy line is the new #2362 note, not the stale "never
734
+ # re-checked on its own" advice — this row auto-resumes without an
735
+ # operator.
736
+ assert "IS re-checked automatically every tick (#2362)" in block_1654
737
+ assert "no operator remove+add needed" in block_1654
738
+ assert "never re-checked on its own" not in block_1654
739
+
740
+ # #2404 review (non-blocking finding): #2230's merge-gate note must NOT
741
+ # also print for this row. `_blocked_gate_reading` returns `None` — no
742
+ # evidence — for an entry that never reached the merge queue, which is
743
+ # exactly what a purely `after=`-caused block is; showing it here would
744
+ # stack two auto-recheck notes citing two different issue numbers under
745
+ # one row, one of which has nothing to say about this row's real cause.
746
+ assert "re-checked against the merge gate automatically (#2230)" not in block_1654
747
+
748
+ # …but an ordinary blocked row whose cause is unrelated to its `after=`
749
+ # graph (1650, blocked on "drive session died") still gets #2230's note
750
+ # exactly as before — this exclusion is scoped to the #2362 shape only.
751
+ assert "re-checked against the merge gate automatically (#2230)" in block_1650
752
+
753
+
695
754
  def test_list_with_no_after_is_unaffected_by_the_2183_diagnosis(cli):
696
755
  """A `blocked` entry that never declared any `after=` at all keeps
697
756
  rendering exactly as it always has — no board dependency, no remedy
@@ -2433,6 +2433,116 @@ def test_a_permanently_blocked_entry_is_not_resumed_even_once_its_after_lands():
2433
2433
  assert plan.launch is None
2434
2434
 
2435
2435
 
2436
+ # ── #2404 review: a CHAINED (two-hop) after= block, not just single-hop ────
2437
+ #
2438
+ # The live incident this issue is about (claude-coordinator#2284-#2288) was
2439
+ # never a single `after=` edge: #2284-#2288 all declared `after=2283`, and
2440
+ # #2283 was ITSELF `blocked` on `after=2282` — a two-hop chain (root 2282 ->
2441
+ # middle 2283 -> leaf 2284..2288), not the one-hop shape every test above
2442
+ # pins. `_reconcile_blocked_after`'s resume check is driven entirely by
2443
+ # `board.facts(dep).landed` — a real, board-derived merge fact, never by a
2444
+ # dependency's in-tick `states` entry — so in principle each hop should
2445
+ # resolve independently the moment ITS OWN named pre-req actually lands,
2446
+ # with no special-casing needed for the chain shape. These two tests are the
2447
+ # repro the review asked for: they exercise `plan_tick` against an actual
2448
+ # two-hop graph to confirm that holds (it does), and pin the one subtlety a
2449
+ # naive "chain" fix could get wrong — a leaf must not resume just because
2450
+ # its immediate pre-req was ITSELF re-queued to `waiting` this same tick;
2451
+ # only that pre-req actually landing (merged/closed) may resume the leaf.
2452
+
2453
+
2454
+ def test_a_two_hop_after_chain_resumes_in_one_tick_once_both_hops_have_landed():
2455
+ """The exact live-incident shape: by the time anyone looked, BOTH the
2456
+ root (2282-analog) and the middle (2283-analog) pre-reqs had already
2457
+ merged — the middle's queue row just hadn't been reconciled yet. A
2458
+ single tick must resolve the WHOLE chain: the middle reconciles to
2459
+ `done` via #2055's landed check, and the leaf (2284..2288-analog),
2460
+ reading the middle's REAL board fact rather than its stale on-disk
2461
+ `blocked` state, resumes to `waiting` in that same tick — no operator
2462
+ action, and no second tick needed once both merges are real."""
2463
+ root = entry_key(REPO, 1650)
2464
+ middle = entry_key(REPO, 1654)
2465
+ entries = [
2466
+ entry(1650, position=0, state=STATE_DONE),
2467
+ entry(
2468
+ 1654,
2469
+ position=1,
2470
+ after=(root,),
2471
+ state=STATE_BLOCKED,
2472
+ attempts=2,
2473
+ last_reason=f"pre-req {root} is queued but blocked — it will never satisfy",
2474
+ ),
2475
+ entry(
2476
+ 1658,
2477
+ position=2,
2478
+ after=(middle,),
2479
+ state=STATE_BLOCKED,
2480
+ attempts=1,
2481
+ last_reason=f"pre-req {middle} is queued but blocked — it will never satisfy",
2482
+ ),
2483
+ ]
2484
+ # Both the root AND the middle have actually merged — mirrors the live
2485
+ # incident, where #2283 (middle) itself showed `done — issue already
2486
+ # merged while blocked (#2055)` once anyone looked.
2487
+ plan = plan_tick(entries, board(merged=(1650, 1654)), capacity=3)
2488
+
2489
+ middle_reconcile = next(r for r in plan.reconciles if r.key == middle)
2490
+ assert middle_reconcile.outcome == "done"
2491
+ assert middle_reconcile.updates["state"] == STATE_DONE
2492
+
2493
+ leaf_reconcile = next(r for r in plan.reconciles if r.key == entry_key(REPO, 1658))
2494
+ assert leaf_reconcile.outcome == "resumed"
2495
+ assert leaf_reconcile.updates["state"] == STATE_WAITING
2496
+ assert leaf_reconcile.updates["attempts"] == 0
2497
+ assert leaf_reconcile.updates["resumes"] == 1
2498
+
2499
+ # …and, exactly like the single-hop case, the freshly-resumed leaf falls
2500
+ # straight into this SAME tick's launch selection.
2501
+ assert plan.launch is not None and plan.launch.issue == 1658
2502
+
2503
+
2504
+ def test_a_two_hop_after_chain_leaf_is_not_resumed_until_its_own_pre_req_lands():
2505
+ """Guard against the false-resume a naive "propagate through `states`"
2506
+ chain fix would introduce: once the root lands, the middle correctly
2507
+ resumes to `waiting` THIS tick (single-hop #2362 behaviour) — but the
2508
+ leaf's own named pre-req is the MIDDLE, which has only been re-queued,
2509
+ not merged. The leaf must stay `blocked` until the middle itself
2510
+ actually lands, even though `states[middle]` already reads `waiting` by
2511
+ the time the leaf is walked in this same tick."""
2512
+ root = entry_key(REPO, 1650)
2513
+ middle = entry_key(REPO, 1654)
2514
+ entries = [
2515
+ entry(1650, position=0, state=STATE_DONE),
2516
+ entry(
2517
+ 1654,
2518
+ position=1,
2519
+ after=(root,),
2520
+ state=STATE_BLOCKED,
2521
+ attempts=2,
2522
+ last_reason=f"pre-req {root} is queued but blocked — it will never satisfy",
2523
+ ),
2524
+ entry(
2525
+ 1658,
2526
+ position=2,
2527
+ after=(middle,),
2528
+ state=STATE_BLOCKED,
2529
+ attempts=1,
2530
+ last_reason=f"pre-req {middle} is queued but blocked — it will never satisfy",
2531
+ ),
2532
+ ]
2533
+ # Only the root has landed — the middle has not (it is only about to be
2534
+ # re-queued to `waiting` THIS tick, not merged).
2535
+ plan = plan_tick(entries, board(merged=(1650,)), capacity=3)
2536
+
2537
+ middle_reconcile = next(r for r in plan.reconciles if r.key == middle)
2538
+ assert middle_reconcile.outcome == "resumed"
2539
+ assert middle_reconcile.updates["state"] == STATE_WAITING
2540
+
2541
+ # The leaf gets NO reconcile at all this tick — it stays blocked, with
2542
+ # its existing (still-true) "it will never satisfy" reason untouched.
2543
+ assert all(r.key != entry_key(REPO, 1658) for r in plan.reconciles)
2544
+
2545
+
2436
2546
  def test_is_unsatisfiable_prereq_reason_recognises_only_the_exact_verdict_shape():
2437
2547
  from coord.drive_queue import _is_unsatisfiable_prereq_reason
2438
2548
 
@@ -2626,7 +2626,19 @@ pub(crate) fn start_data_load() -> std::sync::mpsc::Receiver<BoardData> {
2626
2626
  // the real local SQLite DB and overwrite pipeline_issues / data.assignments
2627
2627
  // with whatever the developer's coord.db currently contains, making
2628
2628
  // TuiDriver tests non-deterministic and machine-dependent.
2629
- #[cfg(test)]
2629
+ //
2630
+ // #2284 (ms-65 §3, manifest finding 7): gated on `feature = "test-support"`
2631
+ // too, not just `cfg(test)` — the sealed `tests/acceptance/**` suite
2632
+ // (`tui/tests/acceptance.rs`, the #1042 seam) is a separate integration-test
2633
+ // crate, so the `coord_tui` it links against is built *without* `cfg(test)`
2634
+ // (only the top-level `cargo test` binary gets that cfg). Without this
2635
+ // widening, entering the Pipeline panel in that suite kicks
2636
+ // `maybe_kick_pipeline_loader` -> `refresh` -> this function, which fell
2637
+ // through to the real network/SQLite path and wholesale-replaced the
2638
+ // seeded fixture on the very next dispatched event (a RACE — whichever
2639
+ // finished first) — mirrors the exact same trap `resolve_board_service`
2640
+ // above already widened for (#1039).
2641
+ #[cfg(any(test, feature = "test-support"))]
2630
2642
  {
2631
2643
  let _ = tx.send(BoardData::default());
2632
2644
  return rx;
@@ -894,6 +894,49 @@ impl CoordApp {
894
894
  items.push(ContextMenuItem::separator());
895
895
  }
896
896
  }
897
+
898
+ // #2402: "Re-verify (revalidate)" — a Pipeline row whose Merge
899
+ // stage is BLOCKED with no automatic retry coming (#2397: the
900
+ // daemon's auto-drain tick never touches a BLOCKED entry) had no
901
+ // in-TUI recovery action at all; the only fix was `coord merge
902
+ // --revalidate` typed by hand. Shown regardless of `lifecycle`
903
+ // for the same reason the escalation block above is — a stuck
904
+ // merge still reads as "in progress" — so this can't be nested
905
+ // under one specific `match lifecycle` arm below.
906
+ //
907
+ // Eligibility mirrors `coord.merge_queue.revalidation_candidates`
908
+ // / `ci_revalidation_candidates` EXACTLY
909
+ // (`format::merge_revalidate_eligible`, gated on the entry's raw
910
+ // `reason` text): a review/CI-failure/conflict/missing-verdict
911
+ // block never offers this action, only a stale-but-passed local
912
+ // verdict or a stale-but-green CI check does. `repo_name` here is
913
+ // the coord-local name (`PipelineIssue::coord_repo`); the
914
+ // merge-plan lookup needs the GitHub `owner/repo` slug instead,
915
+ // so the matching `PipelineIssue` is re-resolved repo-precisely
916
+ // (#983 discipline — same reasoning as `has_running`/`has_zombie`
917
+ // above) rather than reusing `epic_issue`, which only matches on
918
+ // issue number.
919
+ if let (Some(n), Some(repo)) = (issue_number, repo_name) {
920
+ let repo_slug = self.pipeline_issues.iter().find_map(|iss| {
921
+ (iss.number == n && iss.coord_repo.as_deref() == Some(repo))
922
+ .then_some(iss.repo_slug.as_str())
923
+ });
924
+ if let Some(repo_slug) = repo_slug {
925
+ if let Some(entry) = self.merge_plan_entry_for_issue(repo_slug, n) {
926
+ if entry.status == "BLOCKED" {
927
+ if let Some(reason) = entry.reason.as_deref() {
928
+ if merge_revalidate_eligible(reason) {
929
+ items.push(ContextMenuItem::action(
930
+ "merge-revalidate",
931
+ "Re-verify (revalidate)",
932
+ ));
933
+ items.push(ContextMenuItem::separator());
934
+ }
935
+ }
936
+ }
937
+ }
938
+ }
939
+ }
897
940
  }
898
941
  match lifecycle {
899
942
  PipelineRowLifecycle::New => {
@@ -2551,6 +2594,51 @@ impl CoordApp {
2551
2594
  });
2552
2595
  }
2553
2596
 
2597
+ // ── #2402: Re-verify (revalidate) confirm ───────────────────────
2598
+ // State plainly what it will do (#1214 precedent): `--revalidate`
2599
+ // runs a real build+test locally on the daemon host — cheap, no
2600
+ // tokens, but not instant, so it gets the same confirm-before-spawn
2601
+ // shape as `pending_force_merge` rather than a bare click-and-go.
2602
+ if let Some(ref p) = self.pending_merge_revalidate {
2603
+ return Some(Dialog {
2604
+ table: None,
2605
+ id: WidgetId::new("dialog:merge-revalidate"),
2606
+ title: StyledText::plain("Re-verify (revalidate)"),
2607
+ body: vec![
2608
+ StyledText::plain(format!(
2609
+ "Re-test #{} against the current base?",
2610
+ p.issue_num,
2611
+ )),
2612
+ StyledText::plain(
2613
+ "Runs `coord merge --revalidate --only <assignment>` — a real \
2614
+ build+test (or CI re-run) locally on the daemon host before \
2615
+ merging. Only re-tests a stale-but-passed verdict; a genuine \
2616
+ review/CI/conflict block is left untouched."
2617
+ .to_string(),
2618
+ ),
2619
+ ],
2620
+ buttons: vec![
2621
+ DialogButton {
2622
+ id: WidgetId::new("yes"),
2623
+ label: "y Revalidate".into(),
2624
+ is_default: true,
2625
+ is_cancel: false,
2626
+ tint: None,
2627
+ },
2628
+ DialogButton {
2629
+ id: WidgetId::new("cancel"),
2630
+ label: "Cancel".into(),
2631
+ is_default: false,
2632
+ is_cancel: true,
2633
+ tint: None,
2634
+ },
2635
+ ],
2636
+ severity: Some(DialogSeverity::Question),
2637
+ vertical_buttons: false,
2638
+ input: None,
2639
+ });
2640
+ }
2641
+
2554
2642
  // ── #956: Kill terminal confirm ───────────────────────────────────
2555
2643
  if let Some(ref p) = self.pending_kill_terminal {
2556
2644
  return Some(Dialog {
@@ -3077,6 +3165,13 @@ impl CoordApp {
3077
3165
  "CI gate stays in place",
3078
3166
  ToastSeverity::Info,
3079
3167
  );
3168
+ } else if self.pending_merge_revalidate.is_some() {
3169
+ self.pending_merge_revalidate = None;
3170
+ self.push_toast(
3171
+ "Revalidate cancelled",
3172
+ "entry stays blocked — nothing changed",
3173
+ ToastSeverity::Info,
3174
+ );
3080
3175
  } else if self.pending_restart.is_some() {
3081
3176
  self.pending_restart = None;
3082
3177
  } else if self.pending_kill_terminal.is_some() {
@@ -3662,6 +3757,26 @@ impl CoordApp {
3662
3757
  return;
3663
3758
  }
3664
3759
 
3760
+ // ── #2402: Re-verify (revalidate) ──────────────────────────────────
3761
+ if let Some(p) = self.pending_merge_revalidate.clone() {
3762
+ match id {
3763
+ "yes" => {
3764
+ self.pending_merge_revalidate = None;
3765
+ self.confirm_merge_revalidate(p);
3766
+ }
3767
+ _ => {
3768
+ self.pending_merge_revalidate = None;
3769
+ self.push_toast(
3770
+ "Revalidate cancelled",
3771
+ "entry stays blocked — nothing changed",
3772
+ ToastSeverity::Info,
3773
+ );
3774
+ }
3775
+ }
3776
+ *self.dialog_layout.borrow_mut() = None;
3777
+ return;
3778
+ }
3779
+
3665
3780
  // ── #956: Kill terminal ────────────────────────────────────────────
3666
3781
  if let Some(p) = self.pending_kill_terminal.clone() {
3667
3782
  if id == "yes" {
@@ -6675,6 +6790,38 @@ impl CoordApp {
6675
6790
  self.dispatch_merge_automated_for_selected_pipeline_issue();
6676
6791
  true
6677
6792
  }
6793
+ // #2402: Pipeline row → "Re-verify (revalidate)" — arms the
6794
+ // confirm dialog (`pending_merge_revalidate`, resolved by
6795
+ // `confirm_merge_revalidate`) rather than spawning directly, the
6796
+ // same posture `pending_force_merge` takes for a gate-bypass
6797
+ // action (#1214 precedent): `--revalidate` runs a real
6798
+ // build+test locally on the daemon host, so it isn't a bare
6799
+ // click-and-go. `context_menu_items_for_pipeline_row` already
6800
+ // confirmed BLOCKED + a revalidate-eligible reason before
6801
+ // offering this item, so this arm only resolves the
6802
+ // `assignment_id` to pass — it does not re-check eligibility.
6803
+ "merge-revalidate" => {
6804
+ if let ContextMenuTarget::PipelineRow {
6805
+ issue_number: Some(n),
6806
+ repo_name: Some(r),
6807
+ ..
6808
+ } = target
6809
+ {
6810
+ let repo_slug = self.pipeline_issues.iter().find_map(|iss| {
6811
+ (iss.number == *n && iss.coord_repo.as_deref() == Some(r.as_str()))
6812
+ .then_some(iss.repo_slug.clone())
6813
+ });
6814
+ if let Some(entry) = repo_slug
6815
+ .and_then(|slug| self.merge_plan_entry_for_issue(&slug, *n).cloned())
6816
+ {
6817
+ self.pending_merge_revalidate = Some(PendingMergeRevalidate {
6818
+ assignment_id: entry.assignment_id,
6819
+ issue_num: *n,
6820
+ });
6821
+ }
6822
+ }
6823
+ true
6824
+ }
6678
6825
  // #1398: "Drive (automated)" — `coord drive <repo> <issue>
6679
6826
  // --tmux`, detached so it survives the TUI restarting.
6680
6827
  "start-drive" => {
@@ -14,8 +14,10 @@
14
14
  //! A document key is `(repo, issue_number)`. Each [`PanelScope`] owns its own
15
15
  //! [`DocTabGroup`]: an ordered `Vec<DocKey>`, the index of the active tab, and
16
16
  //! optionally the index of the single preview tab. The scope split is what
17
- //! keeps Board's and Pipeline's sets from merging (contract §3b) — this slice
18
- //! only wires `Board`, but the shape is the one #2284 inherits.
17
+ //! keeps Board's and Pipeline's sets from merging (contract §3b) — #2282
18
+ //! wired `Board`; #2284 wires `Pipeline` against this same shape, one
19
+ //! `DocTabGroup` per scope, so the two never merge, reorder or drop into
20
+ //! each other when the active panel switches.
19
21
  //!
20
22
  //! # Open semantics (contract §2e)
21
23
  //!
@@ -50,11 +52,10 @@ use crate::app::format::trunc;
50
52
  #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
51
53
  pub(crate) enum PanelScope {
52
54
  Board,
53
- /// Reserved for #2284, which gives the Pipeline panel its own tab set.
54
- /// [`DocTabs::group`]/[`DocTabs::group_mut`] already route to it, but no
55
- /// caller constructs this variant until that slice lands — hence the
56
- /// allow, which should be deleted (not widened) by #2284.
57
- #[allow(dead_code)]
55
+ /// #2284: the Pipeline panel's own independent tab set — same
56
+ /// preview/pin semantics as Board, stored and revealed against the
57
+ /// Pipeline sidebar (never the Board's). See `pipeline.rs`'s
58
+ /// "#2284 (ms-65 §3): Pipeline document tabs" section.
58
59
  Pipeline,
59
60
  }
60
61