code-coordinator 0.5.147__tar.gz → 0.5.150__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 (869) hide show
  1. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/PKG-INFO +3 -1
  2. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/README.md +2 -0
  3. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/code_coordinator.egg-info/PKG-INFO +3 -1
  4. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/code_coordinator.egg-info/SOURCES.txt +2 -0
  5. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/code_coordinator.egg-info/scm_file_list.json +2 -0
  6. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/code_coordinator.egg-info/scm_version.json +2 -2
  7. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/commands/lifecycle.py +21 -2
  8. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/server.py +17 -1
  9. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/merge_queue.py +16 -0
  10. code_coordinator-0.5.150/docs/ADR_COORD_WEB_DIST.md +158 -0
  11. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/docs/PHONE_WEBAPP.md +6 -0
  12. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-65/manifest.yml +127 -0
  13. code_coordinator-0.5.150/tests/acceptance/ms-65/pipeline_tabs_2284.rs +778 -0
  14. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_dashboard.py +212 -1
  15. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/src/app/format.rs +75 -4
  16. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/src/app/mod.rs +1 -1
  17. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/src/app/pipeline.rs +97 -16
  18. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/src/app/render.rs +13 -3
  19. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/src/app/tests.rs +310 -0
  20. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/src/app/types.rs +24 -1
  21. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/tests/acceptance.rs +1 -0
  22. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/.claude/commands/board.md +0 -0
  23. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/.claude/commands/complete-session.md +0 -0
  24. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/.claude/commands/coordinator.md +0 -0
  25. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/.githooks/_lib.sh +0 -0
  26. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/.githooks/post-checkout +0 -0
  27. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/.githooks/post-commit +0 -0
  28. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/.githooks/post-merge +0 -0
  29. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  30. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/.github/coord-ci-acceptance.yml +0 -0
  31. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/.github/workflows/acceptance-web.yml +0 -0
  32. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/.github/workflows/auto-release.yml +0 -0
  33. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/.github/workflows/cargo-test.yml +0 -0
  34. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/.github/workflows/publish.yml +0 -0
  35. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/.github/workflows/release-tui.yml +0 -0
  36. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/.github/workflows/test.yml +0 -0
  37. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/.gitignore +0 -0
  38. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/CLAUDE.md +0 -0
  39. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/GOAL.md +0 -0
  40. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/LICENSE +0 -0
  41. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/MANIFEST.in +0 -0
  42. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/code_coordinator.egg-info/dependency_links.txt +0 -0
  43. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/code_coordinator.egg-info/entry_points.txt +0 -0
  44. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/code_coordinator.egg-info/requires.txt +0 -0
  45. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/code_coordinator.egg-info/top_level.txt +0 -0
  46. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/__init__.py +0 -0
  47. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/_board_mapping.py +0 -0
  48. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/acceptance.py +0 -0
  49. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/acceptance_drivers.py +0 -0
  50. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/agent.py +0 -0
  51. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/agent_app.py +0 -0
  52. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/agent_update.py +0 -0
  53. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/agents/opencode/.gitignore +0 -0
  54. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/agents/opencode/agents/work.md +0 -0
  55. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/agents/opencode/routing.jsonc +0 -0
  56. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/audit.py +0 -0
  57. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/auto_loop.py +0 -0
  58. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/block_log.py +0 -0
  59. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/board_bool_guard.py +0 -0
  60. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/board_service.py +0 -0
  61. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/board_wire.py +0 -0
  62. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/brain.py +0 -0
  63. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/branch_model.py +0 -0
  64. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/bug_intake.py +0 -0
  65. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/cargo_cache.py +0 -0
  66. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/ci_github.py +0 -0
  67. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/ci_store.py +0 -0
  68. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/claim.py +0 -0
  69. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/cli.py +0 -0
  70. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/client.py +0 -0
  71. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/commands/__init__.py +0 -0
  72. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/commands/_common.py +0 -0
  73. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/commands/acceptance.py +0 -0
  74. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/commands/agent_ops.py +0 -0
  75. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/commands/audit.py +0 -0
  76. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/commands/chat.py +0 -0
  77. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/commands/dispatch.py +0 -0
  78. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/commands/dispatch_workers.py +0 -0
  79. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/commands/drive.py +0 -0
  80. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/commands/drive_queue.py +0 -0
  81. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/commands/gate_a.py +0 -0
  82. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/commands/gates.py +0 -0
  83. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/commands/issues.py +0 -0
  84. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/commands/merge.py +0 -0
  85. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/commands/milestone.py +0 -0
  86. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/commands/plan_followup.py +0 -0
  87. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/commands/plans.py +0 -0
  88. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/commands/portal.py +0 -0
  89. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/commands/release.py +0 -0
  90. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/commands/repo.py +0 -0
  91. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/commands/report.py +0 -0
  92. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/commands/review.py +0 -0
  93. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/commands/scorecard.py +0 -0
  94. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/commands/sessions.py +0 -0
  95. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/commands/setup.py +0 -0
  96. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/commands/status.py +0 -0
  97. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/commands/terminal.py +0 -0
  98. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/commands/test_gate.py +0 -0
  99. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/commands/tui.py +0 -0
  100. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/comments.py +0 -0
  101. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/config.py +0 -0
  102. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/config_reload.py +0 -0
  103. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/conflict_fix.py +0 -0
  104. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dao.py +0 -0
  105. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/__init__.py +0 -0
  106. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/fixture.py +0 -0
  107. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/index.html +0 -0
  108. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/terminal.py +0 -0
  109. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/.gitignore +0 -0
  110. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/components.json +0 -0
  111. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/dist/assets/Gallery-BoKs3mpY.js +0 -0
  112. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
  113. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/dist/assets/Terminal-CEsP08iX.js +0 -0
  114. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/dist/assets/index-CDHPlB6k.js +0 -0
  115. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
  116. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
  117. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
  118. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
  119. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
  120. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/dist/index.html +0 -0
  121. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
  122. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/dist/sw.js +0 -0
  123. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
  124. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
  125. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
  126. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
  127. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
  128. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
  129. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
  130. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
  131. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
  132. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
  133. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/eslint.config.js +0 -0
  134. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/index.html +0 -0
  135. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
  136. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/package-lock.json +0 -0
  137. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/package.json +0 -0
  138. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
  139. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/playwright.config.ts +0 -0
  140. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/postcss.config.js +0 -0
  141. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
  142. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
  143. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
  144. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/App.tsx +0 -0
  145. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/api/client.ts +0 -0
  146. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/api/generated.ts +0 -0
  147. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
  148. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
  149. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
  150. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
  151. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
  152. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
  153. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
  154. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
  155. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
  156. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
  157. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
  158. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
  159. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
  160. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
  161. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
  162. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
  163. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
  164. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
  165. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
  166. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
  167. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
  168. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
  169. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
  170. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
  171. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
  172. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
  173. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
  174. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
  175. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
  176. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
  177. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
  178. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
  179. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
  180. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
  181. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/index.css +0 -0
  182. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
  183. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
  184. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/main.tsx +0 -0
  185. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
  186. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
  187. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
  188. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
  189. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
  190. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
  191. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
  192. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
  193. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
  194. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
  195. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
  196. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
  197. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
  198. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
  199. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
  200. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
  201. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
  202. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
  203. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
  204. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
  205. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
  206. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/test-setup.ts +0 -0
  207. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
  208. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/tailwind.config.js +0 -0
  209. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/tsconfig.json +0 -0
  210. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/tsconfig.node.json +0 -0
  211. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/vite.config.ts +0 -0
  212. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/db.py +0 -0
  213. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dead_end.py +0 -0
  214. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/deploy/README.md +0 -0
  215. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/deploy/coord-agent.service +0 -0
  216. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/deploy/coord-db-backup.service +0 -0
  217. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/deploy/coord-db-backup.sh +0 -0
  218. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/deploy/coord-db-backup.timer +0 -0
  219. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/deploy/coord-drive-queue.service +0 -0
  220. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/deploy/coord-drive-queue.timer +0 -0
  221. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/deploy/coord-notify.service +0 -0
  222. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/deploy/coord-notify.timer +0 -0
  223. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/deploy/coord-release-propagate.service +0 -0
  224. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/deploy/coord-release-propagate.timer +0 -0
  225. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/deploy/coord-release-window.service +0 -0
  226. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/deploy/coord-release-window.timer +0 -0
  227. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/deploy/coord-serve.service +0 -0
  228. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/deploy/coord-web-dist-build.service +0 -0
  229. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/deploy/coord-web-dist-build.timer +0 -0
  230. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/deploy/coord-web.service +0 -0
  231. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/deploy_manifest.py +0 -0
  232. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/deploy_units.py +0 -0
  233. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/deps.py +0 -0
  234. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/diagnose.py +0 -0
  235. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dispatch.py +0 -0
  236. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dist_name.py +0 -0
  237. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/drive.py +0 -0
  238. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/drive_queue.py +0 -0
  239. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/drive_state.py +0 -0
  240. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/events.py +0 -0
  241. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/failure_class.py +0 -0
  242. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/filelock.py +0 -0
  243. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/fleet_config_health.py +0 -0
  244. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/freshness.py +0 -0
  245. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/gate_a.py +0 -0
  246. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/gate_b.py +0 -0
  247. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/gate_snapshot.py +0 -0
  248. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/gates.py +0 -0
  249. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/github_ops.py +0 -0
  250. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/goal.py +0 -0
  251. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/graph_health.py +0 -0
  252. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/health/__init__.py +0 -0
  253. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/health/aggregate.py +0 -0
  254. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/health/checks/__init__.py +0 -0
  255. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/health/checks/agent_install.py +0 -0
  256. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/health/checks/cargo_targets.py +0 -0
  257. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/health/checks/claude_binary.py +0 -0
  258. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/health/checks/deploy_lane_facts.py +0 -0
  259. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/health/checks/disk.py +0 -0
  260. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/health/checks/fleet_board.py +0 -0
  261. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  262. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/health/checks/fleet_phantom.py +0 -0
  263. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/health/checks/fleet_unit_drift.py +0 -0
  264. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/health/checks/graph.py +0 -0
  265. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/health/checks/graphify_cli.py +0 -0
  266. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/health/checks/index_lock.py +0 -0
  267. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/health/checks/plan_usage.py +0 -0
  268. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/health/checks/repo_state.py +0 -0
  269. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/health/checks/spawned_coord.py +0 -0
  270. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/health/checks/timer_active.py +0 -0
  271. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/health/checks/toolchain.py +0 -0
  272. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/health/checks/unit_drift.py +0 -0
  273. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/health/checks/unit_enablement.py +0 -0
  274. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/health/checks/worktrees.py +0 -0
  275. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/health/cli.py +0 -0
  276. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/health/context.py +0 -0
  277. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/health/fleet_snapshot.py +0 -0
  278. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/health/models.py +0 -0
  279. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/health/pypi.py +0 -0
  280. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/health/registry.py +0 -0
  281. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/health/render.py +0 -0
  282. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/health/units.py +0 -0
  283. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/hooks.py +0 -0
  284. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/housekeeping.py +0 -0
  285. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/interactive.py +0 -0
  286. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/issue_store.py +0 -0
  287. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/liveness_auditor.py +0 -0
  288. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/machine_pause.py +0 -0
  289. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/milestone_chat.py +0 -0
  290. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/milestone_dispatch.py +0 -0
  291. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/milestone_gate.py +0 -0
  292. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/milestone_order.py +0 -0
  293. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/mock_author.py +0 -0
  294. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/models.py +0 -0
  295. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/network.py +0 -0
  296. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/new_issue_chat.py +0 -0
  297. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/notifier/__init__.py +0 -0
  298. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/notifier/baseline.py +0 -0
  299. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/notifier/cli.py +0 -0
  300. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/notifier/collect.py +0 -0
  301. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/notifier/digest.py +0 -0
  302. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/notifier/models.py +0 -0
  303. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/notifier/predicate.py +0 -0
  304. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/notifier/service.py +0 -0
  305. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/notifier/store.py +0 -0
  306. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/notifier/transport.py +0 -0
  307. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/notify.py +0 -0
  308. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/openapi.py +0 -0
  309. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/overlap_fence.py +0 -0
  310. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/overlap_predict.py +0 -0
  311. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/parentage.py +0 -0
  312. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/parentage_github.py +0 -0
  313. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/pipeline.py +0 -0
  314. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/plan_parser.py +0 -0
  315. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/plans.py +0 -0
  316. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/platform_paths.py +0 -0
  317. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/portal_bridge.py +0 -0
  318. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/portal_store.py +0 -0
  319. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/portal_sync.py +0 -0
  320. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/pr_body_lint.py +0 -0
  321. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/prereqs.py +0 -0
  322. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/progress.py +0 -0
  323. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/providers/__init__.py +0 -0
  324. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/providers/base.py +0 -0
  325. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/providers/claude.py +0 -0
  326. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/providers/claude_pty.py +0 -0
  327. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/providers/opencode.py +0 -0
  328. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/queue_diagnose.py +0 -0
  329. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/reconcile.py +0 -0
  330. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/reconcile_tick.py +0 -0
  331. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/refine_chat.py +0 -0
  332. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/release_cordon.py +0 -0
  333. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/release_propagate.py +0 -0
  334. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/release_verify.py +0 -0
  335. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/release_window.py +0 -0
  336. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/repo_edit.py +0 -0
  337. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/repo_onboard.py +0 -0
  338. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/reports.py +0 -0
  339. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/revalidate.py +0 -0
  340. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/review.py +0 -0
  341. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/scorecard.py +0 -0
  342. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/serve_app.py +0 -0
  343. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/skills/portal-followup/SKILL.md +0 -0
  344. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/skills/update-issue/SKILL.md +0 -0
  345. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/smoke.py +0 -0
  346. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/spend_ceiling.py +0 -0
  347. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/split_work.py +0 -0
  348. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/stage_projection.py +0 -0
  349. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/state.py +0 -0
  350. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/test_author.py +0 -0
  351. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/test_chat.py +0 -0
  352. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/test_orchestrator.py +0 -0
  353. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/test_report.py +0 -0
  354. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/tui_release.py +0 -0
  355. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/usage.py +0 -0
  356. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/usage_limits.py +0 -0
  357. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/usage_rollup.py +0 -0
  358. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/worker_events.py +0 -0
  359. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coordinator.example.yml +0 -0
  360. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/deploy/coord-agent.service +0 -0
  361. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/deploy/coord-db-backup.service +0 -0
  362. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/deploy/coord-db-backup.sh +0 -0
  363. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/deploy/coord-db-backup.timer +0 -0
  364. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/deploy/coord-drive-queue.service +0 -0
  365. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/deploy/coord-drive-queue.timer +0 -0
  366. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/deploy/coord-notify.service +0 -0
  367. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/deploy/coord-notify.timer +0 -0
  368. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/deploy/coord-release-propagate.service +0 -0
  369. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/deploy/coord-release-propagate.timer +0 -0
  370. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/deploy/coord-release-window.service +0 -0
  371. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/deploy/coord-release-window.timer +0 -0
  372. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/deploy/coord-serve.service +0 -0
  373. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/deploy/coord-web-dist-build.service +0 -0
  374. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/deploy/coord-web-dist-build.sh +0 -0
  375. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/deploy/coord-web-dist-build.timer +0 -0
  376. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/deploy/coord-web-rollback.sh +0 -0
  377. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/deploy/coord-web.service +0 -0
  378. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/deploy/node-shim.sh +0 -0
  379. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/docs/AGENT_OPERATIONS.md +0 -0
  380. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/docs/ARCHITECTURE.md +0 -0
  381. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/docs/ARCH_SECURITY_GATES.md +0 -0
  382. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/docs/COCKPIT.md +0 -0
  383. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/docs/CONTROL_CENTER.md +0 -0
  384. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/docs/COST_DISCIPLINE.md +0 -0
  385. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/docs/CROSS_PLATFORM.md +0 -0
  386. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/docs/CUSTOMER_PORTAL.md +0 -0
  387. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/docs/DRIVE_QUEUE.md +0 -0
  388. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/docs/EPHEMERAL_WORKERS.md +0 -0
  389. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/docs/FORGE_MIGRATION.md +0 -0
  390. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/docs/GRAPHIFY_SETUP.md +0 -0
  391. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/docs/ISSUE_GUIDANCE.md +0 -0
  392. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/docs/MAC_MINI.md +0 -0
  393. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  394. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/docs/NOTIFIER.md +0 -0
  395. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/docs/OPENCODE_VERIFICATION.md +0 -0
  396. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/docs/OPERATING_GOTCHAS.md +0 -0
  397. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/docs/ORACLE_LOOP.md +0 -0
  398. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/docs/PIPELINE_V2.md +0 -0
  399. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/docs/PLATFORM_EVOLUTION.md +0 -0
  400. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/docs/SECOND_BACKEND.md +0 -0
  401. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/docs/STORE_SERVICE.md +0 -0
  402. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  403. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/docs/WEB_CONTROL_CENTER.md +0 -0
  404. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/docs/WSL_WINDOWS_WORKER.md +0 -0
  405. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/docs/mocks/web/README.md +0 -0
  406. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/docs/mocks/web/_tokens.css +0 -0
  407. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/docs/mocks/web/issue-detail.html +0 -0
  408. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/docs/mocks/web/pipeline-narrow.html +0 -0
  409. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/docs/mocks/web/pipeline-wide.html +0 -0
  410. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/graphify-out/.gitignore +0 -0
  411. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/install-agent.sh +0 -0
  412. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/pyproject.toml +0 -0
  413. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/scripts/audit_review_verdict_overrides.py +0 -0
  414. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  415. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/scripts/azure-workers/build-worker-image.sh +0 -0
  416. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/scripts/azure-workers/coordinator-machine.py +0 -0
  417. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/scripts/azure-workers/epic-down.sh +0 -0
  418. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/scripts/azure-workers/epic-up.sh +0 -0
  419. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/scripts/azure-workers/preflight.sh +0 -0
  420. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/scripts/azure-workers/provision-worker.sh +0 -0
  421. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  422. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  423. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/scripts/azure-workers/verify-github-token.sh +0 -0
  424. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/scripts/codegen.py +0 -0
  425. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/scripts/coord-test-runner.sh +0 -0
  426. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/scripts/drive-batch.sh +0 -0
  427. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/scripts/gen_board_fixture.py +0 -0
  428. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/scripts/next_release_tag.py +0 -0
  429. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/scripts/run_tests_in_populated_home.sh +0 -0
  430. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/scripts/run_tests_without_gh.sh +0 -0
  431. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/scripts/smoke_437_interactive.py +0 -0
  432. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/scripts/verify_878_review_capture.py +0 -0
  433. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/scripts/verify_release_published.py +0 -0
  434. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/scripts/verify_release_wheel.py +0 -0
  435. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/setup.cfg +0 -0
  436. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/SMOKE_SET.md +0 -0
  437. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/__init__.py +0 -0
  438. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  439. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-33/contract.md +0 -0
  440. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-33/manifest.yml +0 -0
  441. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  442. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  443. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  444. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  445. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-37/conftest.py +0 -0
  446. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-37/contract.md +0 -0
  447. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-37/manifest.yml +0 -0
  448. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  449. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  450. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-38/contract.md +0 -0
  451. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-38/manifest.yml +0 -0
  452. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  453. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  454. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  455. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  456. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  457. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  458. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  459. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  460. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  461. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  462. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-51/contract.md +0 -0
  463. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  464. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  465. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-51/manifest.yml +0 -0
  466. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  467. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-51/tsconfig.json +0 -0
  468. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
  469. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
  470. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-65/contract.md +0 -0
  471. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
  472. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
  473. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
  474. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
  475. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
  476. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
  477. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
  478. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
  479. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  480. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/conftest.py +0 -0
  481. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/fixtures/board-pipeline-basic.json +0 -0
  482. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  483. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  484. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  485. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  486. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/fixtures/playwright/all_pass.json +0 -0
  487. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  488. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/fixtures/playwright/mixed_fail.json +0 -0
  489. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  490. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  491. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/fixtures/playwright/skip.json +0 -0
  492. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/fixtures/playwright/truncated.json +0 -0
  493. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  494. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  495. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  496. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  497. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  498. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  499. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  500. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  501. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_acceptance.py +0 -0
  502. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_acceptance_drivers.py +0 -0
  503. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_agent.py +0 -0
  504. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_agent_api_error.py +0 -0
  505. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_agent_app.py +0 -0
  506. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_agent_branch_base.py +0 -0
  507. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_agent_branch_capture.py +0 -0
  508. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_agent_config_free_1712.py +0 -0
  509. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_agent_deploy_units_endpoint.py +0 -0
  510. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_agent_dirty_worktree.py +0 -0
  511. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  512. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_agent_graph_self_heal.py +0 -0
  513. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_agent_health_h3.py +0 -0
  514. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_agent_idle_restart.py +0 -0
  515. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_agent_push_failure.py +0 -0
  516. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_agent_reap.py +0 -0
  517. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_agent_repos_and_pull.py +0 -0
  518. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_agent_restart_services_endpoint.py +0 -0
  519. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_agent_startup_diagnostics.py +0 -0
  520. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_agent_update.py +0 -0
  521. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_agent_update_bluegreen.py +0 -0
  522. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_agent_usage_limit.py +0 -0
  523. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_agent_zero_commit.py +0 -0
  524. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_ambient_home_isolation.py +0 -0
  525. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_approve_reject_plan.py +0 -0
  526. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_approve_usage_gate.py +0 -0
  527. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_assignment_already_recorded_daemon.py +0 -0
  528. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_audit_log.py +0 -0
  529. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_audit_outcome.py +0 -0
  530. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_audit_query.py +0 -0
  531. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_auto_loop.py +0 -0
  532. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_auto_release_publish_2035.py +0 -0
  533. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_base_checkout_restore.py +0 -0
  534. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_block_log.py +0 -0
  535. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_board_cap_762.py +0 -0
  536. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_board_fixture.py +0 -0
  537. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_board_read_path.py +0 -0
  538. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_board_service.py +0 -0
  539. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_board_state.py +0 -0
  540. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_board_wire.py +0 -0
  541. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_brain.py +0 -0
  542. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_branch_model.py +0 -0
  543. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_bug_intake.py +0 -0
  544. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_build_worker_image_env_update.py +0 -0
  545. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cargo_cache.py +0 -0
  546. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_ci_acceptance_gate_1950.py +0 -0
  547. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_ci_parity_2091.py +0 -0
  548. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_ci_store.py +0 -0
  549. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_claim.py +0 -0
  550. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_acceptance.py +0 -0
  551. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_assign.py +0 -0
  552. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  553. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_assign_interactive_remote.py +0 -0
  554. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_assign_provider.py +0 -0
  555. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  556. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_audit.py +0 -0
  557. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_chat_continue.py +0 -0
  558. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_decide.py +0 -0
  559. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_diagnose_config_provenance.py +0 -0
  560. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_diagnose_graph.py +0 -0
  561. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_doctor.py +0 -0
  562. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_doctor_config_free_1801.py +0 -0
  563. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  564. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_drive.py +0 -0
  565. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_drive_queue.py +0 -0
  566. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_escalate.py +0 -0
  567. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_fix_headless_review.py +0 -0
  568. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_gate_a.py +0 -0
  569. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_install_drift.py +0 -0
  570. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_install_skills.py +0 -0
  571. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_issue_create_label.py +0 -0
  572. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_issue_reopen.py +0 -0
  573. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_merge.py +0 -0
  574. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_milestone_assign.py +0 -0
  575. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_milestone_capture.py +0 -0
  576. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_milestone_chat_add_child.py +0 -0
  577. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_milestone_dispatch.py +0 -0
  578. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_milestone_gate_b.py +0 -0
  579. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_milestone_gate_c.py +0 -0
  580. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_milestone_order.py +0 -0
  581. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  582. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_milestone_ship.py +0 -0
  583. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_network.py +0 -0
  584. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_new_issue_chat.py +0 -0
  585. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_plans.py +0 -0
  586. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_portal.py +0 -0
  587. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_pull_artifact.py +0 -0
  588. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_queue.py +0 -0
  589. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_reattach_sessions.py +0 -0
  590. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_refine_board.py +0 -0
  591. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_release_preflight.py +0 -0
  592. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_release_propagate.py +0 -0
  593. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_release_window.py +0 -0
  594. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_repo_2220.py +0 -0
  595. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_scorecard.py +0 -0
  596. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_set_review_findings.py +0 -0
  597. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_status_advisory_terminal.py +0 -0
  598. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_status_merge_queue.py +0 -0
  599. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_status_provider.py +0 -0
  600. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_status_review_finalizing.py +0 -0
  601. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_status_test_failed_tag.py +0 -0
  602. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_status_usage_limit.py +0 -0
  603. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_sync_comments_873.py +0 -0
  604. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_test_plan.py +0 -0
  605. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_track.py +0 -0
  606. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_tui_update.py +0 -0
  607. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_wait.py +0 -0
  608. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_client_base_install.py +0 -0
  609. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_comments.py +0 -0
  610. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_completion_summary.py +0 -0
  611. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_config.py +0 -0
  612. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_config_acceptance.py +0 -0
  613. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_config_audit.py +0 -0
  614. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_config_pricing.py +0 -0
  615. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  616. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_config_usage_gate.py +0 -0
  617. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_conflict_fix.py +0 -0
  618. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_conflict_fix_semantic.py +0 -0
  619. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_coord_test.py +0 -0
  620. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_coord_test_runner_baseline.py +0 -0
  621. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_coord_test_runner_populated_home.py +0 -0
  622. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_coord_test_runner_routing.py +0 -0
  623. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_coord_test_runner_toolchain.py +0 -0
  624. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_coord_web_sse_restart_live.py +0 -0
  625. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_coordinator_machine.py +0 -0
  626. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cross_platform_imports.py +0 -0
  627. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_dashboard_fixture.py +0 -0
  628. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_dashboard_terminal.py +0 -0
  629. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_dashboard_terminal_live.py +0 -0
  630. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_db.py +0 -0
  631. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_dead_end.py +0 -0
  632. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_deploy_coord_db_backup.py +0 -0
  633. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_deploy_coord_web_dist.py +0 -0
  634. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_deploy_coord_web_rollback.py +0 -0
  635. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_deploy_drive_queue_unit.py +0 -0
  636. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_deploy_manifest.py +0 -0
  637. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_deploy_units_lane.py +0 -0
  638. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_deploy_web_unit.py +0 -0
  639. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_deps.py +0 -0
  640. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_diagnose.py +0 -0
  641. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_dispatch.py +0 -0
  642. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_dispatch_target_validation.py +0 -0
  643. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_dist_name.py +0 -0
  644. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_done_housekeeping.py +0 -0
  645. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_drive.py +0 -0
  646. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_drive_queue.py +0 -0
  647. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_drive_state.py +0 -0
  648. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_drive_tmux.py +0 -0
  649. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_epic_up_capability_detection.py +0 -0
  650. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  651. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_epic_up_image_provenance.py +0 -0
  652. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_errors.py +0 -0
  653. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_events.py +0 -0
  654. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_failure_class.py +0 -0
  655. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_filelock.py +0 -0
  656. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  657. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_fix_of_force_override.py +0 -0
  658. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_fleet_config_health.py +0 -0
  659. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_fleet_health_probes.py +0 -0
  660. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_fleet_health_snapshot.py +0 -0
  661. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_freshness.py +0 -0
  662. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_gate_a.py +0 -0
  663. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_gate_b.py +0 -0
  664. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_gate_snapshot_staleness.py +0 -0
  665. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_gates.py +0 -0
  666. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  667. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_generated_types_fixture.py +0 -0
  668. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_github_ops.py +0 -0
  669. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_goal.py +0 -0
  670. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_graph_health.py +0 -0
  671. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_graph_selfheal_absent_2237.py +0 -0
  672. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_handoff.py +0 -0
  673. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_health_checks.py +0 -0
  674. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_health_cli.py +0 -0
  675. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_health_cli_graph.py +0 -0
  676. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_health_config.py +0 -0
  677. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_health_context.py +0 -0
  678. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_health_deploy_lane_facts.py +0 -0
  679. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_health_incident_regression.py +0 -0
  680. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_health_pypi.py +0 -0
  681. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_health_registry.py +0 -0
  682. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_health_timer_active.py +0 -0
  683. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_health_toolchain.py +0 -0
  684. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_health_unit_drift.py +0 -0
  685. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_health_unit_enablement.py +0 -0
  686. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_hooks.py +0 -0
  687. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_human_attended_437.py +0 -0
  688. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_init.py +0 -0
  689. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_integration.py +0 -0
  690. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_interactive_briefing_echo.py +0 -0
  691. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_interactive_prefill_state.py +0 -0
  692. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_interactive_session_relaunch.py +0 -0
  693. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_interactive_test_verdict_backstop.py +0 -0
  694. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_interactive_token_attribution.py +0 -0
  695. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_interactive_worktree.py +0 -0
  696. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_issue_store_seam.py +0 -0
  697. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_liveness_auditor.py +0 -0
  698. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_liveness_notify.py +0 -0
  699. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_machine_pause.py +0 -0
  700. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_merge_queue.py +0 -0
  701. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_merge_verify.py +0 -0
  702. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_milestone_chat.py +0 -0
  703. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_milestone_dispatch.py +0 -0
  704. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_milestone_gate.py +0 -0
  705. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_milestone_order.py +0 -0
  706. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_milestone_seam.py +0 -0
  707. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_mock_author.py +0 -0
  708. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_model_tiering.py +0 -0
  709. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_models.py +0 -0
  710. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_models_config_labels.py +0 -0
  711. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_needs_attention.py +0 -0
  712. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_network.py +0 -0
  713. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_new_issue_chat.py +0 -0
  714. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_next_release_tag.py +0 -0
  715. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_no_direct_gh_calls.py +0 -0
  716. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_node_shim.py +0 -0
  717. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_notifier_baseline.py +0 -0
  718. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_notifier_cli.py +0 -0
  719. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_notifier_collect.py +0 -0
  720. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_notifier_config.py +0 -0
  721. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_notifier_drive_seam.py +0 -0
  722. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_notifier_isolation.py +0 -0
  723. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_notifier_predicate.py +0 -0
  724. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_notifier_quiet_hours.py +0 -0
  725. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_notifier_service.py +0 -0
  726. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_notify.py +0 -0
  727. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_notify_drain.py +0 -0
  728. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_openapi.py +0 -0
  729. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_operational_defaults.py +0 -0
  730. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_overlap_fence.py +0 -0
  731. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_overlap_predict.py +0 -0
  732. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_packaged_deploy_units.py +0 -0
  733. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_parentage.py +0 -0
  734. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_paste_landed.py +0 -0
  735. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_pipeline.py +0 -0
  736. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_plan_followup_approve_plan_command.py +0 -0
  737. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_plan_followup_pr_command.py +0 -0
  738. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_plan_followup_review_command.py +0 -0
  739. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_plan_only.py +0 -0
  740. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_plan_parser.py +0 -0
  741. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_platform_paths.py +0 -0
  742. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_portal_bridge.py +0 -0
  743. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_portal_config.py +0 -0
  744. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_portal_sync.py +0 -0
  745. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_pr_body_lint.py +0 -0
  746. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_prereqs.py +0 -0
  747. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_production_db_guard.py +0 -0
  748. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_progress.py +0 -0
  749. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_provider_seam.py +0 -0
  750. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_providers.py +0 -0
  751. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_providers_config_labels.py +0 -0
  752. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_providers_pty.py +0 -0
  753. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_quiet_hours.py +0 -0
  754. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_quiet_hours_store_2146.py +0 -0
  755. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_reap_merged_sessions.py +0 -0
  756. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_reap_stale_interactive_tick.py +0 -0
  757. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_reconcile.py +0 -0
  758. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_reconcile_branch.py +0 -0
  759. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_reconcile_completions.py +0 -0
  760. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_reconcile_merges.py +0 -0
  761. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_reconcile_no_agent_record.py +0 -0
  762. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_reconcile_tick.py +0 -0
  763. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_reconcile_usage_limit_done.py +0 -0
  764. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_refine_chat.py +0 -0
  765. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_release_cordon_2101.py +0 -0
  766. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  767. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_release_cordon_deadlock_2240.py +0 -0
  768. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_release_propagate.py +0 -0
  769. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_release_unified_1242.py +0 -0
  770. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_release_verify.py +0 -0
  771. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_release_window.py +0 -0
  772. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_remote_auto_prune.py +0 -0
  773. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_remote_interactive_reaper.py +0 -0
  774. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_repo_edit_2220.py +0 -0
  775. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_repo_graph_fleet_2237.py +0 -0
  776. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_repo_onboard_2220.py +0 -0
  777. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_report_result_push.py +0 -0
  778. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_reports.py +0 -0
  779. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_retry.py +0 -0
  780. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_retry_advisory_1606.py +0 -0
  781. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_retry_type_1636.py +0 -0
  782. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_revalidate.py +0 -0
  783. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_review.py +0 -0
  784. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_review_end_review_without_verdict.py +0 -0
  785. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_review_parse_failure_diagnostic.py +0 -0
  786. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_review_reaffirm.py +0 -0
  787. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_review_state.py +0 -0
  788. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_review_verdict_backstop.py +0 -0
  789. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_review_verdict_override_audit.py +0 -0
  790. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_review_verdict_relay.py +0 -0
  791. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_review_zero_commits.py +0 -0
  792. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_scoped_review_wiring.py +0 -0
  793. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_scorecard.py +0 -0
  794. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_serve.py +0 -0
  795. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_serve_app_board_trim.py +0 -0
  796. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_session.py +0 -0
  797. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_slice_issue_attribution.py +0 -0
  798. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_smoke.py +0 -0
  799. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_smoke_live_checkout_restore.py +0 -0
  800. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_smoke_workflow.py +0 -0
  801. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_spend_ceiling.py +0 -0
  802. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_spend_ceiling_coordinator.py +0 -0
  803. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_split.py +0 -0
  804. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_split_work.py +0 -0
  805. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_stage_projection.py +0 -0
  806. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_stalled_pipeline.py +0 -0
  807. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_state.py +0 -0
  808. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_state_review_findings_daemon.py +0 -0
  809. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_status_fleet_footer.py +0 -0
  810. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_stop_1567.py +0 -0
  811. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_stuck.py +0 -0
  812. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_terminal_command.py +0 -0
  813. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_test_author.py +0 -0
  814. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_test_chat.py +0 -0
  815. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_test_orchestrator.py +0 -0
  816. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_test_report.py +0 -0
  817. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_test_verdict_parsing.py +0 -0
  818. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_test_verdict_transcript_floor.py +0 -0
  819. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_thin_client_board_audit.py +0 -0
  820. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_thin_client_config_load_1080.py +0 -0
  821. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_thin_client_daemon_routing_906.py +0 -0
  822. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_tmux_host.py +0 -0
  823. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_tmux_session.py +0 -0
  824. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_transcript_floor.py +0 -0
  825. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_usage.py +0 -0
  826. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_usage_limits.py +0 -0
  827. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_usage_rollup.py +0 -0
  828. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_venv_live_install_2121.py +0 -0
  829. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_version_single_source.py +0 -0
  830. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_watch.py +0 -0
  831. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  832. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_worker_events.py +0 -0
  833. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_worker_image_pin_sync.py +0 -0
  834. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_worker_safety.py +0 -0
  835. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_worker_test_scoping.py +0 -0
  836. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_worktree.py +0 -0
  837. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  838. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/Cargo.lock +0 -0
  839. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/Cargo.toml +0 -0
  840. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/cargo-config-local-quadraui.toml.example +0 -0
  841. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/src/app/audit.rs +0 -0
  842. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/src/app/chat.rs +0 -0
  843. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/src/app/data.rs +0 -0
  844. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/src/app/dialogs.rs +0 -0
  845. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/src/app/doc_tabs.rs +0 -0
  846. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/src/app/drive.rs +0 -0
  847. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/src/app/drive_queue.rs +0 -0
  848. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/src/app/escalation.rs +0 -0
  849. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/src/app/events.rs +0 -0
  850. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/src/app/fixtures.rs +0 -0
  851. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/src/app/fleet_health.rs +0 -0
  852. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/src/app/fleet_sessions.rs +0 -0
  853. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/src/app/fleet_terminals.rs +0 -0
  854. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/src/app/milestone_dag.rs +0 -0
  855. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/src/app/msv.rs +0 -0
  856. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/src/app/plans.rs +0 -0
  857. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/src/app/reports.rs +0 -0
  858. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/src/app/sessions.rs +0 -0
  859. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/src/app/settings_ui.rs +0 -0
  860. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/src/app/sidebar.rs +0 -0
  861. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/src/app/terminal.rs +0 -0
  862. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/src/app/workspace.rs +0 -0
  863. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/src/bin/gtk.rs +0 -0
  864. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/src/commands.rs +0 -0
  865. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/src/lib.rs +0 -0
  866. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/src/main.rs +0 -0
  867. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/src/settings.rs +0 -0
  868. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/tests/cli.rs +0 -0
  869. {code_coordinator-0.5.147 → code_coordinator-0.5.150}/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.147
