code-coordinator 0.5.145__tar.gz → 0.5.146__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 (867) hide show
  1. code_coordinator-0.5.146/.github/workflows/acceptance-web.yml +126 -0
  2. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/.github/workflows/test.yml +56 -82
  3. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/PKG-INFO +1 -1
  4. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/code_coordinator.egg-info/PKG-INFO +1 -1
  5. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/code_coordinator.egg-info/SOURCES.txt +1 -0
  6. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/code_coordinator.egg-info/scm_file_list.json +1 -0
  7. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/code_coordinator.egg-info/scm_version.json +2 -2
  8. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/test_author.py +39 -13
  9. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_ci_acceptance_gate_1950.py +136 -15
  10. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_test_author.py +44 -6
  11. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/.claude/commands/board.md +0 -0
  12. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/.claude/commands/complete-session.md +0 -0
  13. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/.claude/commands/coordinator.md +0 -0
  14. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/.githooks/_lib.sh +0 -0
  15. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/.githooks/post-checkout +0 -0
  16. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/.githooks/post-commit +0 -0
  17. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/.githooks/post-merge +0 -0
  18. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  19. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/.github/coord-ci-acceptance.yml +0 -0
  20. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/.github/workflows/auto-release.yml +0 -0
  21. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/.github/workflows/cargo-test.yml +0 -0
  22. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/.github/workflows/publish.yml +0 -0
  23. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/.github/workflows/release-tui.yml +0 -0
  24. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/.gitignore +0 -0
  25. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/CLAUDE.md +0 -0
  26. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/GOAL.md +0 -0
  27. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/LICENSE +0 -0
  28. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/MANIFEST.in +0 -0
  29. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/README.md +0 -0
  30. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/code_coordinator.egg-info/dependency_links.txt +0 -0
  31. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/code_coordinator.egg-info/entry_points.txt +0 -0
  32. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/code_coordinator.egg-info/requires.txt +0 -0
  33. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/code_coordinator.egg-info/top_level.txt +0 -0
  34. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/__init__.py +0 -0
  35. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/_board_mapping.py +0 -0
  36. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/acceptance.py +0 -0
  37. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/acceptance_drivers.py +0 -0
  38. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/agent.py +0 -0
  39. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/agent_app.py +0 -0
  40. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/agent_update.py +0 -0
  41. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/agents/opencode/.gitignore +0 -0
  42. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/agents/opencode/agents/work.md +0 -0
  43. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/agents/opencode/routing.jsonc +0 -0
  44. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/audit.py +0 -0
  45. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/auto_loop.py +0 -0
  46. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/block_log.py +0 -0
  47. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/board_bool_guard.py +0 -0
  48. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/board_service.py +0 -0
  49. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/board_wire.py +0 -0
  50. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/brain.py +0 -0
  51. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/branch_model.py +0 -0
  52. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/bug_intake.py +0 -0
  53. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/cargo_cache.py +0 -0
  54. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/ci_github.py +0 -0
  55. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/ci_store.py +0 -0
  56. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/claim.py +0 -0
  57. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/cli.py +0 -0
  58. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/client.py +0 -0
  59. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/commands/__init__.py +0 -0
  60. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/commands/_common.py +0 -0
  61. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/commands/acceptance.py +0 -0
  62. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/commands/agent_ops.py +0 -0
  63. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/commands/audit.py +0 -0
  64. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/commands/chat.py +0 -0
  65. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/commands/dispatch.py +0 -0
  66. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/commands/dispatch_workers.py +0 -0
  67. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/commands/drive.py +0 -0
  68. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/commands/drive_queue.py +0 -0
  69. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/commands/gate_a.py +0 -0
  70. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/commands/gates.py +0 -0
  71. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/commands/issues.py +0 -0
  72. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/commands/lifecycle.py +0 -0
  73. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/commands/merge.py +0 -0
  74. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/commands/milestone.py +0 -0
  75. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/commands/plan_followup.py +0 -0
  76. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/commands/plans.py +0 -0
  77. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/commands/portal.py +0 -0
  78. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/commands/release.py +0 -0
  79. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/commands/repo.py +0 -0
  80. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/commands/report.py +0 -0
  81. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/commands/review.py +0 -0
  82. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/commands/scorecard.py +0 -0
  83. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/commands/sessions.py +0 -0
  84. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/commands/setup.py +0 -0
  85. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/commands/status.py +0 -0
  86. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/commands/terminal.py +0 -0
  87. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/commands/test_gate.py +0 -0
  88. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/commands/tui.py +0 -0
  89. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/comments.py +0 -0
  90. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/config.py +0 -0
  91. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/config_reload.py +0 -0
  92. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/conflict_fix.py +0 -0
  93. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dao.py +0 -0
  94. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/__init__.py +0 -0
  95. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/fixture.py +0 -0
  96. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/index.html +0 -0
  97. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/server.py +0 -0
  98. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/terminal.py +0 -0
  99. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/.gitignore +0 -0
  100. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/components.json +0 -0
  101. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/dist/assets/Gallery-BoKs3mpY.js +0 -0
  102. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
  103. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/dist/assets/Terminal-CEsP08iX.js +0 -0
  104. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/dist/assets/index-CDHPlB6k.js +0 -0
  105. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
  106. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
  107. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
  108. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
  109. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
  110. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/dist/index.html +0 -0
  111. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
  112. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/dist/sw.js +0 -0
  113. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
  114. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
  115. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
  116. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
  117. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
  118. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
  119. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
  120. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
  121. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
  122. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
  123. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/eslint.config.js +0 -0
  124. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/index.html +0 -0
  125. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
  126. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/package-lock.json +0 -0
  127. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/package.json +0 -0
  128. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
  129. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/playwright.config.ts +0 -0
  130. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/postcss.config.js +0 -0
  131. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
  132. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
  133. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
  134. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/src/App.tsx +0 -0
  135. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/src/api/client.ts +0 -0
  136. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/src/api/generated.ts +0 -0
  137. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
  138. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
  139. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
  140. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
  141. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
  142. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
  143. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
  144. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
  145. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
  146. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
  147. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
  148. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
  149. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
  150. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
  151. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
  152. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
  153. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
  154. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
  155. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
  156. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
  157. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
  158. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
  159. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
  160. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
  161. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
  162. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
  163. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
  164. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
  165. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
  166. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
  167. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
  168. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
  169. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
  170. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
  171. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/src/index.css +0 -0
  172. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
  173. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
  174. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/src/main.tsx +0 -0
  175. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
  176. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
  177. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
  178. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
  179. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
  180. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
  181. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
  182. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
  183. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
  184. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
  185. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
  186. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
  187. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
  188. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
  189. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
  190. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
  191. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
  192. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
  193. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
  194. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
  195. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
  196. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/src/test-setup.ts +0 -0
  197. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
  198. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/tailwind.config.js +0 -0
  199. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/tsconfig.json +0 -0
  200. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/tsconfig.node.json +0 -0
  201. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dashboard/webapp/vite.config.ts +0 -0
  202. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/db.py +0 -0
  203. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dead_end.py +0 -0
  204. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/deploy/README.md +0 -0
  205. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/deploy/coord-agent.service +0 -0
  206. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/deploy/coord-db-backup.service +0 -0
  207. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/deploy/coord-db-backup.sh +0 -0
  208. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/deploy/coord-db-backup.timer +0 -0
  209. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/deploy/coord-drive-queue.service +0 -0
  210. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/deploy/coord-drive-queue.timer +0 -0
  211. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/deploy/coord-notify.service +0 -0
  212. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/deploy/coord-notify.timer +0 -0
  213. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/deploy/coord-release-propagate.service +0 -0
  214. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/deploy/coord-release-propagate.timer +0 -0
  215. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/deploy/coord-release-window.service +0 -0
  216. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/deploy/coord-release-window.timer +0 -0
  217. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/deploy/coord-serve.service +0 -0
  218. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/deploy/coord-web-dist-build.service +0 -0
  219. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/deploy/coord-web-dist-build.timer +0 -0
  220. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/deploy/coord-web.service +0 -0
  221. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/deploy_manifest.py +0 -0
  222. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/deploy_units.py +0 -0
  223. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/deps.py +0 -0
  224. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/diagnose.py +0 -0
  225. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dispatch.py +0 -0
  226. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/dist_name.py +0 -0
  227. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/drive.py +0 -0
  228. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/drive_queue.py +0 -0
  229. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/drive_state.py +0 -0
  230. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/events.py +0 -0
  231. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/failure_class.py +0 -0
  232. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/filelock.py +0 -0
  233. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/fleet_config_health.py +0 -0
  234. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/freshness.py +0 -0
  235. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/gate_a.py +0 -0
  236. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/gate_b.py +0 -0
  237. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/gate_snapshot.py +0 -0
  238. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/gates.py +0 -0
  239. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/github_ops.py +0 -0
  240. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/goal.py +0 -0
  241. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/graph_health.py +0 -0
  242. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/health/__init__.py +0 -0
  243. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/health/aggregate.py +0 -0
  244. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/health/checks/__init__.py +0 -0
  245. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/health/checks/agent_install.py +0 -0
  246. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/health/checks/cargo_targets.py +0 -0
  247. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/health/checks/claude_binary.py +0 -0
  248. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/health/checks/deploy_lane_facts.py +0 -0
  249. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/health/checks/disk.py +0 -0
  250. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/health/checks/fleet_board.py +0 -0
  251. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  252. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/health/checks/fleet_phantom.py +0 -0
  253. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/health/checks/fleet_unit_drift.py +0 -0
  254. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/health/checks/graph.py +0 -0
  255. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/health/checks/graphify_cli.py +0 -0
  256. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/health/checks/index_lock.py +0 -0
  257. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/health/checks/plan_usage.py +0 -0
  258. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/health/checks/repo_state.py +0 -0
  259. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/health/checks/spawned_coord.py +0 -0
  260. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/health/checks/timer_active.py +0 -0
  261. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/health/checks/toolchain.py +0 -0
  262. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/health/checks/unit_drift.py +0 -0
  263. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/health/checks/unit_enablement.py +0 -0
  264. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/health/checks/worktrees.py +0 -0
  265. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/health/cli.py +0 -0
  266. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/health/context.py +0 -0
  267. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/health/fleet_snapshot.py +0 -0
  268. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/health/models.py +0 -0
  269. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/health/pypi.py +0 -0
  270. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/health/registry.py +0 -0
  271. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/health/render.py +0 -0
  272. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/health/units.py +0 -0
  273. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/hooks.py +0 -0
  274. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/housekeeping.py +0 -0
  275. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/interactive.py +0 -0
  276. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/issue_store.py +0 -0
  277. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/liveness_auditor.py +0 -0
  278. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/machine_pause.py +0 -0
  279. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/merge_queue.py +0 -0
  280. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/milestone_chat.py +0 -0
  281. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/milestone_dispatch.py +0 -0
  282. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/milestone_gate.py +0 -0
  283. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/milestone_order.py +0 -0
  284. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/mock_author.py +0 -0
  285. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/models.py +0 -0
  286. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/network.py +0 -0
  287. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/new_issue_chat.py +0 -0
  288. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/notifier/__init__.py +0 -0
  289. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/notifier/baseline.py +0 -0
  290. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/notifier/cli.py +0 -0
  291. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/notifier/collect.py +0 -0
  292. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/notifier/digest.py +0 -0
  293. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/notifier/models.py +0 -0
  294. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/notifier/predicate.py +0 -0
  295. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/notifier/service.py +0 -0
  296. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/notifier/store.py +0 -0
  297. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/notifier/transport.py +0 -0
  298. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/notify.py +0 -0
  299. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/openapi.py +0 -0
  300. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/overlap_fence.py +0 -0
  301. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/overlap_predict.py +0 -0
  302. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/parentage.py +0 -0
  303. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/parentage_github.py +0 -0
  304. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/pipeline.py +0 -0
  305. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/plan_parser.py +0 -0
  306. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/plans.py +0 -0
  307. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/platform_paths.py +0 -0
  308. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/portal_bridge.py +0 -0
  309. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/portal_store.py +0 -0
  310. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/portal_sync.py +0 -0
  311. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/pr_body_lint.py +0 -0
  312. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/prereqs.py +0 -0
  313. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/progress.py +0 -0
  314. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/providers/__init__.py +0 -0
  315. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/providers/base.py +0 -0
  316. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/providers/claude.py +0 -0
  317. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/providers/claude_pty.py +0 -0
  318. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/providers/opencode.py +0 -0
  319. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/queue_diagnose.py +0 -0
  320. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/reconcile.py +0 -0
  321. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/reconcile_tick.py +0 -0
  322. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/refine_chat.py +0 -0
  323. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/release_cordon.py +0 -0
  324. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/release_propagate.py +0 -0
  325. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/release_verify.py +0 -0
  326. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/release_window.py +0 -0
  327. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/repo_edit.py +0 -0
  328. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/repo_onboard.py +0 -0
  329. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/reports.py +0 -0
  330. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/revalidate.py +0 -0
  331. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/review.py +0 -0
  332. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/scorecard.py +0 -0
  333. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/serve_app.py +0 -0
  334. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/skills/portal-followup/SKILL.md +0 -0
  335. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/skills/update-issue/SKILL.md +0 -0
  336. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/smoke.py +0 -0
  337. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/spend_ceiling.py +0 -0
  338. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/split_work.py +0 -0
  339. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/stage_projection.py +0 -0
  340. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/state.py +0 -0
  341. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/test_chat.py +0 -0
  342. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/test_orchestrator.py +0 -0
  343. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/test_report.py +0 -0
  344. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/tui_release.py +0 -0
  345. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/usage.py +0 -0
  346. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/usage_limits.py +0 -0
  347. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/usage_rollup.py +0 -0
  348. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coord/worker_events.py +0 -0
  349. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/coordinator.example.yml +0 -0
  350. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/deploy/coord-agent.service +0 -0
  351. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/deploy/coord-db-backup.service +0 -0
  352. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/deploy/coord-db-backup.sh +0 -0
  353. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/deploy/coord-db-backup.timer +0 -0
  354. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/deploy/coord-drive-queue.service +0 -0
  355. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/deploy/coord-drive-queue.timer +0 -0
  356. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/deploy/coord-notify.service +0 -0
  357. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/deploy/coord-notify.timer +0 -0
  358. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/deploy/coord-release-propagate.service +0 -0
  359. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/deploy/coord-release-propagate.timer +0 -0
  360. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/deploy/coord-release-window.service +0 -0
  361. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/deploy/coord-release-window.timer +0 -0
  362. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/deploy/coord-serve.service +0 -0
  363. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/deploy/coord-web-dist-build.service +0 -0
  364. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/deploy/coord-web-dist-build.sh +0 -0
  365. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/deploy/coord-web-dist-build.timer +0 -0
  366. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/deploy/coord-web-rollback.sh +0 -0
  367. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/deploy/coord-web.service +0 -0
  368. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/deploy/node-shim.sh +0 -0
  369. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/docs/AGENT_OPERATIONS.md +0 -0
  370. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/docs/ARCHITECTURE.md +0 -0
  371. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/docs/ARCH_SECURITY_GATES.md +0 -0
  372. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/docs/COCKPIT.md +0 -0
  373. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/docs/CONTROL_CENTER.md +0 -0
  374. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/docs/COST_DISCIPLINE.md +0 -0
  375. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/docs/CROSS_PLATFORM.md +0 -0
  376. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/docs/CUSTOMER_PORTAL.md +0 -0
  377. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/docs/DRIVE_QUEUE.md +0 -0
  378. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/docs/EPHEMERAL_WORKERS.md +0 -0
  379. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/docs/FORGE_MIGRATION.md +0 -0
  380. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/docs/GRAPHIFY_SETUP.md +0 -0
  381. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/docs/ISSUE_GUIDANCE.md +0 -0
  382. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/docs/MAC_MINI.md +0 -0
  383. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  384. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/docs/NOTIFIER.md +0 -0
  385. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/docs/OPENCODE_VERIFICATION.md +0 -0
  386. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/docs/OPERATING_GOTCHAS.md +0 -0
  387. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/docs/ORACLE_LOOP.md +0 -0
  388. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/docs/PHONE_WEBAPP.md +0 -0
  389. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/docs/PIPELINE_V2.md +0 -0
  390. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/docs/PLATFORM_EVOLUTION.md +0 -0
  391. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/docs/SECOND_BACKEND.md +0 -0
  392. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/docs/STORE_SERVICE.md +0 -0
  393. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  394. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/docs/WEB_CONTROL_CENTER.md +0 -0
  395. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/docs/WSL_WINDOWS_WORKER.md +0 -0
  396. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/docs/mocks/web/README.md +0 -0
  397. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/docs/mocks/web/_tokens.css +0 -0
  398. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/docs/mocks/web/issue-detail.html +0 -0
  399. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/docs/mocks/web/pipeline-narrow.html +0 -0
  400. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/docs/mocks/web/pipeline-wide.html +0 -0
  401. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/graphify-out/.gitignore +0 -0
  402. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/install-agent.sh +0 -0
  403. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/pyproject.toml +0 -0
  404. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/scripts/audit_review_verdict_overrides.py +0 -0
  405. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  406. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/scripts/azure-workers/build-worker-image.sh +0 -0
  407. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/scripts/azure-workers/coordinator-machine.py +0 -0
  408. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/scripts/azure-workers/epic-down.sh +0 -0
  409. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/scripts/azure-workers/epic-up.sh +0 -0
  410. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/scripts/azure-workers/preflight.sh +0 -0
  411. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/scripts/azure-workers/provision-worker.sh +0 -0
  412. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  413. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  414. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/scripts/azure-workers/verify-github-token.sh +0 -0
  415. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/scripts/codegen.py +0 -0
  416. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/scripts/coord-test-runner.sh +0 -0
  417. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/scripts/drive-batch.sh +0 -0
  418. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/scripts/gen_board_fixture.py +0 -0
  419. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/scripts/next_release_tag.py +0 -0
  420. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/scripts/run_tests_in_populated_home.sh +0 -0
  421. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/scripts/run_tests_without_gh.sh +0 -0
  422. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/scripts/smoke_437_interactive.py +0 -0
  423. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/scripts/verify_878_review_capture.py +0 -0
  424. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/scripts/verify_release_published.py +0 -0
  425. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/scripts/verify_release_wheel.py +0 -0
  426. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/setup.cfg +0 -0
  427. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/SMOKE_SET.md +0 -0
  428. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/__init__.py +0 -0
  429. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  430. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/acceptance/ms-33/contract.md +0 -0
  431. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/acceptance/ms-33/manifest.yml +0 -0
  432. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  433. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  434. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  435. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  436. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/acceptance/ms-37/conftest.py +0 -0
  437. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/acceptance/ms-37/contract.md +0 -0
  438. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/acceptance/ms-37/manifest.yml +0 -0
  439. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  440. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  441. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/acceptance/ms-38/contract.md +0 -0
  442. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/acceptance/ms-38/manifest.yml +0 -0
  443. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  444. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  445. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  446. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  447. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  448. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  449. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  450. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  451. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  452. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  453. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/acceptance/ms-51/contract.md +0 -0
  454. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  455. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  456. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/acceptance/ms-51/manifest.yml +0 -0
  457. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  458. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/acceptance/ms-51/tsconfig.json +0 -0
  459. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
  460. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
  461. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/acceptance/ms-65/contract.md +0 -0
  462. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/acceptance/ms-65/manifest.yml +0 -0
  463. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
  464. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
  465. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
  466. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
  467. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
  468. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
  469. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
  470. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
  471. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  472. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/conftest.py +0 -0
  473. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/fixtures/board-pipeline-basic.json +0 -0
  474. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  475. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  476. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  477. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  478. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/fixtures/playwright/all_pass.json +0 -0
  479. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  480. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/fixtures/playwright/mixed_fail.json +0 -0
  481. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  482. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  483. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/fixtures/playwright/skip.json +0 -0
  484. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/fixtures/playwright/truncated.json +0 -0
  485. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  486. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  487. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  488. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  489. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  490. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  491. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  492. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  493. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_acceptance.py +0 -0
  494. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_acceptance_drivers.py +0 -0
  495. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_agent.py +0 -0
  496. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_agent_api_error.py +0 -0
  497. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_agent_app.py +0 -0
  498. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_agent_branch_base.py +0 -0
  499. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_agent_branch_capture.py +0 -0
  500. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_agent_config_free_1712.py +0 -0
  501. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_agent_deploy_units_endpoint.py +0 -0
  502. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_agent_dirty_worktree.py +0 -0
  503. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  504. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_agent_graph_self_heal.py +0 -0
  505. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_agent_health_h3.py +0 -0
  506. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_agent_idle_restart.py +0 -0
  507. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_agent_push_failure.py +0 -0
  508. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_agent_reap.py +0 -0
  509. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_agent_repos_and_pull.py +0 -0
  510. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_agent_restart_services_endpoint.py +0 -0
  511. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_agent_startup_diagnostics.py +0 -0
  512. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_agent_update.py +0 -0
  513. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_agent_update_bluegreen.py +0 -0
  514. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_agent_usage_limit.py +0 -0
  515. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_agent_zero_commit.py +0 -0
  516. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_ambient_home_isolation.py +0 -0
  517. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_approve_reject_plan.py +0 -0
  518. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_approve_usage_gate.py +0 -0
  519. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_assignment_already_recorded_daemon.py +0 -0
  520. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_audit_log.py +0 -0
  521. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_audit_outcome.py +0 -0
  522. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_audit_query.py +0 -0
  523. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_auto_loop.py +0 -0
  524. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_auto_release_publish_2035.py +0 -0
  525. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_base_checkout_restore.py +0 -0
  526. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_block_log.py +0 -0
  527. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_board_cap_762.py +0 -0
  528. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_board_fixture.py +0 -0
  529. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_board_read_path.py +0 -0
  530. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_board_service.py +0 -0
  531. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_board_state.py +0 -0
  532. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_board_wire.py +0 -0
  533. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_brain.py +0 -0
  534. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_branch_model.py +0 -0
  535. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_bug_intake.py +0 -0
  536. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_build_worker_image_env_update.py +0 -0
  537. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_cargo_cache.py +0 -0
  538. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_ci_parity_2091.py +0 -0
  539. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_ci_store.py +0 -0
  540. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_claim.py +0 -0
  541. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_cli_acceptance.py +0 -0
  542. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_cli_assign.py +0 -0
  543. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  544. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_cli_assign_interactive_remote.py +0 -0
  545. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_cli_assign_provider.py +0 -0
  546. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  547. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_cli_audit.py +0 -0
  548. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_cli_chat_continue.py +0 -0
  549. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_cli_decide.py +0 -0
  550. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_cli_diagnose_config_provenance.py +0 -0
  551. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_cli_diagnose_graph.py +0 -0
  552. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_cli_doctor.py +0 -0
  553. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_cli_doctor_config_free_1801.py +0 -0
  554. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  555. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_cli_drive.py +0 -0
  556. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_cli_drive_queue.py +0 -0
  557. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_cli_escalate.py +0 -0
  558. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_cli_fix_headless_review.py +0 -0
  559. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_cli_gate_a.py +0 -0
  560. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_cli_install_drift.py +0 -0
  561. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_cli_install_skills.py +0 -0
  562. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_cli_issue_create_label.py +0 -0
  563. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_cli_issue_reopen.py +0 -0
  564. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_cli_merge.py +0 -0
  565. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_cli_milestone_assign.py +0 -0
  566. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_cli_milestone_capture.py +0 -0
  567. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_cli_milestone_chat_add_child.py +0 -0
  568. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_cli_milestone_dispatch.py +0 -0
  569. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_cli_milestone_gate_b.py +0 -0
  570. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_cli_milestone_gate_c.py +0 -0
  571. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_cli_milestone_order.py +0 -0
  572. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  573. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_cli_milestone_ship.py +0 -0
  574. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_cli_network.py +0 -0
  575. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_cli_new_issue_chat.py +0 -0
  576. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_cli_plans.py +0 -0
  577. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_cli_portal.py +0 -0
  578. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_cli_pull_artifact.py +0 -0
  579. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_cli_queue.py +0 -0
  580. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_cli_reattach_sessions.py +0 -0
  581. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_cli_refine_board.py +0 -0
  582. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_cli_release_preflight.py +0 -0
  583. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_cli_release_propagate.py +0 -0
  584. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_cli_release_window.py +0 -0
  585. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_cli_repo_2220.py +0 -0
  586. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_cli_scorecard.py +0 -0
  587. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_cli_set_review_findings.py +0 -0
  588. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_cli_status_advisory_terminal.py +0 -0
  589. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_cli_status_merge_queue.py +0 -0
  590. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_cli_status_provider.py +0 -0
  591. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_cli_status_review_finalizing.py +0 -0
  592. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_cli_status_test_failed_tag.py +0 -0
  593. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_cli_status_usage_limit.py +0 -0
  594. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_cli_sync_comments_873.py +0 -0
  595. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_cli_test_plan.py +0 -0
  596. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_cli_track.py +0 -0
  597. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_cli_tui_update.py +0 -0
  598. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_cli_wait.py +0 -0
  599. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_client_base_install.py +0 -0
  600. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_comments.py +0 -0
  601. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_completion_summary.py +0 -0
  602. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_config.py +0 -0
  603. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_config_acceptance.py +0 -0
  604. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_config_audit.py +0 -0
  605. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_config_pricing.py +0 -0
  606. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  607. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_config_usage_gate.py +0 -0
  608. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_conflict_fix.py +0 -0
  609. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_conflict_fix_semantic.py +0 -0
  610. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_coord_test.py +0 -0
  611. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_coord_test_runner_baseline.py +0 -0
  612. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_coord_test_runner_populated_home.py +0 -0
  613. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_coord_test_runner_routing.py +0 -0
  614. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_coord_test_runner_toolchain.py +0 -0
  615. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_coord_web_sse_restart_live.py +0 -0
  616. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_coordinator_machine.py +0 -0
  617. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_cross_platform_imports.py +0 -0
  618. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_dashboard.py +0 -0
  619. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_dashboard_fixture.py +0 -0
  620. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_dashboard_terminal.py +0 -0
  621. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_dashboard_terminal_live.py +0 -0
  622. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_db.py +0 -0
  623. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_dead_end.py +0 -0
  624. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_deploy_coord_db_backup.py +0 -0
  625. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_deploy_coord_web_dist.py +0 -0
  626. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_deploy_coord_web_rollback.py +0 -0
  627. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_deploy_drive_queue_unit.py +0 -0
  628. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_deploy_manifest.py +0 -0
  629. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_deploy_units_lane.py +0 -0
  630. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_deploy_web_unit.py +0 -0
  631. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_deps.py +0 -0
  632. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_diagnose.py +0 -0
  633. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_dispatch.py +0 -0
  634. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_dispatch_target_validation.py +0 -0
  635. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_dist_name.py +0 -0
  636. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_done_housekeeping.py +0 -0
  637. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_drive.py +0 -0
  638. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_drive_queue.py +0 -0
  639. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_drive_state.py +0 -0
  640. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_drive_tmux.py +0 -0
  641. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_epic_up_capability_detection.py +0 -0
  642. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  643. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_epic_up_image_provenance.py +0 -0
  644. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_errors.py +0 -0
  645. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_events.py +0 -0
  646. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_failure_class.py +0 -0
  647. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_filelock.py +0 -0
  648. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  649. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_fix_of_force_override.py +0 -0
  650. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_fleet_config_health.py +0 -0
  651. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_fleet_health_probes.py +0 -0
  652. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_fleet_health_snapshot.py +0 -0
  653. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_freshness.py +0 -0
  654. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_gate_a.py +0 -0
  655. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_gate_b.py +0 -0
  656. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_gate_snapshot_staleness.py +0 -0
  657. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_gates.py +0 -0
  658. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  659. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_generated_types_fixture.py +0 -0
  660. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_github_ops.py +0 -0
  661. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_goal.py +0 -0
  662. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_graph_health.py +0 -0
  663. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_graph_selfheal_absent_2237.py +0 -0
  664. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_handoff.py +0 -0
  665. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_health_checks.py +0 -0
  666. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_health_cli.py +0 -0
  667. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_health_cli_graph.py +0 -0
  668. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_health_config.py +0 -0
  669. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_health_context.py +0 -0
  670. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_health_deploy_lane_facts.py +0 -0
  671. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_health_incident_regression.py +0 -0
  672. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_health_pypi.py +0 -0
  673. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_health_registry.py +0 -0
  674. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_health_timer_active.py +0 -0
  675. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_health_toolchain.py +0 -0
  676. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_health_unit_drift.py +0 -0
  677. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_health_unit_enablement.py +0 -0
  678. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_hooks.py +0 -0
  679. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_human_attended_437.py +0 -0
  680. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_init.py +0 -0
  681. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_integration.py +0 -0
  682. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_interactive_briefing_echo.py +0 -0
  683. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_interactive_prefill_state.py +0 -0
  684. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_interactive_session_relaunch.py +0 -0
  685. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_interactive_test_verdict_backstop.py +0 -0
  686. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_interactive_token_attribution.py +0 -0
  687. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_interactive_worktree.py +0 -0
  688. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_issue_store_seam.py +0 -0
  689. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_liveness_auditor.py +0 -0
  690. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_liveness_notify.py +0 -0
  691. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_machine_pause.py +0 -0
  692. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_merge_queue.py +0 -0
  693. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_merge_verify.py +0 -0
  694. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_milestone_chat.py +0 -0
  695. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_milestone_dispatch.py +0 -0
  696. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_milestone_gate.py +0 -0
  697. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_milestone_order.py +0 -0
  698. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_milestone_seam.py +0 -0
  699. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_mock_author.py +0 -0
  700. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_model_tiering.py +0 -0
  701. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_models.py +0 -0
  702. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_models_config_labels.py +0 -0
  703. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_needs_attention.py +0 -0
  704. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_network.py +0 -0
  705. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_new_issue_chat.py +0 -0
  706. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_next_release_tag.py +0 -0
  707. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_no_direct_gh_calls.py +0 -0
  708. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_node_shim.py +0 -0
  709. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_notifier_baseline.py +0 -0
  710. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_notifier_cli.py +0 -0
  711. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_notifier_collect.py +0 -0
  712. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_notifier_config.py +0 -0
  713. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_notifier_drive_seam.py +0 -0
  714. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_notifier_isolation.py +0 -0
  715. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_notifier_predicate.py +0 -0
  716. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_notifier_quiet_hours.py +0 -0
  717. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_notifier_service.py +0 -0
  718. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_notify.py +0 -0
  719. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_notify_drain.py +0 -0
  720. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_openapi.py +0 -0
  721. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_operational_defaults.py +0 -0
  722. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_overlap_fence.py +0 -0
  723. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_overlap_predict.py +0 -0
  724. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_packaged_deploy_units.py +0 -0
  725. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_parentage.py +0 -0
  726. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_paste_landed.py +0 -0
  727. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_pipeline.py +0 -0
  728. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_plan_followup_approve_plan_command.py +0 -0
  729. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_plan_followup_pr_command.py +0 -0
  730. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_plan_followup_review_command.py +0 -0
  731. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_plan_only.py +0 -0
  732. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_plan_parser.py +0 -0
  733. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_platform_paths.py +0 -0
  734. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_portal_bridge.py +0 -0
  735. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_portal_config.py +0 -0
  736. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_portal_sync.py +0 -0
  737. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_pr_body_lint.py +0 -0
  738. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_prereqs.py +0 -0
  739. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_production_db_guard.py +0 -0
  740. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_progress.py +0 -0
  741. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_provider_seam.py +0 -0
  742. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_providers.py +0 -0
  743. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_providers_config_labels.py +0 -0
  744. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_providers_pty.py +0 -0
  745. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_quiet_hours.py +0 -0
  746. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_quiet_hours_store_2146.py +0 -0
  747. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_reap_merged_sessions.py +0 -0
  748. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_reap_stale_interactive_tick.py +0 -0
  749. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_reconcile.py +0 -0
  750. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_reconcile_branch.py +0 -0
  751. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_reconcile_completions.py +0 -0
  752. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_reconcile_merges.py +0 -0
  753. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_reconcile_no_agent_record.py +0 -0
  754. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_reconcile_tick.py +0 -0
  755. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_reconcile_usage_limit_done.py +0 -0
  756. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_refine_chat.py +0 -0
  757. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_release_cordon_2101.py +0 -0
  758. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  759. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_release_cordon_deadlock_2240.py +0 -0
  760. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_release_propagate.py +0 -0
  761. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_release_unified_1242.py +0 -0
  762. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_release_verify.py +0 -0
  763. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_release_window.py +0 -0
  764. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_remote_auto_prune.py +0 -0
  765. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_remote_interactive_reaper.py +0 -0
  766. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_repo_edit_2220.py +0 -0
  767. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_repo_graph_fleet_2237.py +0 -0
  768. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_repo_onboard_2220.py +0 -0
  769. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_report_result_push.py +0 -0
  770. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_reports.py +0 -0
  771. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_retry.py +0 -0
  772. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_retry_advisory_1606.py +0 -0
  773. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_retry_type_1636.py +0 -0
  774. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_revalidate.py +0 -0
  775. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_review.py +0 -0
  776. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_review_end_review_without_verdict.py +0 -0
  777. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_review_parse_failure_diagnostic.py +0 -0
  778. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_review_reaffirm.py +0 -0
  779. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_review_state.py +0 -0
  780. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_review_verdict_backstop.py +0 -0
  781. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_review_verdict_override_audit.py +0 -0
  782. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_review_verdict_relay.py +0 -0
  783. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_review_zero_commits.py +0 -0
  784. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_scoped_review_wiring.py +0 -0
  785. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_scorecard.py +0 -0
  786. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_serve.py +0 -0
  787. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_serve_app_board_trim.py +0 -0
  788. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_session.py +0 -0
  789. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_slice_issue_attribution.py +0 -0
  790. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_smoke.py +0 -0
  791. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_smoke_live_checkout_restore.py +0 -0
  792. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_smoke_workflow.py +0 -0
  793. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_spend_ceiling.py +0 -0
  794. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_spend_ceiling_coordinator.py +0 -0
  795. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_split.py +0 -0
  796. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_split_work.py +0 -0
  797. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_stage_projection.py +0 -0
  798. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_stalled_pipeline.py +0 -0
  799. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_state.py +0 -0
  800. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_state_review_findings_daemon.py +0 -0
  801. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_status_fleet_footer.py +0 -0
  802. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_stop_1567.py +0 -0
  803. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_stuck.py +0 -0
  804. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_terminal_command.py +0 -0
  805. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_test_chat.py +0 -0
  806. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_test_orchestrator.py +0 -0
  807. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_test_report.py +0 -0
  808. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_test_verdict_parsing.py +0 -0
  809. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_test_verdict_transcript_floor.py +0 -0
  810. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_thin_client_board_audit.py +0 -0
  811. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_thin_client_config_load_1080.py +0 -0
  812. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_thin_client_daemon_routing_906.py +0 -0
  813. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_tmux_host.py +0 -0
  814. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_tmux_session.py +0 -0
  815. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_transcript_floor.py +0 -0
  816. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_usage.py +0 -0
  817. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_usage_limits.py +0 -0
  818. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_usage_rollup.py +0 -0
  819. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_venv_live_install_2121.py +0 -0
  820. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_version_single_source.py +0 -0
  821. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_watch.py +0 -0
  822. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  823. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_worker_events.py +0 -0
  824. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_worker_image_pin_sync.py +0 -0
  825. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_worker_safety.py +0 -0
  826. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_worker_test_scoping.py +0 -0
  827. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_worktree.py +0 -0
  828. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  829. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tui/Cargo.lock +0 -0
  830. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tui/Cargo.toml +0 -0
  831. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tui/cargo-config-local-quadraui.toml.example +0 -0
  832. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tui/src/app/audit.rs +0 -0
  833. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tui/src/app/chat.rs +0 -0
  834. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tui/src/app/data.rs +0 -0
  835. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tui/src/app/dialogs.rs +0 -0
  836. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tui/src/app/doc_tabs.rs +0 -0
  837. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tui/src/app/drive.rs +0 -0
  838. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tui/src/app/drive_queue.rs +0 -0
  839. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tui/src/app/escalation.rs +0 -0
  840. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tui/src/app/events.rs +0 -0
  841. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tui/src/app/fixtures.rs +0 -0
  842. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tui/src/app/fleet_health.rs +0 -0
  843. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tui/src/app/fleet_sessions.rs +0 -0
  844. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tui/src/app/fleet_terminals.rs +0 -0
  845. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tui/src/app/format.rs +0 -0
  846. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tui/src/app/milestone_dag.rs +0 -0
  847. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tui/src/app/mod.rs +0 -0
  848. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tui/src/app/msv.rs +0 -0
  849. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tui/src/app/pipeline.rs +0 -0
  850. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tui/src/app/plans.rs +0 -0
  851. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tui/src/app/render.rs +0 -0
  852. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tui/src/app/reports.rs +0 -0
  853. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tui/src/app/sessions.rs +0 -0
  854. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tui/src/app/settings_ui.rs +0 -0
  855. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tui/src/app/sidebar.rs +0 -0
  856. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tui/src/app/terminal.rs +0 -0
  857. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tui/src/app/tests.rs +0 -0
  858. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tui/src/app/types.rs +0 -0
  859. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tui/src/app/workspace.rs +0 -0
  860. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tui/src/bin/gtk.rs +0 -0
  861. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tui/src/commands.rs +0 -0
  862. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tui/src/lib.rs +0 -0
  863. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tui/src/main.rs +0 -0
  864. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tui/src/settings.rs +0 -0
  865. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tui/tests/acceptance.rs +0 -0
  866. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tui/tests/cli.rs +0 -0
  867. {code_coordinator-0.5.145 → code_coordinator-0.5.146}/tui/tests/fixtures/board_sample.json +0 -0
