code-coordinator 0.5.146__tar.gz → 0.5.148__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 (868) hide show
  1. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/PKG-INFO +3 -1
  2. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/README.md +2 -0
  3. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/code_coordinator.egg-info/PKG-INFO +3 -1
  4. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/code_coordinator.egg-info/SOURCES.txt +1 -0
  5. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/code_coordinator.egg-info/scm_file_list.json +1 -0
  6. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/code_coordinator.egg-info/scm_version.json +2 -2
  7. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/commands/drive.py +25 -1
  8. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/commands/lifecycle.py +21 -2
  9. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/server.py +17 -1
  10. code_coordinator-0.5.148/docs/ADR_COORD_WEB_DIST.md +158 -0
  11. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/docs/PHONE_WEBAPP.md +6 -0
  12. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_decide.py +72 -0
  13. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_dashboard.py +212 -1
  14. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/src/app/dialogs.rs +7 -16
  15. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/src/app/drive_queue.rs +193 -4
  16. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/src/app/escalation.rs +32 -0
  17. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/.claude/commands/board.md +0 -0
  18. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/.claude/commands/complete-session.md +0 -0
  19. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/.claude/commands/coordinator.md +0 -0
  20. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/.githooks/_lib.sh +0 -0
  21. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/.githooks/post-checkout +0 -0
  22. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/.githooks/post-commit +0 -0
  23. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/.githooks/post-merge +0 -0
  24. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  25. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/.github/coord-ci-acceptance.yml +0 -0
  26. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/.github/workflows/acceptance-web.yml +0 -0
  27. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/.github/workflows/auto-release.yml +0 -0
  28. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/.github/workflows/cargo-test.yml +0 -0
  29. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/.github/workflows/publish.yml +0 -0
  30. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/.github/workflows/release-tui.yml +0 -0
  31. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/.github/workflows/test.yml +0 -0
  32. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/.gitignore +0 -0
  33. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/CLAUDE.md +0 -0
  34. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/GOAL.md +0 -0
  35. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/LICENSE +0 -0
  36. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/MANIFEST.in +0 -0
  37. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/code_coordinator.egg-info/dependency_links.txt +0 -0
  38. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/code_coordinator.egg-info/entry_points.txt +0 -0
  39. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/code_coordinator.egg-info/requires.txt +0 -0
  40. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/code_coordinator.egg-info/top_level.txt +0 -0
  41. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/__init__.py +0 -0
  42. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/_board_mapping.py +0 -0
  43. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/acceptance.py +0 -0
  44. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/acceptance_drivers.py +0 -0
  45. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/agent.py +0 -0
  46. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/agent_app.py +0 -0
  47. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/agent_update.py +0 -0
  48. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/agents/opencode/.gitignore +0 -0
  49. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/agents/opencode/agents/work.md +0 -0
  50. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/agents/opencode/routing.jsonc +0 -0
  51. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/audit.py +0 -0
  52. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/auto_loop.py +0 -0
  53. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/block_log.py +0 -0
  54. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/board_bool_guard.py +0 -0
  55. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/board_service.py +0 -0
  56. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/board_wire.py +0 -0
  57. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/brain.py +0 -0
  58. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/branch_model.py +0 -0
  59. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/bug_intake.py +0 -0
  60. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/cargo_cache.py +0 -0
  61. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/ci_github.py +0 -0
  62. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/ci_store.py +0 -0
  63. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/claim.py +0 -0
  64. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/cli.py +0 -0
  65. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/client.py +0 -0
  66. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/commands/__init__.py +0 -0
  67. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/commands/_common.py +0 -0
  68. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/commands/acceptance.py +0 -0
  69. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/commands/agent_ops.py +0 -0
  70. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/commands/audit.py +0 -0
  71. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/commands/chat.py +0 -0
  72. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/commands/dispatch.py +0 -0
  73. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/commands/dispatch_workers.py +0 -0
  74. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/commands/drive_queue.py +0 -0
  75. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/commands/gate_a.py +0 -0
  76. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/commands/gates.py +0 -0
  77. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/commands/issues.py +0 -0
  78. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/commands/merge.py +0 -0
  79. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/commands/milestone.py +0 -0
  80. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/commands/plan_followup.py +0 -0
  81. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/commands/plans.py +0 -0
  82. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/commands/portal.py +0 -0
  83. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/commands/release.py +0 -0
  84. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/commands/repo.py +0 -0
  85. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/commands/report.py +0 -0
  86. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/commands/review.py +0 -0
  87. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/commands/scorecard.py +0 -0
  88. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/commands/sessions.py +0 -0
  89. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/commands/setup.py +0 -0
  90. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/commands/status.py +0 -0
  91. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/commands/terminal.py +0 -0
  92. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/commands/test_gate.py +0 -0
  93. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/commands/tui.py +0 -0
  94. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/comments.py +0 -0
  95. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/config.py +0 -0
  96. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/config_reload.py +0 -0
  97. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/conflict_fix.py +0 -0
  98. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dao.py +0 -0
  99. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/__init__.py +0 -0
  100. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/fixture.py +0 -0
  101. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/index.html +0 -0
  102. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/terminal.py +0 -0
  103. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/.gitignore +0 -0
  104. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/components.json +0 -0
  105. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/dist/assets/Gallery-BoKs3mpY.js +0 -0
  106. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
  107. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/dist/assets/Terminal-CEsP08iX.js +0 -0
  108. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/dist/assets/index-CDHPlB6k.js +0 -0
  109. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
  110. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
  111. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
  112. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
  113. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
  114. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/dist/index.html +0 -0
  115. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
  116. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/dist/sw.js +0 -0
  117. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
  118. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
  119. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
  120. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
  121. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
  122. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
  123. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
  124. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
  125. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
  126. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
  127. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/eslint.config.js +0 -0
  128. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/index.html +0 -0
  129. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
  130. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/package-lock.json +0 -0
  131. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/package.json +0 -0
  132. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
  133. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/playwright.config.ts +0 -0
  134. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/postcss.config.js +0 -0
  135. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
  136. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
  137. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
  138. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/App.tsx +0 -0
  139. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/api/client.ts +0 -0
  140. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/api/generated.ts +0 -0
  141. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
  142. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
  143. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
  144. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
  145. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
  146. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
  147. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
  148. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
  149. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
  150. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
  151. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
  152. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
  153. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
  154. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
  155. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
  156. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
  157. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
  158. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
  159. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
  160. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
  161. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
  162. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
  163. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
  164. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
  165. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
  166. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
  167. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
  168. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
  169. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
  170. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
  171. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
  172. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
  173. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
  174. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
  175. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/index.css +0 -0
  176. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
  177. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
  178. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/main.tsx +0 -0
  179. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
  180. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
  181. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
  182. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
  183. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
  184. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
  185. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
  186. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
  187. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
  188. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
  189. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
  190. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
  191. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
  192. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
  193. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
  194. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
  195. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
  196. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
  197. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
  198. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
  199. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
  200. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/test-setup.ts +0 -0
  201. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
  202. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/tailwind.config.js +0 -0
  203. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/tsconfig.json +0 -0
  204. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/tsconfig.node.json +0 -0
  205. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/vite.config.ts +0 -0
  206. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/db.py +0 -0
  207. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dead_end.py +0 -0
  208. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/deploy/README.md +0 -0
  209. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/deploy/coord-agent.service +0 -0
  210. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/deploy/coord-db-backup.service +0 -0
  211. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/deploy/coord-db-backup.sh +0 -0
  212. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/deploy/coord-db-backup.timer +0 -0
  213. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/deploy/coord-drive-queue.service +0 -0
  214. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/deploy/coord-drive-queue.timer +0 -0
  215. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/deploy/coord-notify.service +0 -0
  216. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/deploy/coord-notify.timer +0 -0
  217. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/deploy/coord-release-propagate.service +0 -0
  218. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/deploy/coord-release-propagate.timer +0 -0
  219. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/deploy/coord-release-window.service +0 -0
  220. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/deploy/coord-release-window.timer +0 -0
  221. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/deploy/coord-serve.service +0 -0
  222. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/deploy/coord-web-dist-build.service +0 -0
  223. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/deploy/coord-web-dist-build.timer +0 -0
  224. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/deploy/coord-web.service +0 -0
  225. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/deploy_manifest.py +0 -0
  226. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/deploy_units.py +0 -0
  227. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/deps.py +0 -0
  228. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/diagnose.py +0 -0
  229. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dispatch.py +0 -0
  230. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dist_name.py +0 -0
  231. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/drive.py +0 -0
  232. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/drive_queue.py +0 -0
  233. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/drive_state.py +0 -0
  234. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/events.py +0 -0
  235. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/failure_class.py +0 -0
  236. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/filelock.py +0 -0
  237. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/fleet_config_health.py +0 -0
  238. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/freshness.py +0 -0
  239. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/gate_a.py +0 -0
  240. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/gate_b.py +0 -0
  241. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/gate_snapshot.py +0 -0
  242. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/gates.py +0 -0
  243. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/github_ops.py +0 -0
  244. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/goal.py +0 -0
  245. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/graph_health.py +0 -0
  246. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/health/__init__.py +0 -0
  247. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/health/aggregate.py +0 -0
  248. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/health/checks/__init__.py +0 -0
  249. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/health/checks/agent_install.py +0 -0
  250. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/health/checks/cargo_targets.py +0 -0
  251. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/health/checks/claude_binary.py +0 -0
  252. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/health/checks/deploy_lane_facts.py +0 -0
  253. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/health/checks/disk.py +0 -0
  254. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/health/checks/fleet_board.py +0 -0
  255. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  256. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/health/checks/fleet_phantom.py +0 -0
  257. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/health/checks/fleet_unit_drift.py +0 -0
  258. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/health/checks/graph.py +0 -0
  259. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/health/checks/graphify_cli.py +0 -0
  260. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/health/checks/index_lock.py +0 -0
  261. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/health/checks/plan_usage.py +0 -0
  262. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/health/checks/repo_state.py +0 -0
  263. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/health/checks/spawned_coord.py +0 -0
  264. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/health/checks/timer_active.py +0 -0
  265. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/health/checks/toolchain.py +0 -0
  266. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/health/checks/unit_drift.py +0 -0
  267. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/health/checks/unit_enablement.py +0 -0
  268. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/health/checks/worktrees.py +0 -0
  269. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/health/cli.py +0 -0
  270. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/health/context.py +0 -0
  271. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/health/fleet_snapshot.py +0 -0
  272. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/health/models.py +0 -0
  273. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/health/pypi.py +0 -0
  274. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/health/registry.py +0 -0
  275. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/health/render.py +0 -0
  276. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/health/units.py +0 -0
  277. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/hooks.py +0 -0
  278. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/housekeeping.py +0 -0
  279. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/interactive.py +0 -0
  280. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/issue_store.py +0 -0
  281. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/liveness_auditor.py +0 -0
  282. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/machine_pause.py +0 -0
  283. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/merge_queue.py +0 -0
  284. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/milestone_chat.py +0 -0
  285. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/milestone_dispatch.py +0 -0
  286. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/milestone_gate.py +0 -0
  287. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/milestone_order.py +0 -0
  288. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/mock_author.py +0 -0
  289. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/models.py +0 -0
  290. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/network.py +0 -0
  291. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/new_issue_chat.py +0 -0
  292. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/notifier/__init__.py +0 -0
  293. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/notifier/baseline.py +0 -0
  294. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/notifier/cli.py +0 -0
  295. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/notifier/collect.py +0 -0
  296. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/notifier/digest.py +0 -0
  297. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/notifier/models.py +0 -0
  298. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/notifier/predicate.py +0 -0
  299. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/notifier/service.py +0 -0
  300. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/notifier/store.py +0 -0
  301. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/notifier/transport.py +0 -0
  302. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/notify.py +0 -0
  303. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/openapi.py +0 -0
  304. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/overlap_fence.py +0 -0
  305. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/overlap_predict.py +0 -0
  306. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/parentage.py +0 -0
  307. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/parentage_github.py +0 -0
  308. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/pipeline.py +0 -0
  309. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/plan_parser.py +0 -0
  310. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/plans.py +0 -0
  311. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/platform_paths.py +0 -0
  312. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/portal_bridge.py +0 -0
  313. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/portal_store.py +0 -0
  314. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/portal_sync.py +0 -0
  315. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/pr_body_lint.py +0 -0
  316. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/prereqs.py +0 -0
  317. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/progress.py +0 -0
  318. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/providers/__init__.py +0 -0
  319. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/providers/base.py +0 -0
  320. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/providers/claude.py +0 -0
  321. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/providers/claude_pty.py +0 -0
  322. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/providers/opencode.py +0 -0
  323. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/queue_diagnose.py +0 -0
  324. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/reconcile.py +0 -0
  325. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/reconcile_tick.py +0 -0
  326. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/refine_chat.py +0 -0
  327. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/release_cordon.py +0 -0
  328. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/release_propagate.py +0 -0
  329. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/release_verify.py +0 -0
  330. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/release_window.py +0 -0
  331. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/repo_edit.py +0 -0
  332. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/repo_onboard.py +0 -0
  333. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/reports.py +0 -0
  334. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/revalidate.py +0 -0
  335. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/review.py +0 -0
  336. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/scorecard.py +0 -0
  337. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/serve_app.py +0 -0
  338. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/skills/portal-followup/SKILL.md +0 -0
  339. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/skills/update-issue/SKILL.md +0 -0
  340. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/smoke.py +0 -0
  341. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/spend_ceiling.py +0 -0
  342. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/split_work.py +0 -0
  343. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/stage_projection.py +0 -0
  344. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/state.py +0 -0
  345. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/test_author.py +0 -0
  346. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/test_chat.py +0 -0
  347. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/test_orchestrator.py +0 -0
  348. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/test_report.py +0 -0
  349. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/tui_release.py +0 -0
  350. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/usage.py +0 -0
  351. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/usage_limits.py +0 -0
  352. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/usage_rollup.py +0 -0
  353. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/worker_events.py +0 -0
  354. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coordinator.example.yml +0 -0
  355. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/deploy/coord-agent.service +0 -0
  356. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/deploy/coord-db-backup.service +0 -0
  357. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/deploy/coord-db-backup.sh +0 -0
  358. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/deploy/coord-db-backup.timer +0 -0
  359. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/deploy/coord-drive-queue.service +0 -0
  360. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/deploy/coord-drive-queue.timer +0 -0
  361. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/deploy/coord-notify.service +0 -0
  362. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/deploy/coord-notify.timer +0 -0
  363. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/deploy/coord-release-propagate.service +0 -0
  364. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/deploy/coord-release-propagate.timer +0 -0
  365. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/deploy/coord-release-window.service +0 -0
  366. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/deploy/coord-release-window.timer +0 -0
  367. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/deploy/coord-serve.service +0 -0
  368. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/deploy/coord-web-dist-build.service +0 -0
  369. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/deploy/coord-web-dist-build.sh +0 -0
  370. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/deploy/coord-web-dist-build.timer +0 -0
  371. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/deploy/coord-web-rollback.sh +0 -0
  372. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/deploy/coord-web.service +0 -0
  373. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/deploy/node-shim.sh +0 -0
  374. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/docs/AGENT_OPERATIONS.md +0 -0
  375. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/docs/ARCHITECTURE.md +0 -0
  376. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/docs/ARCH_SECURITY_GATES.md +0 -0
  377. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/docs/COCKPIT.md +0 -0
  378. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/docs/CONTROL_CENTER.md +0 -0
  379. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/docs/COST_DISCIPLINE.md +0 -0
  380. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/docs/CROSS_PLATFORM.md +0 -0
  381. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/docs/CUSTOMER_PORTAL.md +0 -0
  382. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/docs/DRIVE_QUEUE.md +0 -0
  383. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/docs/EPHEMERAL_WORKERS.md +0 -0
  384. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/docs/FORGE_MIGRATION.md +0 -0
  385. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/docs/GRAPHIFY_SETUP.md +0 -0
  386. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/docs/ISSUE_GUIDANCE.md +0 -0
  387. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/docs/MAC_MINI.md +0 -0
  388. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  389. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/docs/NOTIFIER.md +0 -0
  390. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/docs/OPENCODE_VERIFICATION.md +0 -0
  391. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/docs/OPERATING_GOTCHAS.md +0 -0
  392. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/docs/ORACLE_LOOP.md +0 -0
  393. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/docs/PIPELINE_V2.md +0 -0
  394. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/docs/PLATFORM_EVOLUTION.md +0 -0
  395. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/docs/SECOND_BACKEND.md +0 -0
  396. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/docs/STORE_SERVICE.md +0 -0
  397. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  398. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/docs/WEB_CONTROL_CENTER.md +0 -0
  399. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/docs/WSL_WINDOWS_WORKER.md +0 -0
  400. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/docs/mocks/web/README.md +0 -0
  401. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/docs/mocks/web/_tokens.css +0 -0
  402. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/docs/mocks/web/issue-detail.html +0 -0
  403. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/docs/mocks/web/pipeline-narrow.html +0 -0
  404. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/docs/mocks/web/pipeline-wide.html +0 -0
  405. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/graphify-out/.gitignore +0 -0
  406. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/install-agent.sh +0 -0
  407. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/pyproject.toml +0 -0
  408. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/scripts/audit_review_verdict_overrides.py +0 -0
  409. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  410. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/scripts/azure-workers/build-worker-image.sh +0 -0
  411. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/scripts/azure-workers/coordinator-machine.py +0 -0
  412. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/scripts/azure-workers/epic-down.sh +0 -0
  413. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/scripts/azure-workers/epic-up.sh +0 -0
  414. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/scripts/azure-workers/preflight.sh +0 -0
  415. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/scripts/azure-workers/provision-worker.sh +0 -0
  416. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  417. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  418. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/scripts/azure-workers/verify-github-token.sh +0 -0
  419. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/scripts/codegen.py +0 -0
  420. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/scripts/coord-test-runner.sh +0 -0
  421. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/scripts/drive-batch.sh +0 -0
  422. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/scripts/gen_board_fixture.py +0 -0
  423. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/scripts/next_release_tag.py +0 -0
  424. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/scripts/run_tests_in_populated_home.sh +0 -0
  425. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/scripts/run_tests_without_gh.sh +0 -0
  426. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/scripts/smoke_437_interactive.py +0 -0
  427. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/scripts/verify_878_review_capture.py +0 -0
  428. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/scripts/verify_release_published.py +0 -0
  429. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/scripts/verify_release_wheel.py +0 -0
  430. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/setup.cfg +0 -0
  431. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/SMOKE_SET.md +0 -0
  432. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/__init__.py +0 -0
  433. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  434. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-33/contract.md +0 -0
  435. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-33/manifest.yml +0 -0
  436. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  437. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  438. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  439. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  440. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-37/conftest.py +0 -0
  441. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-37/contract.md +0 -0
  442. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-37/manifest.yml +0 -0
  443. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  444. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  445. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-38/contract.md +0 -0
  446. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-38/manifest.yml +0 -0
  447. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  448. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  449. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  450. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  451. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  452. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  453. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  454. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  455. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  456. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  457. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-51/contract.md +0 -0
  458. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  459. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  460. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-51/manifest.yml +0 -0
  461. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  462. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-51/tsconfig.json +0 -0
  463. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
  464. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
  465. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-65/contract.md +0 -0
  466. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-65/manifest.yml +0 -0
  467. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
  468. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
  469. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
  470. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
  471. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
  472. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
  473. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
  474. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
  475. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  476. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/conftest.py +0 -0
  477. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/fixtures/board-pipeline-basic.json +0 -0
  478. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  479. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  480. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  481. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  482. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/fixtures/playwright/all_pass.json +0 -0
  483. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  484. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/fixtures/playwright/mixed_fail.json +0 -0
  485. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  486. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  487. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/fixtures/playwright/skip.json +0 -0
  488. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/fixtures/playwright/truncated.json +0 -0
  489. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  490. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  491. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  492. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  493. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  494. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  495. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  496. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  497. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_acceptance.py +0 -0
  498. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_acceptance_drivers.py +0 -0
  499. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_agent.py +0 -0
  500. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_agent_api_error.py +0 -0
  501. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_agent_app.py +0 -0
  502. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_agent_branch_base.py +0 -0
  503. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_agent_branch_capture.py +0 -0
  504. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_agent_config_free_1712.py +0 -0
  505. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_agent_deploy_units_endpoint.py +0 -0
  506. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_agent_dirty_worktree.py +0 -0
  507. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  508. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_agent_graph_self_heal.py +0 -0
  509. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_agent_health_h3.py +0 -0
  510. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_agent_idle_restart.py +0 -0
  511. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_agent_push_failure.py +0 -0
  512. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_agent_reap.py +0 -0
  513. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_agent_repos_and_pull.py +0 -0
  514. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_agent_restart_services_endpoint.py +0 -0
  515. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_agent_startup_diagnostics.py +0 -0
  516. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_agent_update.py +0 -0
  517. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_agent_update_bluegreen.py +0 -0
  518. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_agent_usage_limit.py +0 -0
  519. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_agent_zero_commit.py +0 -0
  520. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_ambient_home_isolation.py +0 -0
  521. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_approve_reject_plan.py +0 -0
  522. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_approve_usage_gate.py +0 -0
  523. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_assignment_already_recorded_daemon.py +0 -0
  524. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_audit_log.py +0 -0
  525. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_audit_outcome.py +0 -0
  526. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_audit_query.py +0 -0
  527. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_auto_loop.py +0 -0
  528. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_auto_release_publish_2035.py +0 -0
  529. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_base_checkout_restore.py +0 -0
  530. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_block_log.py +0 -0
  531. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_board_cap_762.py +0 -0
  532. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_board_fixture.py +0 -0
  533. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_board_read_path.py +0 -0
  534. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_board_service.py +0 -0
  535. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_board_state.py +0 -0
  536. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_board_wire.py +0 -0
  537. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_brain.py +0 -0
  538. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_branch_model.py +0 -0
  539. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_bug_intake.py +0 -0
  540. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_build_worker_image_env_update.py +0 -0
  541. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cargo_cache.py +0 -0
  542. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_ci_acceptance_gate_1950.py +0 -0
  543. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_ci_parity_2091.py +0 -0
  544. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_ci_store.py +0 -0
  545. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_claim.py +0 -0
  546. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_acceptance.py +0 -0
  547. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_assign.py +0 -0
  548. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  549. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_assign_interactive_remote.py +0 -0
  550. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_assign_provider.py +0 -0
  551. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  552. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_audit.py +0 -0
  553. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_chat_continue.py +0 -0
  554. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_diagnose_config_provenance.py +0 -0
  555. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_diagnose_graph.py +0 -0
  556. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_doctor.py +0 -0
  557. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_doctor_config_free_1801.py +0 -0
  558. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  559. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_drive.py +0 -0
  560. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_drive_queue.py +0 -0
  561. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_escalate.py +0 -0
  562. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_fix_headless_review.py +0 -0
  563. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_gate_a.py +0 -0
  564. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_install_drift.py +0 -0
  565. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_install_skills.py +0 -0
  566. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_issue_create_label.py +0 -0
  567. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_issue_reopen.py +0 -0
  568. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_merge.py +0 -0
  569. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_milestone_assign.py +0 -0
  570. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_milestone_capture.py +0 -0
  571. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_milestone_chat_add_child.py +0 -0
  572. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_milestone_dispatch.py +0 -0
  573. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_milestone_gate_b.py +0 -0
  574. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_milestone_gate_c.py +0 -0
  575. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_milestone_order.py +0 -0
  576. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  577. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_milestone_ship.py +0 -0
  578. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_network.py +0 -0
  579. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_new_issue_chat.py +0 -0
  580. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_plans.py +0 -0
  581. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_portal.py +0 -0
  582. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_pull_artifact.py +0 -0
  583. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_queue.py +0 -0
  584. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_reattach_sessions.py +0 -0
  585. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_refine_board.py +0 -0
  586. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_release_preflight.py +0 -0
  587. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_release_propagate.py +0 -0
  588. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_release_window.py +0 -0
  589. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_repo_2220.py +0 -0
  590. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_scorecard.py +0 -0
  591. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_set_review_findings.py +0 -0
  592. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_status_advisory_terminal.py +0 -0
  593. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_status_merge_queue.py +0 -0
  594. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_status_provider.py +0 -0
  595. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_status_review_finalizing.py +0 -0
  596. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_status_test_failed_tag.py +0 -0
  597. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_status_usage_limit.py +0 -0
  598. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_sync_comments_873.py +0 -0
  599. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_test_plan.py +0 -0
  600. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_track.py +0 -0
  601. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_tui_update.py +0 -0
  602. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_wait.py +0 -0
  603. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_client_base_install.py +0 -0
  604. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_comments.py +0 -0
  605. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_completion_summary.py +0 -0
  606. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_config.py +0 -0
  607. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_config_acceptance.py +0 -0
  608. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_config_audit.py +0 -0
  609. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_config_pricing.py +0 -0
  610. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  611. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_config_usage_gate.py +0 -0
  612. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_conflict_fix.py +0 -0
  613. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_conflict_fix_semantic.py +0 -0
  614. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_coord_test.py +0 -0
  615. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_coord_test_runner_baseline.py +0 -0
  616. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_coord_test_runner_populated_home.py +0 -0
  617. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_coord_test_runner_routing.py +0 -0
  618. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_coord_test_runner_toolchain.py +0 -0
  619. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_coord_web_sse_restart_live.py +0 -0
  620. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_coordinator_machine.py +0 -0
  621. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cross_platform_imports.py +0 -0
  622. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_dashboard_fixture.py +0 -0
  623. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_dashboard_terminal.py +0 -0
  624. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_dashboard_terminal_live.py +0 -0
  625. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_db.py +0 -0
  626. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_dead_end.py +0 -0
  627. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_deploy_coord_db_backup.py +0 -0
  628. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_deploy_coord_web_dist.py +0 -0
  629. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_deploy_coord_web_rollback.py +0 -0
  630. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_deploy_drive_queue_unit.py +0 -0
  631. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_deploy_manifest.py +0 -0
  632. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_deploy_units_lane.py +0 -0
  633. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_deploy_web_unit.py +0 -0
  634. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_deps.py +0 -0
  635. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_diagnose.py +0 -0
  636. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_dispatch.py +0 -0
  637. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_dispatch_target_validation.py +0 -0
  638. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_dist_name.py +0 -0
  639. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_done_housekeeping.py +0 -0
  640. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_drive.py +0 -0
  641. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_drive_queue.py +0 -0
  642. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_drive_state.py +0 -0
  643. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_drive_tmux.py +0 -0
  644. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_epic_up_capability_detection.py +0 -0
  645. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  646. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_epic_up_image_provenance.py +0 -0
  647. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_errors.py +0 -0
  648. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_events.py +0 -0
  649. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_failure_class.py +0 -0
  650. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_filelock.py +0 -0
  651. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  652. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_fix_of_force_override.py +0 -0
  653. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_fleet_config_health.py +0 -0
  654. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_fleet_health_probes.py +0 -0
  655. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_fleet_health_snapshot.py +0 -0
  656. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_freshness.py +0 -0
  657. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_gate_a.py +0 -0
  658. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_gate_b.py +0 -0
  659. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_gate_snapshot_staleness.py +0 -0
  660. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_gates.py +0 -0
  661. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  662. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_generated_types_fixture.py +0 -0
  663. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_github_ops.py +0 -0
  664. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_goal.py +0 -0
  665. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_graph_health.py +0 -0
  666. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_graph_selfheal_absent_2237.py +0 -0
  667. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_handoff.py +0 -0
  668. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_health_checks.py +0 -0
  669. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_health_cli.py +0 -0
  670. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_health_cli_graph.py +0 -0
  671. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_health_config.py +0 -0
  672. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_health_context.py +0 -0
  673. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_health_deploy_lane_facts.py +0 -0
  674. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_health_incident_regression.py +0 -0
  675. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_health_pypi.py +0 -0
  676. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_health_registry.py +0 -0
  677. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_health_timer_active.py +0 -0
  678. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_health_toolchain.py +0 -0
  679. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_health_unit_drift.py +0 -0
  680. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_health_unit_enablement.py +0 -0
  681. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_hooks.py +0 -0
  682. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_human_attended_437.py +0 -0
  683. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_init.py +0 -0
  684. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_integration.py +0 -0
  685. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_interactive_briefing_echo.py +0 -0
  686. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_interactive_prefill_state.py +0 -0
  687. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_interactive_session_relaunch.py +0 -0
  688. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_interactive_test_verdict_backstop.py +0 -0
  689. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_interactive_token_attribution.py +0 -0
  690. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_interactive_worktree.py +0 -0
  691. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_issue_store_seam.py +0 -0
  692. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_liveness_auditor.py +0 -0
  693. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_liveness_notify.py +0 -0
  694. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_machine_pause.py +0 -0
  695. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_merge_queue.py +0 -0
  696. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_merge_verify.py +0 -0
  697. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_milestone_chat.py +0 -0
  698. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_milestone_dispatch.py +0 -0
  699. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_milestone_gate.py +0 -0
  700. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_milestone_order.py +0 -0
  701. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_milestone_seam.py +0 -0
  702. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_mock_author.py +0 -0
  703. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_model_tiering.py +0 -0
  704. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_models.py +0 -0
  705. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_models_config_labels.py +0 -0
  706. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_needs_attention.py +0 -0
  707. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_network.py +0 -0
  708. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_new_issue_chat.py +0 -0
  709. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_next_release_tag.py +0 -0
  710. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_no_direct_gh_calls.py +0 -0
  711. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_node_shim.py +0 -0
  712. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_notifier_baseline.py +0 -0
  713. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_notifier_cli.py +0 -0
  714. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_notifier_collect.py +0 -0
  715. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_notifier_config.py +0 -0
  716. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_notifier_drive_seam.py +0 -0
  717. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_notifier_isolation.py +0 -0
  718. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_notifier_predicate.py +0 -0
  719. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_notifier_quiet_hours.py +0 -0
  720. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_notifier_service.py +0 -0
  721. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_notify.py +0 -0
  722. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_notify_drain.py +0 -0
  723. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_openapi.py +0 -0
  724. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_operational_defaults.py +0 -0
  725. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_overlap_fence.py +0 -0
  726. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_overlap_predict.py +0 -0
  727. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_packaged_deploy_units.py +0 -0
  728. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_parentage.py +0 -0
  729. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_paste_landed.py +0 -0
  730. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_pipeline.py +0 -0
  731. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_plan_followup_approve_plan_command.py +0 -0
  732. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_plan_followup_pr_command.py +0 -0
  733. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_plan_followup_review_command.py +0 -0
  734. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_plan_only.py +0 -0
  735. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_plan_parser.py +0 -0
  736. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_platform_paths.py +0 -0
  737. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_portal_bridge.py +0 -0
  738. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_portal_config.py +0 -0
  739. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_portal_sync.py +0 -0
  740. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_pr_body_lint.py +0 -0
  741. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_prereqs.py +0 -0
  742. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_production_db_guard.py +0 -0
  743. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_progress.py +0 -0
  744. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_provider_seam.py +0 -0
  745. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_providers.py +0 -0
  746. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_providers_config_labels.py +0 -0
  747. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_providers_pty.py +0 -0
  748. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_quiet_hours.py +0 -0
  749. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_quiet_hours_store_2146.py +0 -0
  750. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_reap_merged_sessions.py +0 -0
  751. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_reap_stale_interactive_tick.py +0 -0
  752. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_reconcile.py +0 -0
  753. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_reconcile_branch.py +0 -0
  754. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_reconcile_completions.py +0 -0
  755. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_reconcile_merges.py +0 -0
  756. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_reconcile_no_agent_record.py +0 -0
  757. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_reconcile_tick.py +0 -0
  758. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_reconcile_usage_limit_done.py +0 -0
  759. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_refine_chat.py +0 -0
  760. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_release_cordon_2101.py +0 -0
  761. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  762. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_release_cordon_deadlock_2240.py +0 -0
  763. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_release_propagate.py +0 -0
  764. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_release_unified_1242.py +0 -0
  765. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_release_verify.py +0 -0
  766. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_release_window.py +0 -0
  767. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_remote_auto_prune.py +0 -0
  768. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_remote_interactive_reaper.py +0 -0
  769. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_repo_edit_2220.py +0 -0
  770. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_repo_graph_fleet_2237.py +0 -0
  771. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_repo_onboard_2220.py +0 -0
  772. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_report_result_push.py +0 -0
  773. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_reports.py +0 -0
  774. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_retry.py +0 -0
  775. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_retry_advisory_1606.py +0 -0
  776. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_retry_type_1636.py +0 -0
  777. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_revalidate.py +0 -0
  778. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_review.py +0 -0
  779. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_review_end_review_without_verdict.py +0 -0
  780. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_review_parse_failure_diagnostic.py +0 -0
  781. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_review_reaffirm.py +0 -0
  782. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_review_state.py +0 -0
  783. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_review_verdict_backstop.py +0 -0
  784. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_review_verdict_override_audit.py +0 -0
  785. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_review_verdict_relay.py +0 -0
  786. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_review_zero_commits.py +0 -0
  787. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_scoped_review_wiring.py +0 -0
  788. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_scorecard.py +0 -0
  789. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_serve.py +0 -0
  790. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_serve_app_board_trim.py +0 -0
  791. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_session.py +0 -0
  792. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_slice_issue_attribution.py +0 -0
  793. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_smoke.py +0 -0
  794. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_smoke_live_checkout_restore.py +0 -0
  795. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_smoke_workflow.py +0 -0
  796. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_spend_ceiling.py +0 -0
  797. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_spend_ceiling_coordinator.py +0 -0
  798. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_split.py +0 -0
  799. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_split_work.py +0 -0
  800. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_stage_projection.py +0 -0
  801. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_stalled_pipeline.py +0 -0
  802. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_state.py +0 -0
  803. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_state_review_findings_daemon.py +0 -0
  804. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_status_fleet_footer.py +0 -0
  805. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_stop_1567.py +0 -0
  806. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_stuck.py +0 -0
  807. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_terminal_command.py +0 -0
  808. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_test_author.py +0 -0
  809. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_test_chat.py +0 -0
  810. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_test_orchestrator.py +0 -0
  811. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_test_report.py +0 -0
  812. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_test_verdict_parsing.py +0 -0
  813. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_test_verdict_transcript_floor.py +0 -0
  814. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_thin_client_board_audit.py +0 -0
  815. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_thin_client_config_load_1080.py +0 -0
  816. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_thin_client_daemon_routing_906.py +0 -0
  817. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_tmux_host.py +0 -0
  818. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_tmux_session.py +0 -0
  819. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_transcript_floor.py +0 -0
  820. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_usage.py +0 -0
  821. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_usage_limits.py +0 -0
  822. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_usage_rollup.py +0 -0
  823. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_venv_live_install_2121.py +0 -0
  824. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_version_single_source.py +0 -0
  825. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_watch.py +0 -0
  826. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  827. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_worker_events.py +0 -0
  828. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_worker_image_pin_sync.py +0 -0
  829. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_worker_safety.py +0 -0
  830. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_worker_test_scoping.py +0 -0
  831. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_worktree.py +0 -0
  832. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  833. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/Cargo.lock +0 -0
  834. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/Cargo.toml +0 -0
  835. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/cargo-config-local-quadraui.toml.example +0 -0
  836. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/src/app/audit.rs +0 -0
  837. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/src/app/chat.rs +0 -0
  838. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/src/app/data.rs +0 -0
  839. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/src/app/doc_tabs.rs +0 -0
  840. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/src/app/drive.rs +0 -0
  841. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/src/app/events.rs +0 -0
  842. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/src/app/fixtures.rs +0 -0
  843. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/src/app/fleet_health.rs +0 -0
  844. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/src/app/fleet_sessions.rs +0 -0
  845. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/src/app/fleet_terminals.rs +0 -0
  846. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/src/app/format.rs +0 -0
  847. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/src/app/milestone_dag.rs +0 -0
  848. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/src/app/mod.rs +0 -0
  849. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/src/app/msv.rs +0 -0
  850. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/src/app/pipeline.rs +0 -0
  851. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/src/app/plans.rs +0 -0
  852. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/src/app/render.rs +0 -0
  853. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/src/app/reports.rs +0 -0
  854. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/src/app/sessions.rs +0 -0
  855. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/src/app/settings_ui.rs +0 -0
  856. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/src/app/sidebar.rs +0 -0
  857. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/src/app/terminal.rs +0 -0
  858. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/src/app/tests.rs +0 -0
  859. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/src/app/types.rs +0 -0
  860. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/src/app/workspace.rs +0 -0
  861. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/src/bin/gtk.rs +0 -0
  862. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/src/commands.rs +0 -0
  863. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/src/lib.rs +0 -0
  864. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/src/main.rs +0 -0
  865. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/src/settings.rs +0 -0
  866. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/tests/acceptance.rs +0 -0
  867. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/tests/cli.rs +0 -0
  868. {code_coordinator-0.5.146 → code_coordinator-0.5.148}/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.146