3
+ Version: 0.5.150
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
@@ -506,6 +506,8 @@ after publication.
506
506
  overnight drives.
507
507
  - [`docs/PHONE_WEBAPP.md`](docs/PHONE_WEBAPP.md) — build and serve the phone control-center PWA
508
508
  over Tailscale.
509
+ - [`docs/ADR_COORD_WEB_DIST.md`](docs/ADR_COORD_WEB_DIST.md) — how a built `coord-web` bundle
510
+ reaches the daemon host, and the alternatives rejected.
509
511
  - [`docs/AGENT_OPERATIONS.md`](docs/AGENT_OPERATIONS.md) — agent install, upgrade, and
510
512
  releasing to PyPI.
511
513
  - [`docs/OPERATING_GOTCHAS.md`](docs/OPERATING_GOTCHAS.md) — traps that cost a real dispatch or
@@ -466,6 +466,8 @@ after publication.
466
466
  overnight drives.
467
467
  - [`docs/PHONE_WEBAPP.md`](docs/PHONE_WEBAPP.md) — build and serve the phone control-center PWA
468
468
  over Tailscale.
469
+ - [`docs/ADR_COORD_WEB_DIST.md`](docs/ADR_COORD_WEB_DIST.md) — how a built `coord-web` bundle
470
+ reaches the daemon host, and the alternatives rejected.
469
471
  - [`docs/AGENT_OPERATIONS.md`](docs/AGENT_OPERATIONS.md) — agent install, upgrade, and