@@ -0,0 +1,126 @@
1
+ name: Acceptance (web)
2
+
3
+ # #2389: split out of test.yml's `acceptance` job — it was running on EVERY
4
+ # push/PR to this repo regardless of what changed, unconditionally installing
5
+ # Node + a real Chromium (`npx playwright install chromium --with-deps`)
6
+ # before running the web-playwright (ms-51) acceptance route. A pure `tui/`
7
+ # Rust change (already covered by cargo-test.yml's own tui-tuidriver route,
8
+ # `--for-path tui/src/main.rs`, gated on its own `paths:` filter) had no
9
+ # business paying that cost on every review round — this job is genuinely
10
+ # webapp-specific (`--for-path coord/dashboard/webapp/src/App.tsx`), so it
11
+ # gets the same `paths:`-gated treatment cargo-test.yml already established
12
+ # for the Rust side. Not in the branch-protection required-checks list
13
+ # (only test (3.12)/(3.13), thin-client-strict, e2e, no-gh-on-path are), so
14
+ # this staying un-triggered on an unrelated PR is not a merge blocker.
15
+ on:
16
+ push:
17
+ branches: [main]
18
+ paths:
19
+ - 'coord/dashboard/webapp/**'
20
+ - 'tests/acceptance/**'
21
+ - '.github/coord-ci-acceptance.yml'
22
+ # Self-trigger so edits to this workflow are exercised by their own PR.
23
+ - '.github/workflows/acceptance-web.yml'
24
+ pull_request:
25
+ branches: [main]
26
+ paths:
27
+ - 'coord/dashboard/webapp/**'
28
+ - 'tests/acceptance/**'
29
+ - '.github/coord-ci-acceptance.yml'
30
+ - '.github/workflows/acceptance-web.yml'
31
+ workflow_dispatch:
32
+
33
+ jobs:
34
+ # #1950: the SEALED oracle-loop acceptance suite (tests/acceptance/ms-NN/,
35
+ # playwright.acceptance.config.ts) was run by no automatic gate anywhere —
36
+ # only `coord acceptance run/record`, invoked once while a milestone was
37
+ # being driven and never again. ms-51 went red at #1547 (the responsive
38
+ # shell removed the `<h1>coord</h1>` §1a pins) and stayed red through
39
+ # #1548/#1550/#1551/#1818 with nothing noticing. This job is the cheapest
40
+ # fix named in #1950: run the accumulated sealed suite whenever anything it
41
+ # covers changes, same shape as `e2e` (test.yml) (Python for the `coord`
42
+ # CLI on PATH — the acceptance config's `webServer` shells out to `coord
43
+ # web --fixture ... --dist dist`, see playwright.acceptance.config.ts's
44
+ # module docstring — plus Node + a real chromium).
45
+ #
46
+ # `npm run test:acceptance` with NO `{ms}` filter (unlike a single
47
+ # milestone's `-- ms-NN`) walks the whole `tests/acceptance/` tree — the
48
+ # accumulated suite across every closed milestone, i.e. exactly `coord
49
+ # acceptance run --all` (Gate C) would assemble, just invoked by CI's
50
+ # cadence instead of a milestone-close event.
51
+ #
52
+ # #2180: the `npm run test:acceptance` step now runs THROUGH `coord
53
+ # acceptance run --all --ci` (#2164) instead of calling Playwright
54
+ # directly. Same suite, same reporter under the hood — the wrapper's
55
+ # web-playwright driver shape appends `--reporter=json` and reads
56
+ # PLAYWRIGHT_JSON_OUTPUT_FILE itself (coord/acceptance_drivers.py) — but
57
+ # now a test-id listed in a manifest's `expected_red:` that fails does not
58
+ # redden this job (a sealed slice authored red before its fix exists,
59
+ # #2164's whole point), while one that unexpectedly PASSES does, loudly
60
+ # (#1965's vacuous-assertion case). Before this, ms-51 going red for any
61
+ # reason failed this job exactly the same as every other kind of red —
62
+ # there was no way to merge a red-by-design slice without `--force-merge`.
63
+ # .github/coord-ci-acceptance.yml's header explains why this points at a
64
+ # CI-local config instead of the fleet's real ~/.coord/coordinator.yml.
65
+ acceptance:
66
+ runs-on: ubuntu-latest
67
+ timeout-minutes: 20
68
+ defaults:
69
+ run:
70
+ working-directory: coord/dashboard/webapp
71
+ steps:
72
+ - uses: actions/checkout@v4
73
+ - uses: actions/setup-python@v5
74
+ with:
75
+ python-version: "3.12"
76
+ - working-directory: .
77
+ run: pip install -e ".[dev]"
78
+ - uses: actions/setup-node@v4
79
+ with:
80
+ node-version: '20'
81
+ - run: npm ci
82
+ # #2393: same fix as test.yml's `e2e` job — see that job's comment.
83
+ - name: Cache Playwright browsers
84
+ id: playwright-cache
85
+ uses: actions/cache@v4
86
+ with:
87
+ path: ~/.cache/ms-playwright
88
+ key: ${{ runner.os }}-playwright-${{ hashFiles('coord/dashboard/webapp/package-lock.json') }}
89
+ - name: Install Playwright + OS deps (cache miss)
90
+ if: steps.playwright-cache.outputs.cache-hit != 'true'
91
+ # #2393 follow-up: the Chromium download from Playwright's CDN has hung
92
+ # (not merely failed) multiple times in one day, past what caching alone
93
+ # can paper over on a cache-miss run (a version bump, or the very first
94
+ # run ever). A short per-attempt timeout + retry turns "hang for the
95
+ # whole 20-minute job budget" into "fail fast and try again" — transient
96
+ # CDN/mirror flakiness usually clears within a couple of attempts.
97
+ run: |
98
+ for attempt in 1 2 3; do
99
+ echo "Playwright install attempt $attempt/3..."
100
+ if timeout 300 npx playwright install chromium --with-deps; then
101
+ echo "Playwright install succeeded on attempt $attempt"
102
+ exit 0
103
+ fi
104
+ echo "Playwright install attempt $attempt failed or timed out after 5m"
105
+ sleep 10
106
+ done
107
+ echo "Playwright install failed after 3 attempts"
108
+ exit 1
109
+ - name: Install Playwright OS deps only (cache hit)
110
+ if: steps.playwright-cache.outputs.cache-hit == 'true'
111
+ run: npx playwright install-deps chromium
112
+ - name: coord acceptance run --all --ci (web-playwright route, ms-51)
113
+ working-directory: .
114
+ run: >-
115
+ coord acceptance run --repo claude-coordinator --all --ci
116
+ --for-path coord/dashboard/webapp/src/App.tsx
117
+ --config .github/coord-ci-acceptance.yml --path .
118
+ - name: A red result here is attributable, not a mystery
119
+ if: failure()
120
+ run: |
121
+ echo "::error::The sealed acceptance suite (tests/acceptance/ms-NN/) failed."
122
+ echo "The failing spec's path and 'describe' title name the milestone (ms-NN) and the issue that slice was authored for (see tests/acceptance/ms-NN/manifest.yml)."
123
+ echo "Two causes, and only one fix is right:"
124
+ echo " 1. The app regressed against an still-accurate contract -> fix the app."
125
+ echo " 2. Legitimate app evolution made the contract stale (e.g. #1547 vs ms-51) -> amend the contract: coord acceptance mock <repo> <tracking_issue> --amend '<what changed and why>'"
126
+ echo "Do not silence this job (continue-on-error, skip, etc.) instead of doing one of the above -- that is exactly how ms-51 rotted unnoticed through #1547-#1818 (#1950)."
@@ -252,6 +252,12 @@ jobs:
252
252
 