3
+ Version: 0.5.148
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.146
3
+ Version: 0.5.148
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
@@ -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",
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "0.5.146",
2
+ "tag": "0.5.148",
3
3
  "distance": 0,
4
- "node": "geabea71cd1e375065c4baa33f806f7f473662f82",
4
+ "node": "gc274183d70afe3f92607c261ef1ba839d2fb672a",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-18"
@@ -692,12 +692,22 @@ def escalate_run(repo: str, issue: int, dismiss: bool, config_path: Path) -> Non
692
692
  "option or a drive-queue-only card; see the command's docstring."
693
693
  ),
694
694
  )
695
+ @click.option(
696
+ "--list", "list_only", is_flag=True, default=False,
697
+ help=(
698
+ "Print REPO ISSUE's numbered option list (same options "
699
+ "`coord report run decisions`/`coord escalate list` would show for "
700
+ "this row) and exit — runs nothing. #2375: the discovery path the "
701
+ "bare/indexed invocation deliberately doesn't provide."
702
+ ),
703
+ )
695
704
  @_CONFIG_OPTION
696
705
  def decide(
697
706
  repo: str,
698
707
  issue: int,
699
708
  option_index: int | None,
700
709
  dismiss: bool,
710
+ list_only: bool,
701
711
  config_path: Path,
702
712
  ) -> None:
703
713
  """Run one option from REPO ISSUE's `decisions` report card.
@@ -724,8 +734,16 @@ def decide(
724
734
  reappearance-or-not on the next `coord report run decisions` is the
725
735
  confirmation signal, not a second "resolved" state that could go
726
736
  stale or lie.
737
+
738
+ #2375: `--list` prints this same card's numbered options and stops —
739
+ the discovery path for picking OPTION_INDEX without running anything.
740
+ It is a NEW flag, not a change to the bare/no-index contract above:
741
+ that contract (#2370's own shipped acceptance criterion — no
742
+ OPTION_INDEX behaves identically to `coord escalate run`) stays exactly
743
+ as it is, since the TUI's "Recommended" click and #2370's acceptance
744
+ test both depend on it firing immediately.
727
745
  """
728
- from coord.reports import find_decision # noqa: PLC0415
746
+ from coord.reports import find_decision, format_option_cell # noqa: PLC0415
729
747
  from coord.state import dismiss_drive_escalation # noqa: PLC0415
730
748
 
731
749
  card = find_decision(repo, issue)
@@ -736,6 +754,12 @@ def decide(
736
754
  if not options:
737
755
  raise click.ClickException(f"decision card for {repo} #{issue} has no options")
738
756
 
757
+ if list_only:
758
+ click.echo(f"{repo} #{issue}: {len(options)} option(s)")
759
+ for i, opt in enumerate(options):
760
+ click.echo(f" {i}: {format_option_cell(opt)}")
761
+ return
762
+
739
763
  if option_index is None:
740
764
  index = next(
741
765
  (i for i, opt in enumerate(options) if opt.get("recommended")), 0
@@ -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:
@@ -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
@@ -206,6 +206,78 @@ def test_source2_card_explicit_index_runs_that_option_and_never_touches_escalati
206
206
  assert state._get_drive_escalation_local("api", 55) is None
207
207
 
208
208
 
209
+ # ── --list: discovery path, executes nothing (#2375) ────────────────────────
210
+
211
+
212
+ def test_list_prints_numbered_options_and_runs_nothing_for_escalation_card(
213
+ coord_db, valid_config_path: Path, monkeypatch
214
+ ):
215
+ state._record_drive_escalation_local(
216
+ "api", 7, stage="merge", reason="stuck", gate_readings="",
217
+ proposed_command="echo hi",
218
+ )
219
+ seen: dict = {}
220
+ monkeypatch.setattr("coord.commands.drive.subprocess.run", _fake_run(seen))
221
+
222
+ result = CliRunner().invoke(
223
+ main, ["decide", "api", "7", "--list", "--config", str(valid_config_path)]
224
+ )
225
+ assert result.exit_code == 0, result.output
226
+ assert "command" not in seen
227
+ assert "0:" in result.output and "Recommended: echo hi" in result.output
228
+ assert "1:" in result.output and "Inspect: coord escalate list --repo api" in result.output
229
+ # nothing dismissed either — --list never touches state
230
+ assert state._get_drive_escalation_local("api", 7) is not None
231
+
232
+
233
+ def test_list_prints_numbered_options_for_source2_card(
234
+ coord_db, valid_config_path: Path, monkeypatch
235
+ ):
236
+ _seed_blocked_queue_row("api", 55, _TWO_OPTION_REASON)
237
+ seen: dict = {}
238
+ monkeypatch.setattr("coord.commands.drive.subprocess.run", _fake_run(seen))
239
+
240
+ result = CliRunner().invoke(
241
+ main, ["decide", "api", "55", "--list", "--config", str(valid_config_path)]
242
+ )
243
+ assert result.exit_code == 0, result.output
244
+ assert "command" not in seen
245
+ assert "coord log aid-1 --machine dellserver" in result.output
246
+ assert "echo remedy-command" in result.output
247
+
248
+
249
+ def test_list_matches_the_decisions_report_options_exactly(
250
+ coord_db, valid_config_path: Path
251
+ ):
252
+ """#2375 acceptance: `--list`'s numbered options are the same ones
253
+ `coord report run decisions` (and thus `format_option_cell`) would show
254
+ for this same card, byte-for-byte."""
255
+ _seed_blocked_queue_row("api", 55, _TWO_OPTION_REASON)
256
+
257
+ result = CliRunner().invoke(
258
+ main, ["decide", "api", "55", "--list", "--config", str(valid_config_path)]
259
+ )
260
+ assert result.exit_code == 0, result.output
261
+
262
+ from coord.reports import format_option_cell
263
+
264
+ report = run_decisions(repo="api")
265
+ card = next(r for r in report.rows if r["issue"] == 55)
266
+ for i, opt in enumerate(card["options"]):
267
+ assert f" {i}: {format_option_cell(opt)}" in result.output
268
+
269
+
270
+ def test_list_with_no_decision_on_file_is_a_clean_error(
271
+ coord_db, valid_config_path: Path
272
+ ):
273
+ result = CliRunner().invoke(
274
+ main, ["decide", "api", "7", "--list", "--config", str(valid_config_path)]
275
+ )
276
+ assert result.exit_code != 0
277
+ assert "no decision on file" in result.output
278
+ assert "Traceback" not in result.output
279
+
280
+
209
281
  def test_executed_command_is_byte_identical_to_the_decisions_report_option(
210
282
  coord_db, valid_config_path: Path, monkeypatch
211
283
  ):