470
472
  releasing to PyPI.
471
473
  - [`docs/OPERATING_GOTCHAS.md`](docs/OPERATING_GOTCHAS.md) — traps that cost a real dispatch or
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-coordinator
3
- Version: 0.5.147
3
+ Version: 0.5.150
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
@@ -506,6 +506,8 @@ after publication.
506
506
  overnight drives.
507
507
  - [`docs/PHONE_WEBAPP.md`](docs/PHONE_WEBAPP.md) — build and serve the phone control-center PWA
508
508
  over Tailscale.
509
+ - [`docs/ADR_COORD_WEB_DIST.md`](docs/ADR_COORD_WEB_DIST.md) — how a built `coord-web` bundle
510
+ reaches the daemon host, and the alternatives rejected.
509
511
  - [`docs/AGENT_OPERATIONS.md`](docs/AGENT_OPERATIONS.md) — agent install, upgrade, and
510
512
  releasing to PyPI.
511
513
  - [`docs/OPERATING_GOTCHAS.md`](docs/OPERATING_GOTCHAS.md) — traps that cost a real dispatch or
@@ -365,6 +365,7 @@ deploy/coord-web-dist-build.timer
365
365
  deploy/coord-web-rollback.sh
366
366
  deploy/coord-web.service
367
367
  deploy/node-shim.sh