253
253
  e2e:
254
254
  runs-on: ubuntu-latest
255
+ # #2389: this is the SAME `npx playwright install chromium --with-deps`
256
+ # step that hung 34+ minutes on `acceptance` with no automatic recovery
257
+ # (a job with no `timeout-minutes` defaults to GitHub's 360-minute
258
+ # ceiling) — required, so it stays in this file, but gets the same
259
+ # bounded timeout rather than the implicit 6-hour one.
260
+ timeout-minutes: 20
255
261
  defaults:
256
262
  run:
257
263
  working-directory: coord/dashboard/webapp
@@ -272,90 +278,58 @@ jobs:
272
278
  with:
273
279
  node-version: '20'
274
280
  - run: npm ci
275
- - run: npx playwright install chromium --with-deps
276
- - run: npm run test:e2e
277
-
278
- # #1950: the SEALED oracle-loop acceptance suite (tests/acceptance/ms-NN/,
279
- # playwright.acceptance.config.ts) was run by no automatic gate anywhere
280
- # only `coord acceptance run/record`, invoked once while a milestone was
281
- # being driven and never again. ms-51 went red at #1547 (the responsive
282
- # shell removed the `<h1>coord</h1>` §1a pins) and stayed red through
283
- # #1548/#1550/#1551/#1818 with nothing noticing. This job is the cheapest
284
- # fix named in #1950: run the accumulated sealed suite on every push/PR,
285
- # same shape as `e2e` above (Python for the `coord` CLI on PATH — the
286
- # acceptance config's `webServer` shells out to `coord web --fixture
287
- # ... --dist dist`, see playwright.acceptance.config.ts's module
288
- # docstring — plus Node + a real chromium).
289
- #
290
- # `npm run test:acceptance` with NO `{ms}` filter (unlike a single
291
- # milestone's `-- ms-NN`) walks the whole `tests/acceptance/` tree — the
292
- # accumulated suite across every closed milestone, i.e. exactly `coord
293
- # acceptance run --all` (Gate C) would assemble, just invoked by CI's
294
- # cadence instead of a milestone-close event.
295
- #
296
- # Deliberately NOT added to scripts/coord-test-runner.sh (the Test gate's
297
- # engine, coordinator.yml's `test_command`): that script also runs as a
298
- # systemd *user* unit on the daemon host (#1814's PATH problem) and would
299
- # need node/npm/chromium provisioned there for every future
300
- # coord/dashboard/webapp/** branch's Test stage, not just this
301
- # already-`browser`-capability-gated CI runner. CI is the tighter, cheaper
302
- # loop for this suite; revisit the Test-gate route if CI's cadence turns
303
- # out not to be enough (#1950's own "decide deliberately").
304
- #
305
- # ATTRIBUTABILITY (#1950 item 2): a red result here names a spec file
306
- # under `tests/acceptance/ms-NN/` and, by that suite's own convention
307
- # (tests/acceptance/ms-51/manifest.yml), a `describe` block carrying the
308
- # milestone's tracking issue — e.g. `ms-51/home-active.spec.ts › ms-51
309
- # Home Active tab (#1544) › ...`. Playwright's `list` reporter prints that
310
- # full path/title on failure, so the ms-NN + issue are already in the
311
- # job's own output; the failure-hint step below just spells out the two
312
- # possible causes so whoever triages it doesn't have to rediscover them.
313
- #
314
- # #2180: the `npm run test:acceptance` step now runs THROUGH `coord
315
- # acceptance run --all --ci` (#2164) instead of calling Playwright
316
- # directly. Same suite, same reporter under the hood — the wrapper's
317
- # web-playwright driver shape appends `--reporter=json` and reads
318
- # PLAYWRIGHT_JSON_OUTPUT_FILE itself (coord/acceptance_drivers.py) — but
319
- # now a test-id listed in a manifest's `expected_red:` that fails does not
320
- # redden this job (a sealed slice authored red before its fix exists,
321
- # #2164's whole point), while one that unexpectedly PASSES does, loudly
322
- # (#1965's vacuous-assertion case). Before this, ms-51 going red for any
323
- # reason failed this job exactly the same as every other kind of red —
324
- # there was no way to merge a red-by-design slice without `--force-merge`.
325
- # .github/coord-ci-acceptance.yml's header explains why this points at a
326
- # CI-local config instead of the fleet's real ~/.coord/coordinator.yml.
327
- acceptance:
328
- runs-on: ubuntu-latest
329
- defaults:
330
- run:
331
- working-directory: coord/dashboard/webapp
332
- steps:
333
- - uses: actions/checkout@v4
334
- - uses: actions/setup-python@v5
281
+ # #2393: `npx playwright install chromium --with-deps` was the step
282
+ # that hung 30+ minutes with no automatic recovery (2026-08-18, this
283
+ # job and `acceptance`'s) — a fresh ~300MB Chromium download from
284
+ # Playwright's CDN on EVERY run, no caching, so every run was fully
285
+ # exposed to any network hiccup on that path. Caching the browser
286
+ # binary means most runs skip the download-heavy half entirely; only
287
+ # a cache miss (a `@playwright/test` version bump) pays the network
288
+ # cost. `install-deps` (apt-only, no download) still runs on a cache
289
+ # hit so a runner image without chromium's OS libs preinstalled
290
+ # doesn't break.
291
+ - name: Cache Playwright browsers
292
+ id: playwright-cache
293
+ uses: actions/cache@v4
335
294
  with:
336
- python-version: "3.12"
337
- - working-directory: .
338
- run: pip install -e ".[dev]"
339
- - uses: actions/setup-node@v4
340
- with:
341
- node-version: '20'
342
- - run: npm ci
343
- - run: npx playwright install chromium --with-deps
344
- - name: coord acceptance run --all --ci (web-playwright route, ms-51)
345
- working-directory: .
346
- run: >-
347
- coord acceptance run --repo claude-coordinator --all --ci
348
- --for-path coord/dashboard/webapp/src/App.tsx
349
- --config .github/coord-ci-acceptance.yml --path .
350
- - name: A red result here is attributable, not a mystery
351
- if: failure()
295
+ path: ~/.cache/ms-playwright
296
+ key: ${{ runner.os }}-playwright-${{ hashFiles('coord/dashboard/webapp/package-lock.json') }}
297
+ - name: Install Playwright + OS deps (cache miss)
298
+ if: steps.playwright-cache.outputs.cache-hit != 'true'
299
+ # #2393 follow-up: the Chromium download from Playwright's CDN has hung
300
+ # (not merely failed) multiple times in one day, past what caching alone
301
+ # can paper over on a cache-miss run (a version bump, or the very first
302
+ # run ever). A short per-attempt timeout + retry turns "hang for the
303
+ # whole 20-minute job budget" into "fail fast and try again" — transient
304
+ # CDN/mirror flakiness usually clears within a couple of attempts.
352
305
  run: |
353
- echo "::error::The sealed acceptance suite (tests/acceptance/ms-NN/) failed."
354
- echo "The failing spec's path and 'describe' title name the milestone (ms-NN) and the issue that slice was authored for (see tests/acceptance/ms-NN/manifest.yml)."
355
- echo "Two causes, and only one fix is right:"
356
- echo " 1. The app regressed against an still-accurate contract -> fix the app."
357
- echo " 2. Legitimate app evolution made the contract stale (e.g. #1547 vs ms-51) -> amend the contract: coord acceptance mock <repo> <tracking_issue> --amend '<what changed and why>'"
358
- echo "Do not silence this job (continue-on-error, skip, etc.) instead of doing one of the above -- that is exactly how ms-51 rotted unnoticed through #1547-#1818 (#1950)."
306
+ for attempt in 1 2 3; do
307
+ echo "Playwright install attempt $attempt/3..."
308
+ if timeout 300 npx playwright install chromium --with-deps; then
309
+ echo "Playwright install succeeded on attempt $attempt"
310
+ exit 0
311
+ fi
312
+ echo "Playwright install attempt $attempt failed or timed out after 5m"
313
+ sleep 10
314
+ done
315
+ echo "Playwright install failed after 3 attempts"
316
+ exit 1
317
+ - name: Install Playwright OS deps only (cache hit)
318
+ if: steps.playwright-cache.outputs.cache-hit == 'true'
319
+ run: npx playwright install-deps chromium
320
+ - run: npm run test:e2e
321
+
322
+ # #2389: the SEALED web-playwright acceptance suite (ms-51) moved to its
323
+ # own workflow, acceptance-web.yml, with a `paths:` filter scoped to
324
+ # `coord/dashboard/webapp/**`/`tests/acceptance/**` — mirroring how
325
+ # cargo-test.yml already gates the tui-tuidriver route on `tui/**`. This
326
+ # job was unconditionally installing Node + a real Chromium on every
327
+ # push/PR to this repo regardless of what changed, including pure-Rust
328
+ # `tui/` diffs that have nothing to do with the webapp (#1950's original
329
+ # "cheapest fix" traded diff-scoping for coverage-by-default; #2389
330
+ # restores diff-scoping now that the Rust side has its own equivalent
331
+ # gate). Not in this repo's required-checks list, so this move changes
332
+ # nothing about what blocks a merge.
359
333
 