368
+ docs/ADR_COORD_WEB_DIST.md
368
369
  docs/AGENT_OPERATIONS.md
369
370
  docs/ARCHITECTURE.md
370
371
  docs/ARCH_SECURITY_GATES.md
@@ -795,6 +796,7 @@ tests/acceptance/ms-65/board_tabs_2282.rs
795
796
  tests/acceptance/ms-65/board_tabs_close_2283.rs
796
797
  tests/acceptance/ms-65/contract.md
797
798
  tests/acceptance/ms-65/manifest.yml
799
+ tests/acceptance/ms-65/pipeline_tabs_2284.rs
798
800
  tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen
799
801
  tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen
800
802
  tests/acceptance/ms-65/mocks/board-preview-tab.screen
@@ -343,6 +343,7 @@
343
343
  "deploy/coord-web-rollback.sh",
344
344
  "deploy/coord-web.service",
345
345
  "deploy/node-shim.sh",
346
+ "docs/ADR_COORD_WEB_DIST.md",
346
347
  "docs/AGENT_OPERATIONS.md",
347
348
  "docs/ARCHITECTURE.md",
348
349
  "docs/ARCH_SECURITY_GATES.md",
@@ -444,6 +445,7 @@
444
445
  "tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen",
445
446
  "tests/acceptance/ms-65/mocks/board-tabs-overflow.screen",