360
334
  # #1550: `coord/dashboard/webapp/src/api/generated.ts` is produced by
361
335
  # `scripts/codegen.py` from the dashboard's OpenAPI spec
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-coordinator
3
- Version: 0.5.145
3
+ Version: 0.5.146
4
4
  Summary: Coordinate Claude Code workers across multiple machines and repos.
5
5
  Author-email: John Donaghy <johnfdonaghy@gmail.com>
6
6
  License-Expression: LicenseRef-FSL-1.1-MIT
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-coordinator
3
- Version: 0.5.145
3
+ Version: 0.5.146
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
@@ -16,6 +16,7 @@ pyproject.toml
16
16
  .githooks/post-merge
17
17
  .github/coord-ci-acceptance.yml
18
18
  .github/ISSUE_TEMPLATE/bug_report.md
19
+ .github/workflows/acceptance-web.yml
19
20
  .github/workflows/auto-release.yml
20
21
  .github/workflows/cargo-test.yml
21
22
  .github/workflows/publish.yml
@@ -9,6 +9,7 @@
9
9
  ".githooks/post-merge",
10
10
  ".github/ISSUE_TEMPLATE/bug_report.md",
11
11
  ".github/coord-ci-acceptance.yml",
12
+ ".github/workflows/acceptance-web.yml",
12
13
  ".github/workflows/auto-release.yml",
13
14
  ".github/workflows/cargo-test.yml",
14
15
  ".github/workflows/publish.yml",
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "0.5.145",
2
+ "tag": "0.5.146",
3
3
  "distance": 0,
4
- "node": "g2c4967683cf16fc253e1af6018babca87d6eb43a",
4
+ "node": "geabea71cd1e375065c4baa33f806f7f473662f82",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-18"
@@ -60,6 +60,13 @@ TEST_AUTHOR_DENY_COMMANDS: list[str] = [
60
60
  "Bash(gh *)",
61
61
  ]
62
62
 
63
+ # #1172 follow-up: how many versioned forks (`-v2`, `-v3`, ...) to probe
64
+ # before giving up on finding a JIT slice's next re-authoring branch. Kept
65
+ # small and finite — a real loop here means something is genuinely wrong
66
+ # (not a legitimate string of re-authoring dispatches), and #1172's own
67
+ # guard should surface that as a loud, readable error rather than spin.
68
+ MAX_REAUTHOR_BRANCH_ATTEMPTS = 20
69
+
63
70
  TEST_AUTHOR_SYSTEM_PROMPT = """\
64
71
  You are an INDEPENDENT acceptance-test author dispatched by the coordinator.
65
72
 
@@ -538,20 +545,39 @@ def dispatch_test_author(
538
545
  branch = target_branch or f"issue-{tracking_issue}-{_slugify(assignment_title)}"
539
546
 
540
547
  if github_ops.pr_is_merged(repo_cfg.github, branch):
541
- raise RuntimeError(
542
- f"branch {branch!r} already has a merged PR dispatching would "
543
- "push new commits onto a dead branch with nothing left to open "
544
- "a PR against them (#1172). "
545
- + (
546
- f"Issue #{issue_number}'s JIT slice already landed; if it "
547
- "needs more tests, this needs a fresh branch (not "
548
- "auto-forked yet) do not retry as-is."
549
- if issue_number is not None else
550
- "The milestone's Gate-A suite PR already merged; if the "
551
- "suite needs more work, open a fresh branch by hand — do "
552
- "not retry as-is."
548
+ if issue_number is not None:
549
+ # #1172's own stated fix scope was "refuse (or fork a fresh
550
+ # branch)" only the refuse half shipped. This is the other
551
+ # half: a genuine re-authoring dispatch (e.g. a Gate-A contract
552
+ # `--amend`, docs/ORACLE_LOOP.md's "amend the contract -> the
553
+ # test-author updates the affected slice") has nowhere else to
554
+ # push once the slice's own PR has merged, so fork onto the next
555
+ # unmerged versioned branch instead of failing outright.
556
+ base_branch = branch
557
+ for suffix in range(2, MAX_REAUTHOR_BRANCH_ATTEMPTS + 1):
558
+ candidate = f"{base_branch}-v{suffix}"
559
+ if not github_ops.pr_is_merged(repo_cfg.github, candidate):
560
+ branch = candidate
561
+ target_branch = candidate
562
+ break
563
+ else:
564
+ raise RuntimeError(
565
+ f"branch {base_branch!r} and its next "
566
+ f"{MAX_REAUTHOR_BRANCH_ATTEMPTS - 1} versioned forks "
567
+ "(-v2..-v"
568
+ f"{MAX_REAUTHOR_BRANCH_ATTEMPTS}) all already have "
569
+ "merged PRs (#1172) — that many re-authoring rounds on "
570
+ "one slice is not a normal amend/re-sync cycle; open a "
571
+ "fresh branch by hand and investigate."
572
+ )
573
+ else:
574
+ raise RuntimeError(
575
+ f"branch {branch!r} already has a merged PR — dispatching "
576
+ "would push new commits onto a dead branch with nothing "
577
+ "left to open a PR against them (#1172). The milestone's "
578
+ "Gate-A suite PR already merged; if the suite needs more "
579
+ "work, open a fresh branch by hand — do not retry as-is."
553
580
  )
554
- )
555
581
 
556
582
  deny_commands = test_author_deny_commands(config, repo_name)
557
583
 
@@ -5,8 +5,9 @@ milestone is actively being driven, so a slice that goes red after its
5
5
  milestone closes (ms-51 at #1547, silently, through #1548/#1550/#1551/#1818)
6
6
  is never re-checked.
7
7
 
8
- This is the regression guard for the fix: `.github/workflows/test.yml` gets
9
- an `acceptance` job that runs the sealed suite on every push/PR (see that
8
+ This is the regression guard for the fix: `.github/workflows/acceptance-
9
+ web.yml` (originally an `acceptance` job inside `test.yml` see #2389
10
+ below) runs the sealed suite whenever anything it covers changes (see that
10
11
  job's own header comment for why CI rather than
11
12
  scripts/coord-test-runner.sh). Parsing the real workflow file — not a
12
13
  fixture — means this test fails the moment someone removes/disables/
@@ -24,6 +25,15 @@ wrapper invocation; a second test (`test_acceptance_job_uses_the_2164_ci_
24
25
  wrapper_not_the_raw_driver`) pins the specific `--all --ci` contract #2180's
25
26
  own acceptance criteria require ("through coord acceptance run --all --ci,
26
27
  not the raw driver command").
28
+
29
+ #2389 update: the `acceptance` job moved out of `test.yml` into its own
30
+ `acceptance-web.yml`, `paths:`-gated to `coord/dashboard/webapp/**` /
31
+ `tests/acceptance/**` — it was unconditionally installing Node + a real
32
+ Chromium on every push/PR regardless of what changed, including pure-Rust
33
+ `tui/` diffs, mirroring the `paths:` gating `cargo-test.yml` already has for
34
+ the tui-tuidriver route. `ACCEPTANCE_WORKFLOW_PATH` (not `WORKFLOW_PATH`) is
35
+ what every acceptance-job test below now parses; `WORKFLOW_PATH` (`test.yml`)
36
+ still backs the `test`/`e2e` job assertions, which did not move.
27
37
  """
28
38
 
29
39
  from __future__ import annotations
@@ -34,23 +44,24 @@ import yaml
34
44
 
35
45
  REPO_ROOT = Path(__file__).resolve().parents[1]
36
46
  WORKFLOW_PATH = REPO_ROOT / ".github" / "workflows" / "test.yml"
47
+ ACCEPTANCE_WORKFLOW_PATH = REPO_ROOT / ".github" / "workflows" / "acceptance-web.yml"
37
48
  CARGO_WORKFLOW_PATH = REPO_ROOT / ".github" / "workflows" / "cargo-test.yml"
38
49
  CI_ACCEPTANCE_CONFIG_PATH = REPO_ROOT / ".github" / "coord-ci-acceptance.yml"
39
50
 
40
51
 
41
- def _load_workflow() -> dict:
52
+ def _load_workflow(path: Path = WORKFLOW_PATH) -> dict:
42
53
  # YAML's `on:` key parses to the boolean `True` under the default
43
54
  # SafeLoader (YAML 1.1 treats the bare word `on` as a boolean) — harmless
44
55
  # here since this test never reads that key, but noted so a future
45
56
  # reader isn't surprised the loaded dict's key isn't the string "on".
46
- return yaml.safe_load(WORKFLOW_PATH.read_text())
57
+ return yaml.safe_load(path.read_text())
47
58
 
48
59
 
49
- def _job_steps(workflow: dict, job_name: str) -> list[dict]:
60
+ def _job_steps(workflow: dict, job_name: str, path: Path = WORKFLOW_PATH) -> list[dict]:
50
61
  jobs = workflow.get("jobs") or {}
51
62
  job = jobs.get(job_name)
52
63
  assert job is not None, (
53
- f"expected a {job_name!r} job in {WORKFLOW_PATH} — jobs present: "
64
+ f"expected a {job_name!r} job in {path} — jobs present: "
54
65
  f"{sorted(jobs)}"
55
66
  )
56
67
  return job.get("steps") or []
@@ -65,8 +76,8 @@ def _step_runs(steps: list[dict], needle: str) -> dict | None:
65
76
 
66
77
 
67
78
  def test_acceptance_job_exists_and_runs_the_sealed_suite() -> None:
68
- workflow = _load_workflow()
69
- steps = _job_steps(workflow, "acceptance")
79
+ workflow = _load_workflow(ACCEPTANCE_WORKFLOW_PATH)
80
+ steps = _job_steps(workflow, "acceptance", ACCEPTANCE_WORKFLOW_PATH)
70
81
  test_step = _step_runs(steps, "coord acceptance run")