446
447
  "tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen",
448
+ "tests/acceptance/ms-65/pipeline_tabs_2284.rs",
447
449
  "tests/acceptance/ms-example/mocks/home-active.html",
448
450
  "tests/conftest.py",
449
451
  "tests/fixtures/board-pipeline-basic.json",
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "0.5.147",
2
+ "tag": "0.5.150",
3
3
  "distance": 0,
4
- "node": "gbf9c09b2b36fbbb594b25c03bc8ef7844050cd84",
4
+ "node": "gc5a2f06d7b06f02a99cd61319d19c371a1a49f96",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-18"
@@ -404,7 +404,7 @@ def web(
404
404
  # #1237: function-local + guarded — see _start_agent_server for why.
405
405
  with server_extra_guard("web"):
406
406
  import uvicorn
407
- from coord.dashboard.server import build_app
407
+ from coord.dashboard.server import build_app, dist_has_bundle
408
408
  from coord.dashboard.terminal import resolve_web_token
409
409
 
410
410
  fixture = None
@@ -438,7 +438,26 @@ def web(
438
438
  app = build_app(cfg, token=token, fixture=fixture, dist_path=dist_path)
439
439
  click.echo(f"coord web: dashboard at http://{bind_host}:{bind_port}")
440
440
  if dist_path is not None:
441
- click.echo(f" serving webapp bundle from {dist_path} (#1543)")
441
+ # #2003: this used to unconditionally claim "serving webapp bundle
442
+ # from {dist_path}" even when that path was missing or empty — the
443
+ # server itself silently falls back to the legacy single-file
444
+ # dashboard in that case (build_app / index()), so the operator saw
445
+ # a success message for what was actually a silent regression to the
446
+ # legacy UI. Share the exact predicate build_app's index() route uses
447
+ # (dist_has_bundle) so this message can never drift from what
448
+ # actually gets served (#2096: two surfaces answering the same
449
+ # question must call the same function).
450
+ if dist_has_bundle(dist_path):
451
+ click.echo(f" serving webapp bundle from {dist_path} (#1543)")
452
+ else:
453
+ click.echo(
454
+ f" warning: --dist {dist_path} has no index.html (missing "
455
+ "or empty directory) — falling back to the legacy "
456
+ "single-file dashboard, NOT the bundle you pointed at. "
457
+ "Check the path / the build hook that populates it "
458
+ "(#2003).",
459
+ err=True,
460
+ )
442
461
  if fixture is not None:
443
462
  click.echo(
444
463
  f" fixture mode: seeded board from {fixture_path} — reads are "
@@ -46,6 +46,22 @@ DASHBOARD_DIR = Path(__file__).parent
46
46
  # that existing behaviour (and the test suite) is completely unaffected.
47
47
  WEBAPP_DIST = DASHBOARD_DIR / "webapp" / "dist"
48
48
 
49
+
50
+ def dist_has_bundle(dist_path: Path) -> bool:
51
+ """Does ``dist_path`` contain a servable built webapp bundle?
52
+
53
+ This is the single definition of "valid bundle" for the dashboard: the
54
+ ``index()`` route below uses it to decide whether to serve the built
55
+ React app or fall back to the legacy single-file dashboard, and
56
+ ``coord web``'s CLI (coord/commands/lifecycle.py) uses it to decide
57
+ whether to print a success or warning message. Both call sites MUST
58
+ share this function rather than re-deriving the check, so the CLI's
59
+ message can never drift from what the server actually serves (#2003,
60
+ epic #2096).
61
+ """
62
+ return (dist_path / "index.html").exists()
63
+
64
+
49
65
  # How often (seconds) the background poller queries agent servers.
50
66
  _POLL_INTERVAL = 30.0
51
67
  # How long (seconds) an assignment must be running with no agent record before
@@ -698,7 +714,7 @@ def build_app(
698
714
  # Serve the built React webapp when available; fall back to the legacy
699
715
  # single-file dashboard so existing behaviour is entirely unchanged.
700
716
  spa_index = webapp_dist / "index.html"
701
- html = spa_index.read_text() if spa_index.exists() else (DASHBOARD_DIR / "index.html").read_text()
717
+ html = spa_index.read_text() if dist_has_bundle(webapp_dist) else (DASHBOARD_DIR / "index.html").read_text()
702
718
  return HTMLResponse(html)
703
719
 
704
720
  async def api_board(request: Request) -> JSONResponse:
@@ -3984,6 +3984,17 @@ class PlannedMerge:
3984
3984
  # when no PR is open yet, or `ci_store` has no checks for this PR.
3985
3985
  pr_number: int | None = None
3986
3986
  ci_summary: "CiCheckSummary | None" = None
3987
+ # #2397: mirrors `config.merge.auto_drain` (default False) at plan-build
3988
+ # time — read-only exposure, no gate-logic change. The TUI's per-issue
3989
+ # Merge stage box needs this to tell "nothing retries until a human runs
3990
+ # `coord merge`" (auto_drain off) apart from "an automatic retry tick is
3991
+ # already handling this" (auto_drain on); today it has no way to know
3992
+ # and the box renders identically either way (issue #2397's incident:
3993
+ # `#2284`'s acceptance-authoring slice sat "pending — waiting 2:22" with
3994
+ # no signal that `merge.auto_drain: false` meant nothing was coming on
3995
+ # its own). Same value on every entry in one `plan()` call — it's a
3996
+ # single process-wide config flag, not per-entry state.
3997
+ auto_drain: bool = False
3987
3998
 
3988
3999
 
3989
4000
  def _load_milestones_for_queue(
@@ -4058,6 +4069,10 @@ def plan(
4058
4069
  """
4059
4070
  items = load_queue()
4060
4071
  milestones = _load_milestones_for_queue(items)
4072
+ # #2397: read once, stamped on every entry below — see `PlannedMerge
4073
+ # .auto_drain`'s doc comment for why the TUI needs this alongside
4074
+ # `reason`.
4075
+ auto_drain = bool(getattr(getattr(config, "merge", None), "auto_drain", False))
4061
4076
 
4062
4077
  # ── Group by (repo_github, target_branch) ──────────────────────────────
4063
4078
  group_order: list[tuple[str, str]] = []
@@ -4133,6 +4148,7 @@ def plan(
4133
4148
  enqueued_at=entry.enqueued_at,
4134
4149
  last_attempt=entry.last_attempt,
4135
4150
  milestone=milestones.get((entry.repo_name, entry.issue_number)),
4151
+ auto_drain=auto_drain,
4136
4152
  ))
4137
4153
 
4138
4154
  return result
@@ -0,0 +1,158 @@
1
+ # ADR: How a built `coord-web` bundle reaches the daemon host
2
+
3
+ **Status:** Accepted
4
+ **Date:** 2026-08-18
5
+ **Issue:** #2004 (UX-2, Phase 1 of milestone #62, epic #2002). Blocks UX-4
6
+ ("CI must know what it publishes") and UX-7.
7
+
8
+ ## Context
9
+
10
+ `coord/dashboard/webapp/**` is moving out of this repo into its own
11
+ `coord-web` repo. Today, before that split, the same question already has a
12
+ shipped answer: **[`docs/PHONE_WEBAPP.md`](PHONE_WEBAPP.md), "Going live
13
+ automatically (#1543)."** `deploy/coord-web-dist-build.timer` fires every 10
14
+ minutes (retuned from 1 minute by #2122; see that unit's header), fetches
15
+ `origin/main` read-only, builds it in a dedicated worktree
16
+ (`~/.coord-web-checkout`), health-checks the result on a scratch port before
17
+ ever publishing it (#1560), and atomically repoints `~/coord-web-dist` —
18
+ which `coord web --dist` serves — at the new release. A one-command rollback
19
+ (`coord-web-rollback.sh`) with a rollback-sentinel anti-flap guard exists for
20
+ the class of bug the health check can't see. `coord release verify` already
21
+ has a lane for it: `webapp_bundle` (#1834 lane 5), which grades the live
22
+ bundle's staleness against the `coord/dashboard/webapp/` source tree it
23
+ claims to be built from — deliberately *not* against `--expected`/PyPI,
24
+ because the bundle is versioned by `origin/main`'s SHA on its own continuous
25
+ publish timer, decoupled on purpose from the `~/.coord-venv` release
26
+ cadence. `webapp_build_heartbeat` (#2122) catches the timer going silently
27
+ dead, independent of whether there's unbuilt source to expose it.
28
+
29
+ The question #2004 poses is really: **once the thing that timer builds lives
30
+ in a different repo, does any of this change in kind, or only in which
31
+ repo(s) it points at?**
32
+
33
+ ## Decision
34
+
35
+ **Extend the existing mechanism to track `coord-web`'s `main`, instead of
36
+ `coord/dashboard/webapp/` inside this repo.** This is Option 1 from the
37
+ issue, and it is not a new lane so much as a redirection of a lane this
38
+ fleet already built, hardened, and has a release-verify check for.
39
+
40
+ Concretely, once the split lands:
41
+
42
+ - `coord-web-dist-build.sh`'s `BASE_CHECKOUT`/`WEBAPP_CHECKOUT` point at a
43
+ dedicated clone of `coord-web` (never the operator's own checkout, same
44
+ rule #1543 already enforces) instead of a worktree of this repo.
45
+ - The build step becomes `npm ci && npm run build` at `coord-web`'s repo
46
+ root instead of `coord/dashboard/webapp/`.
47
+ - The health-check-before-cutover, atomic symlink publish, rollback script,
48
+ and rollback-sentinel guard carry over **unchanged** — none of that logic
49
+ is specific to which repo it's building.
50
+ - `coord.health.checks.deploy_lane_facts.resolve_webapp_source_dir` (which
51
+ scans `ctx.checkouts` for a directory that looks like the webapp source)
52
+ gets pointed at a `coord-web` checkout's layout instead of
53
+ `<checkout>/coord/dashboard/webapp/src`. The `webapp_bundle` check's
54
+ *shape* — dist mtime vs. source mtime, WARN on staleness, never a version
55
+ comparison — does not change; only the path it looks under does.
56
+ - The PyPI-wheel-bundled fallback path (`coord/dashboard/webapp/dist`
57
+ vendored into `claude-coordinator`'s own release, #758) stays, unchanged
58
+ in role: it is the answer for `pip install code-coordinator` on a machine
59
+ with no `--dist` configured (fresh installs, CI, one-off dev boxes), not
60
+ the primary path to a running daemon host. This is Option 4, kept
61
+ deliberately as the fallback it already is today rather than promoted to
62
+ primary — see "Rejected alternatives" below for why it can't be primary
63
+ post-split.
64
+
65
+ ## Rejected alternatives
66
+
67
+ **Option 2 — GitHub release artifact (tarball per `coord-web` release).**
68
+ Versioned and auditable, but it reintroduces exactly the coupling #1543 was
69
+ built to remove: a webapp fix would sit merged-but-not-live until someone
70
+ cuts a release, and nothing today gives that step the ~10-minute, unattended
71
+ cadence the timer already provides. It would also need the health-check
72
+ gate and rollback machinery rebuilt around a fetch/verify/unpack step
73
+ instead of a `git fetch` + worktree build — real new surface for no
74
+ capability the current mechanism lacks. Revisit if `coord-web` ever needs a
75
+ public, pinned distribution channel independent of the daemon host (it
76
+ doesn't today).
77
+
78
+ **Option 3 — npm package.** Same coupling-to-publish-cadence problem as
79
+ Option 2, plus it adds a registry-auth and install-on-host step to a
80
+ deploy path that currently needs neither. No requirement in this issue
81
+ calls for the bundle to be consumable outside this fleet's own daemon host,
82
+ which is the only scenario where an npm package would earn its cost back.
83
+
84
+ **Option 4 — vendored at `claude-coordinator` release time, promoted to
85
+ primary.** Rejected as the *primary* path because it re-couples the two
86
+ repos' release cadences — the coupling the split (epic #2002) exists to
87
+ remove. A `coord/dashboard/webapp/**` merge would go live only on
88
+ `claude-coordinator`'s next PyPI release, not within ~10 minutes of merging.
89
+ Kept as the fallback, because that's a real, already-solved problem
90
+ (bootstrapping a `--dist`-less host, or a fresh install) distinct from
91
+ "how does a live daemon host stay current," and downgrading it doesn't cost
92
+ anything the fleet needs today.
93
+
94
+ **Why Option 1 is not "a fifth silent lane."** The issue's core objection —
95
+ this fleet already has four deploy lanes that go stale with no signal
96
+ (agent venv, `coord-serve`, local `cargo build`, `~/.coord-cli-venv`) — is
97
+ real, but those four go stale because going live requires an *operator* to
98
+ re-run an install step (`pip install --upgrade`, `cargo build`) and nothing
99
+ polls to catch it if they don't. The webapp-dist lane is structurally
100
+ different: it already has (a) an autonomous timer instead of an
101
+ operator-triggered pull, (b) a pre-cutover health check that refuses to
102
+ publish a broken build in the first place, (c) a heartbeat file
103
+ `coord health`/`coord release verify` already read to distinguish "up to
104
+ date" from "the trigger died silently," and (d) a release-verify lane
105
+ (`webapp_bundle`) already wired into the fleet health surface. Extending it
106
+ to a second repo carries all four properties across unchanged — it doesn't
107
+ have to invent them the way a from-scratch Option 2/3 pipeline would.
108
+
109
+ ## Staleness across the split is a different question than staleness today
110
+
111
+ Pre-split, `coord-web-dist-build.timer` and `~/.coord-venv` build off the
112
+ *same* repo, so "is the live bundle SHA an ancestor of what the daemon was
113
+ built from" is at least answerable in principle. Post-split, `coord-serve`
114
+ (from `claude-coordinator`, versioned by PyPI release) and the webapp bundle
115
+ (from `coord-web`, versioned by its own `main` SHA) are two independently
116
+ released artifacts with **no shared version number** — and per the
117
+ `webapp_bundle` design already in `release_verify.py`, that's intentional:
118
+ grading the bundle against `--expected`/PyPI would "manufacture permanent,
119
+ meaningless skew rather than report a real one." That reasoning holds even
120
+ harder once the source repos are different.
121
+
122
+ What that does *not* cover, and what genuinely is new here: a phone hitting
123
+ `http://dellserver:7434` can land on a `coord-web` bundle that expects an
124
+ API shape `coord-serve` hasn't shipped yet (or vice versa), because nothing
125
+ before this ADR pins a compatibility floor between the two repos'
126
+ independent cadences. This is a real risk the split introduces — it isn't
127
+ solved by choosing Option 1 over 2/3/4, and it isn't this ADR's job to
128
+ solve, but it should be named so UX-4/UX-7 pick it up rather than
129
+ rediscover it: the daemon already reports its own version
130
+ (`coord/dashboard/server.py`'s `version=__version__`); the cheapest fix is
131
+ likely a minimum-compatible-API marker the webapp checks against that value
132
+ at load and degrades visibly (banner, not a silent break) on mismatch,
133
+ rather than trying to keep the two repos' releases in lockstep.
134
+
135
+ Propagation lag itself (a phone briefly on a bundle one merge behind the
136
+ daemon, or vice versa) is not new and not a defect — it's the same ~10-minute
137
+ window the timer already runs at for the single-repo case (retuned from the
138
+ original 1-minute cadence #1543 documents; see #2122 and
139
+ `deploy/coord-web-dist-build.timer`'s header for why). It stays detectable
140
+ the same way: the release directory is named after the
141
+ `coord-web` SHA it was built from, and `webapp_build_heartbeat` proves the
142
+ timer is still alive.
143
+
144
+ ## Consequences
145
+
146
+ - `coord release verify`'s `webapp_bundle` lane keeps working post-split
147
+ with a path/repo-target change, not a redesign — satisfying this issue's
148
+ "whichever option wins should be assertable by it" requirement at close
149
+ to zero incremental cost.
150
+ - The daemon host needs a second dedicated checkout (`coord-web`, alongside
151
+ whatever `claude-coordinator` checkout it already keeps for other lanes)
152
+ and a second instance of the build-timer/rollback pairing pointed at it.
153
+ That's real setup work, tracked under UX-4/UX-7, not a design question.
154
+ - A `coord-web`↔`coord-serve` compatibility floor is an explicitly named
155
+ open follow-up, not solved here.
156
+ - Options 2 and 3 remain available to revisit if `coord-web` ever needs a
157
+ distribution channel independent of this fleet's own daemon host — no
158
+ requirement in scope today calls for that.
@@ -126,6 +126,12 @@ cd coord/dashboard/webapp && npm run build
126
126
 
127
127
  ---
128
128
 
129
+ > **Repo split (#2004):** `coord/dashboard/webapp/**` is moving to its own
130
+ > `coord-web` repo (epic #2002). The mechanism below is the answer for how a
131
+ > built bundle reaches this daemon host both before and after that move —
132
+ > see [`docs/ADR_COORD_WEB_DIST.md`](ADR_COORD_WEB_DIST.md) for the decision
133
+ > and the rejected alternatives.
134
+
129
135
  ## Going live automatically (#1543): merged main, not release cadence
130
136
 
131
137
  **On dellserver in production, a merged `coord/dashboard/webapp/**` change
@@ -86,6 +86,35 @@ tests:
86
86
  # zero-tab state. THIS IS THE GREEN CONTROL — see `expected_red` below.
87
87
  board_tabs_close_2283::zero_tabs_render_no_close_or_overflow_glyphs: 2283
88
88
 
89
+ # ── #2284 (W-3) — Pipeline's own independent tab set (contract §3) ────────
90
+ # Slice: pipeline_tabs_2284.rs · mocks: pipeline-tabs-independent.screen
91
+ # (plus board-pinned-3-tabs.screen — §3b calls the two "the independence
92
+ # pair")
93
+ #
94
+ # §3a — zero Pipeline tabs render no strip on Pipeline. THIS IS THE GREEN
95
+ # CONTROL — see the `expected_red` block below.
96
+ pipeline_tabs_2284::pipeline_with_zero_doc_tabs_renders_no_tab_strip: 2284
97
+ # §3a — Pipeline has no toolbar, so its strip is the FIRST main-panel content
98
+ # row, immediately above the Overview/Issue/Log/Summary/Terminal sub-tab bar
99
+ # (with §3a's own stated contrast: on Board the toolbar precedes the strip)
100
+ pipeline_tabs_2284::pipeline_doc_tab_strip_is_the_first_main_panel_row_with_no_toolbar_above_it: 2284
101
+ # §3b bullet 1 — switching to Pipeline shows Pipeline's (empty) set, not the
102
+ # Board's three tabs, and does not lose them. THIS IS A GREEN RATCHET — see
103
+ # the `expected_red` block below.
104
+ pipeline_tabs_2284::switching_to_pipeline_hides_the_boards_tabs_without_losing_them: 2284
105
+ # §3b + #2284 AC 1 — two Pipeline tabs with three already open on the Board
106
+ # shows EXACTLY two on Pipeline, and no Board document leaks into the strip
107
+ pipeline_tabs_2284::pipeline_opens_its_own_two_tabs_while_the_board_keeps_three: 2284
108
+ # §3b bullet 2 + AC 2 — the milestone's headline round trip: Board →
109
+ # Pipeline → Board restores the same three tabs, same order, same active tab
110
+ pipeline_tabs_2284::board_pipeline_board_round_trip_restores_the_boards_tabs_order_and_active_tab: 2284
111
+ # §3b + AC 3 — each scope owns its own preview slot: a single click in
112
+ # Pipeline leaves the Board's `∘ ` preview tab exactly where it was
113
+ pipeline_tabs_2284::each_scope_owns_its_own_preview_slot: 2284
114
+ # §3b + AC 4 — reveal-on-activate is per scope: activating a Pipeline tab
115
+ # selects its row in the PIPELINE sidebar and leaves the Board's selection
116
+ pipeline_tabs_2284::activating_a_pipeline_tab_reveals_its_row_in_the_pipeline_sidebar_not_the_boards: 2284
117
+
89
118
  # ── expected_red (#2164) ───────────────────────────────────────────────────
90
119
  # Hand-derived from a REAL run of the sealed suite against origin/main at the
91
120
  # time of authoring (`cd tui && cargo test --test acceptance --features
@@ -140,6 +169,34 @@ expected_red:
140
169
  - board_tabs_close_2283::activating_a_scrolled_out_tab_scrolls_it_back_into_view_and_renders_the_right_affordance
141
170
  - board_tabs_close_2283::closing_the_last_tab_restores_the_zero_tab_baseline
142
171
 
172
+ # #2284 — OBSERVED, not intended. Taken from three consecutive real runs of
173
+ # the sealed suite (`cd tui && RUSTC_BOOTSTRAP=1 cargo test --test acceptance
174
+ # --features test-support -- -Z unstable-options --format json`, the driver
175
+ # command in coordinator.yml) at authoring time: of this slice's 7 ids, the
176
+ # same 5 FAILED and the same 2 passed on every run. The 2 that passed are
177
+ # deliberately ABSENT below:
178
+ #
179
+ # * `pipeline_with_zero_doc_tabs_renders_no_tab_strip` — the CONTROL.
180
+ # Green today (no panel paints a strip with nothing open) and must stay
181
+ # green after #2284 lands: an implementation that reserves the Pipeline
182
+ # strip row unconditionally, or that renders the Board's tabs on
183
+ # Pipeline, breaks exactly this test. Listing it would make its
184
+ # inevitable pass a HARD FAILURE.
185
+ # * `switching_to_pipeline_hides_the_boards_tabs_without_losing_them` — a
186
+ # RATCHET. Green today for the degenerate reason that the single global
187
+ # set #2282 shipped renders only on the Board, so nothing leaks onto
188
+ # Pipeline and nothing is lost coming back. Both halves become real
189
+ # constraints the moment the set is keyed by scope: a per-scope map that
190
+ # rebuilds (rather than preserves) the outgoing scope's entry fails the
191
+ # return leg, and a strip that paints the focused scope's tabs on the
192
+ # wrong panel fails the outbound one.
193
+ 2284:
194
+ - pipeline_tabs_2284::pipeline_doc_tab_strip_is_the_first_main_panel_row_with_no_toolbar_above_it
195
+ - pipeline_tabs_2284::pipeline_opens_its_own_two_tabs_while_the_board_keeps_three
196
+ - pipeline_tabs_2284::board_pipeline_board_round_trip_restores_the_boards_tabs_order_and_active_tab
197
+ - pipeline_tabs_2284::each_scope_owns_its_own_preview_slot
198
+ - pipeline_tabs_2284::activating_a_pipeline_tab_reveals_its_row_in_the_pipeline_sidebar_not_the_boards
199
+
143
200
  # ═══════════════════════════════════════════════════════════════════════════
144
201
  # FOR THE COORDINATOR — three findings from authoring this slice. None of them
145
202
  # is a worker's to fix, and none was resolved by editing the contract (a
@@ -255,3 +312,73 @@ expected_red:
255
312
  # (quadraui#593) have also landed (`style_at`/`styled_row`), but §1's ruling
256
313
  # stands: the `∘ ` marker remains the pinned preview signal, and this slice
257
314
  # asserts no styles.
315
+
316
+ # ═══════════════════════════════════════════════════════════════════════════
317
+ # FOR THE COORDINATOR — findings from authoring the #2284 slice (contract §3).
318
+ # Independent of the #2282 / #2283 notes above; again, none is a worker's to
319
+ # fix by editing this suite, and none was resolved by editing the contract.
320
+ # ═══════════════════════════════════════════════════════════════════════════
321
+ #
322
+ # 7. LIVE HARNESS BLOCKER (flaky, machine-dependent, and it will bite #2284's
323
+ # worker on the very first run): **entering the Pipeline panel destroys the
324
+ # seeded fixture in the sealed suite.** Switching panels runs
325
+ # `sync_active_view_from_shell` -> `maybe_kick_pipeline_loader` ->
326
+ # `refresh()` -> `start_data_load()` (`tui/src/app/data.rs:2620`). That
327
+ # function short-circuits to `BoardData::default()` — so
328
+ # `apply_pending_data`'s #620 degraded-tick guard keeps the seeded board —
329
+ # but the short-circuit is gated `#[cfg(test)]` ONLY. `tui/tests/acceptance.rs`
330
+ # is a separate integration-test crate, so the `coord_tui` it links is built
331
+ # WITHOUT `cfg(test)`; the loader therefore reads the real local
332
+ # `~/.coord/coord.db`, and the next dispatched event (`dispatch_handle`
333
+ # drains the receiver before handling anything) wholesale-replaces
334
+ # `self.data`. Measured on this machine: two clicks after landing on
335
+ # Pipeline, the Board sidebar renders the developer's real `api (1)` repo
336
+ # and the Pipeline tree is empty ("Loading tracked issues…").
337
+ #
338
+ # It is a RACE, not a certainty — the load runs on a spawned thread, so
339
+ # whether the fixture survives depends on whether that thread finished
340
+ # before the next event. Across three authoring runs, 3 of the 5 red ids
341
+ # died at the harness precondition and 2 got far enough to fail on the real
342
+ # §3a clause; which is which varied run to run. Every affected assertion
343
+ # says `HARNESS PRECONDITION (NOT a #2284 defect …)` in its panic message so
344
+ # the two failure modes are distinguishable from a JSON report alone.
345
+ #
346
+ # The fix is one line of app code, and this repo has already made it once
347
+ # for the same reason: `resolve_board_service()`
348
+ # (`tui/src/app/data.rs:1950`) is gated
349
+ # `#[cfg(any(test, feature = "test-support"))]` with a comment citing #1039
350
+ # and naming this exact external-crate `cfg(test)` trap.
351
+ # `start_data_load()`'s stub needs the same widening. It is NOT in #2284's
352
+ # "Files" list, so the coordinator should either land it as a prerequisite
353
+ # or explicitly authorise the worker to widen that cfg — without it the five
354
+ # red ids below cannot go green reliably no matter how correct the
355
+ # per-scope tab model is.
356
+ #
357
+ # 8. §3b's "same scroll position as before the switch" is not asserted. The
358
+ # round-trip test opens three tabs in an 82-column strip, where nothing is
359
+ # scrolled, and the contract pins no rendered signal for a *restored* strip
360
+ # scroll offset beyond §4's `‹`/`›` affordances — which are #2283's slice
361
+ # and whose own mock the #2283 author already flagged (finding 4) as
362
+ # contradicting §2b's label width. Inventing an observable for it would
363
+ # have meant inventing a width. Flagged as a `TODO(test-author)` in the
364
+ # slice.
365
+ #
366
+ # 9. §2f's scroll half is likewise not re-asserted for the Pipeline scope.
367
+ # #2284's own AC says "reveals its row in the Pipeline sidebar, not the
368
+ # Board's", and the contract pins the scroll requirement only for the Board
369
+ # (§2f, five issues on a short viewport). This slice asserts the per-scope
370
+ # SELECTION (`▸ #201` inside the Pipeline sidebar's columns 3–37, plus the
371
+ # Board's own `▸ #103` surviving a Pipeline-side activation) and leaves the
372
+ # scroll half to #2282's slice, which owns §2f. Also a `TODO(test-author)`.
373
+ #
374
+ # Also worth knowing, not a contract problem: the Pipeline sidebar nests
375
+ # tracked issues under state -> repo -> milestone nodes whose innermost node is
376
+ # COLLAPSED by default, and renders rows as `#201 Add retry backoffwork`
377
+ # (two spaces, title truncated to the 35-column sidebar, stage badge butted
378
+ # against it) — nothing like the mocks' `#201 Add retry backoff to fetch`. The
379
+ # slice therefore targets Pipeline rows by their `#<N>` tag restricted to the
380
+ # sidebar columns (§0), never by a full row string, and expands that group as a
381
+ # labelled precondition. The fixture also gives #101–#103 an untracked label
382
+ # and #201–#203 the tracked `coord` one: the Board sidebar lists all six (it
383
+ # does not filter by label) while the Pipeline lists only the 200s, which is
384
+ # what makes the mocks' 100s/200s ranges disjoint in a single seeded board.