71
82
  assert test_step is not None, (
72
83
  "no step in the 'acceptance' job runs `coord acceptance run` — "
@@ -82,7 +93,7 @@ def test_acceptance_job_does_not_neuter_a_red_result() -> None:
82
93
  step (or the whole job) — the same "green screenshot" failure mode
83
94
  #1950 describes, just relocated from "never runs" to "runs but can't
84
95
  fail"."""
85
- workflow = _load_workflow()
96
+ workflow = _load_workflow(ACCEPTANCE_WORKFLOW_PATH)
86
97
  jobs = workflow.get("jobs") or {}
87
98
  job = jobs.get("acceptance")
88
99
  assert job is not None
@@ -107,8 +118,8 @@ def test_acceptance_job_uses_the_2164_ci_wrapper_not_the_raw_driver() -> None:
107
118
  registry — a sealed slice authored red by design would fail this job
108
119
  exactly like any other red result, forcing `--force-merge` (#2164's
109
120
  whole reason for existing)."""
110
- workflow = _load_workflow()
111
- steps = _job_steps(workflow, "acceptance")
121
+ workflow = _load_workflow(ACCEPTANCE_WORKFLOW_PATH)
122
+ steps = _job_steps(workflow, "acceptance", ACCEPTANCE_WORKFLOW_PATH)
112
123
  test_step = _step_runs(steps, "coord acceptance run")
113
124
  assert test_step is not None
114
125
  run = test_step["run"]
@@ -213,8 +224,8 @@ def test_acceptance_job_installs_coord_cli_on_path() -> None:
213
224
  timeout instead of a real (or real-absence-of) assertion failure. Same
214
225
  requirement `e2e` already has for `live-update-fixture.spec.ts`
215
226
  (#1551)."""
216
- workflow = _load_workflow()
217
- steps = _job_steps(workflow, "acceptance")
227
+ workflow = _load_workflow(ACCEPTANCE_WORKFLOW_PATH)
228
+ steps = _job_steps(workflow, "acceptance", ACCEPTANCE_WORKFLOW_PATH)
218
229
  install_step = _step_runs(steps, "pip install")
219
230
  assert install_step is not None, (
220
231
  "the 'acceptance' job never installs the `coord` CLI (`pip install "
@@ -224,11 +235,121 @@ def test_acceptance_job_installs_coord_cli_on_path() -> None:
224
235
 
225
236
 
226
237
  def test_acceptance_job_installs_a_real_browser() -> None:
227
- workflow = _load_workflow()
228
- steps = _job_steps(workflow, "acceptance")
238
+ workflow = _load_workflow(ACCEPTANCE_WORKFLOW_PATH)
239
+ steps = _job_steps(workflow, "acceptance", ACCEPTANCE_WORKFLOW_PATH)
229
240
  browser_step = _step_runs(steps, "playwright install")
230
241
  assert browser_step is not None, (
231
242
  "the 'acceptance' job never runs `npx playwright install` — "
232
243
  "chromium (or whichever project(s) playwright.acceptance.config.ts "
233
244
  "declares) won't be present to actually run the suite"
234
245
  )
246
+
247
+
248
+ def test_acceptance_workflow_is_paths_gated_to_webapp_changes() -> None:
249
+ """#2389: this job used to live in `test.yml` with no `paths:` filter at
250
+ all, so it ran unconditionally on every push/PR — including a pure-Rust
251
+ `tui/` diff with nothing to do with the webapp — always installing
252
+ Node + a real Chromium first. Mirrors `cargo-test.yml`'s own `paths:`
253
+ gate for the tui-tuidriver route."""
254
+ workflow = _load_workflow(ACCEPTANCE_WORKFLOW_PATH)
255
+ # YAML 1.1's bareword parsing turns the `on:` key into the boolean
256
+ # `True`, not the string "on" — see `_load_workflow`'s docstring.
257
+ on = workflow.get(True) or workflow.get("on") or {}
258
+ for trigger in ("push", "pull_request"):
259
+ paths = (on.get(trigger) or {}).get("paths") or []
260
+ assert "coord/dashboard/webapp/**" in paths, (
261
+ f"acceptance-web.yml's {trigger!r} trigger isn't paths-gated to "
262
+ f"coord/dashboard/webapp/**: {paths!r}"
263
+ )
264
+
265
+
266
+ def test_acceptance_job_caches_playwright_browsers() -> None:
267
+ """#2393: neither `acceptance` nor `e2e` cached the Playwright browser
268
+ binary, so every single CI run re-downloaded ~300MB of Chromium from
269
+ Playwright's CDN from scratch — full exposure to any network hiccup on
270
+ that path, every time, not just occasionally. Confirmed live
271
+ 2026-08-18: this hung 3 separate PRs' worth of runs in one afternoon.
272
+ A cache hit skips the download-heavy `install --with-deps` entirely in
273
+ favor of the apt-only `install-deps`."""
274
+ workflow = _load_workflow(ACCEPTANCE_WORKFLOW_PATH)
275
+ steps = _job_steps(workflow, "acceptance", ACCEPTANCE_WORKFLOW_PATH)
276
+ cache_step = next(
277
+ (s for s in steps if (s.get("uses") or "").startswith("actions/cache")),
278
+ None,
279
+ )
280
+ assert cache_step is not None, (
281
+ "the 'acceptance' job has no actions/cache step for Playwright's "
282
+ "browser binaries — every run re-downloads Chromium from scratch"
283
+ )
284
+ assert cache_step.get("with", {}).get("path") == "~/.cache/ms-playwright", (
285
+ f"cache step doesn't target Playwright's browser cache dir: "
286
+ f"{cache_step.get('with')!r}"
287
+ )
288
+ # The full (network-heavy) install must be conditioned on a cache MISS —
289
+ # otherwise the cache exists but is never actually consulted.
290
+ install_step = _step_runs(steps, "playwright install chromium --with-deps")
291
+ assert install_step is not None
292
+ assert "cache-hit != 'true'" in (install_step.get("if") or ""), (
293
+ "the full `playwright install --with-deps` step isn't gated on a "
294
+ f"cache miss, so the cache added above is never actually used: "
295
+ f"{install_step.get('if')!r}"
296
+ )
297
+
298
+
299
+ def test_acceptance_job_retries_playwright_install_on_transient_hangs() -> None:
300
+ """#2393 follow-up, confirmed live 2026-08-18: caching alone doesn't help
301
+ a cache-miss run (the very first run on a branch, or any run after a
302
+ `@playwright/test` version bump) — and PR #2392's own first CI run hit
303
+ exactly that, hanging the full 20-minute job budget on one install
304
+ attempt with nothing to fall back on. The install must instead be
305
+ wrapped in a bounded per-attempt timeout with more than one attempt, so
306
+ a transient CDN/mirror hang fails fast and gets retried instead of
307
+ burning the whole job timeout on a single stuck attempt."""
308
+ workflow = _load_workflow(ACCEPTANCE_WORKFLOW_PATH)
309
+ steps = _job_steps(workflow, "acceptance", ACCEPTANCE_WORKFLOW_PATH)
310
+ install_step = _step_runs(steps, "playwright install chromium --with-deps")
311
+ assert install_step is not None
312
+ run = install_step["run"]
313
+ assert "timeout " in run, (
314
+ f"the cache-miss install step has no per-attempt timeout, so one "
315
+ f"stuck attempt can still consume the entire job budget: {run!r}"
316
+ )
317
+ assert "for attempt in" in run and "1 2 3" in run, (
318
+ f"the cache-miss install step doesn't actually loop over multiple "
319
+ f"attempts — a single attempt is exactly what hung 4 separate times "
320
+ f"on 2026-08-18: {run!r}"
321
+ )
322
+
323
+
324
+ def test_e2e_job_retries_playwright_install_on_transient_hangs() -> None:
325
+ """Same fix, same reason, as the 'acceptance' job's version above — the
326
+ `e2e` job (test.yml) hit the identical hang on 2026-08-18 and got the
327
+ identical caching fix in #2393, so it needs the identical retry
328
+ follow-up too."""
329
+ workflow = _load_workflow()
330
+ steps = _job_steps(workflow, "e2e")
331
+ install_step = _step_runs(steps, "playwright install chromium --with-deps")
332
+ assert install_step is not None
333
+ run = install_step["run"]
334
+ assert "timeout " in run, (
335
+ f"e2e's cache-miss install step has no per-attempt timeout: {run!r}"
336
+ )
337
+ assert "for attempt in" in run and "1 2 3" in run, (
338
+ f"e2e's cache-miss install step doesn't loop over multiple attempts: {run!r}"
339
+ )
340
+
341
+
342
+ def test_acceptance_job_has_a_bounded_timeout() -> None:
343
+ """#2389: a job with no `timeout-minutes` defaults to GitHub's 360-minute
344
+ ceiling — confirmed live 2026-08-18, `npx playwright install chromium`
345
+ hung 34+ minutes with no automatic recovery. A bounded timeout doesn't
346
+ prevent a hang, but it guarantees one can't silently occupy a runner (and
347
+ keep a PR looking "still checking") for hours."""
348
+ workflow = _load_workflow(ACCEPTANCE_WORKFLOW_PATH)
349
+ jobs = workflow.get("jobs") or {}
350
+ job = jobs.get("acceptance") or {}
351
+ timeout = job.get("timeout-minutes")
352
+ assert isinstance(timeout, int) and 0 < timeout <= 60, (
353
+ f"'acceptance' job's timeout-minutes is {timeout!r} — expected a "
354
+ "small positive bound, not GitHub's implicit 360-minute default"
355
+ )