code-coordinator 0.5.121__tar.gz → 0.5.124__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 (858) hide show
  1. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/code_coordinator.egg-info/SOURCES.txt +2 -0
  4. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/code_coordinator.egg-info/scm_file_list.json +2 -0
  5. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/code_coordinator.egg-info/scm_version.json +2 -2
  6. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/agent.py +11 -0
  7. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/commands/plan_followup.py +48 -17
  8. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/review.py +133 -0
  9. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/split_work.py +13 -1
  10. code_coordinator-0.5.124/tests/acceptance/ms-65/board_tabs_2282.rs +852 -0
  11. code_coordinator-0.5.124/tests/acceptance/ms-65/manifest.yml +137 -0
  12. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_cli_fix_headless_review.py +102 -0
  13. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_operational_defaults.py +26 -0
  14. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_review.py +220 -0
  15. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tui/tests/acceptance.rs +1 -0
  16. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/.claude/commands/board.md +0 -0
  17. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/.claude/commands/complete-session.md +0 -0
  18. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/.claude/commands/coordinator.md +0 -0
  19. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/.githooks/_lib.sh +0 -0
  20. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/.githooks/post-checkout +0 -0
  21. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/.githooks/post-commit +0 -0
  22. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/.githooks/post-merge +0 -0
  23. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  24. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/.github/coord-ci-acceptance.yml +0 -0
  25. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/.github/workflows/auto-release.yml +0 -0
  26. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/.github/workflows/cargo-test.yml +0 -0
  27. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/.github/workflows/publish.yml +0 -0
  28. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/.github/workflows/release-tui.yml +0 -0
  29. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/.github/workflows/test.yml +0 -0
  30. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/.gitignore +0 -0
  31. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/CLAUDE.md +0 -0
  32. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/GOAL.md +0 -0
  33. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/LICENSE +0 -0
  34. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/MANIFEST.in +0 -0
  35. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/README.md +0 -0
  36. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/code_coordinator.egg-info/dependency_links.txt +0 -0
  37. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/code_coordinator.egg-info/entry_points.txt +0 -0
  38. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/code_coordinator.egg-info/requires.txt +0 -0
  39. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/code_coordinator.egg-info/top_level.txt +0 -0
  40. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/__init__.py +0 -0
  41. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/_board_mapping.py +0 -0
  42. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/acceptance.py +0 -0
  43. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/acceptance_drivers.py +0 -0
  44. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/agent_app.py +0 -0
  45. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/agent_update.py +0 -0
  46. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/agents/opencode/.gitignore +0 -0
  47. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/agents/opencode/agents/work.md +0 -0
  48. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/agents/opencode/routing.jsonc +0 -0
  49. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/audit.py +0 -0
  50. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/auto_loop.py +0 -0
  51. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/block_log.py +0 -0
  52. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/board_bool_guard.py +0 -0
  53. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/board_service.py +0 -0
  54. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/board_wire.py +0 -0
  55. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/brain.py +0 -0
  56. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/branch_model.py +0 -0
  57. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/bug_intake.py +0 -0
  58. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/cargo_cache.py +0 -0
  59. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/ci_github.py +0 -0
  60. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/ci_store.py +0 -0
  61. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/claim.py +0 -0
  62. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/cli.py +0 -0
  63. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/client.py +0 -0
  64. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/commands/__init__.py +0 -0
  65. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/commands/_common.py +0 -0
  66. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/commands/acceptance.py +0 -0
  67. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/commands/agent_ops.py +0 -0
  68. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/commands/audit.py +0 -0
  69. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/commands/chat.py +0 -0
  70. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/commands/dispatch.py +0 -0
  71. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/commands/dispatch_workers.py +0 -0
  72. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/commands/drive.py +0 -0
  73. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/commands/drive_queue.py +0 -0
  74. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/commands/gate_a.py +0 -0
  75. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/commands/gates.py +0 -0
  76. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/commands/issues.py +0 -0
  77. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/commands/lifecycle.py +0 -0
  78. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/commands/merge.py +0 -0
  79. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/commands/milestone.py +0 -0
  80. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/commands/plans.py +0 -0
  81. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/commands/portal.py +0 -0
  82. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/commands/release.py +0 -0
  83. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/commands/repo.py +0 -0
  84. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/commands/report.py +0 -0
  85. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/commands/review.py +0 -0
  86. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/commands/scorecard.py +0 -0
  87. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/commands/sessions.py +0 -0
  88. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/commands/setup.py +0 -0
  89. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/commands/status.py +0 -0
  90. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/commands/terminal.py +0 -0
  91. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/commands/test_gate.py +0 -0
  92. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/commands/tui.py +0 -0
  93. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/comments.py +0 -0
  94. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/config.py +0 -0
  95. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/config_reload.py +0 -0
  96. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/conflict_fix.py +0 -0
  97. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dao.py +0 -0
  98. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/__init__.py +0 -0
  99. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/fixture.py +0 -0
  100. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/index.html +0 -0
  101. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/server.py +0 -0
  102. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/terminal.py +0 -0
  103. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/.gitignore +0 -0
  104. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/components.json +0 -0
  105. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/dist/assets/Gallery-BoKs3mpY.js +0 -0
  106. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
  107. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/dist/assets/Terminal-CEsP08iX.js +0 -0
  108. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/dist/assets/index-CDHPlB6k.js +0 -0
  109. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
  110. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
  111. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
  112. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
  113. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
  114. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/dist/index.html +0 -0
  115. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
  116. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/dist/sw.js +0 -0
  117. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
  118. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
  119. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
  120. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
  121. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
  122. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
  123. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
  124. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
  125. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
  126. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
  127. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/eslint.config.js +0 -0
  128. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/index.html +0 -0
  129. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
  130. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/package-lock.json +0 -0
  131. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/package.json +0 -0
  132. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
  133. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/playwright.config.ts +0 -0
  134. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/postcss.config.js +0 -0
  135. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
  136. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
  137. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
  138. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/src/App.tsx +0 -0
  139. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/src/api/client.ts +0 -0
  140. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/src/api/generated.ts +0 -0
  141. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
  142. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
  143. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
  144. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
  145. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
  146. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
  147. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
  148. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
  149. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
  150. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
  151. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
  152. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
  153. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
  154. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
  155. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
  156. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
  157. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
  158. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
  159. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
  160. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
  161. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
  162. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
  163. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
  164. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
  165. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
  166. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
  167. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
  168. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
  169. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
  170. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
  171. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
  172. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
  173. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
  174. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
  175. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/src/index.css +0 -0
  176. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
  177. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
  178. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/src/main.tsx +0 -0
  179. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
  180. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
  181. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
  182. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
  183. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
  184. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
  185. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
  186. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
  187. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
  188. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
  189. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
  190. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
  191. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
  192. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
  193. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
  194. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
  195. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
  196. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
  197. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
  198. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
  199. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
  200. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/src/test-setup.ts +0 -0
  201. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
  202. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/tailwind.config.js +0 -0
  203. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/tsconfig.json +0 -0
  204. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/tsconfig.node.json +0 -0
  205. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dashboard/webapp/vite.config.ts +0 -0
  206. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/db.py +0 -0
  207. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dead_end.py +0 -0
  208. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/deploy/README.md +0 -0
  209. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/deploy/coord-agent.service +0 -0
  210. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/deploy/coord-db-backup.service +0 -0
  211. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/deploy/coord-db-backup.sh +0 -0
  212. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/deploy/coord-db-backup.timer +0 -0
  213. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/deploy/coord-drive-queue.service +0 -0
  214. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/deploy/coord-drive-queue.timer +0 -0
  215. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/deploy/coord-notify.service +0 -0
  216. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/deploy/coord-notify.timer +0 -0
  217. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/deploy/coord-release-propagate.service +0 -0
  218. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/deploy/coord-release-propagate.timer +0 -0
  219. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/deploy/coord-release-window.service +0 -0
  220. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/deploy/coord-release-window.timer +0 -0
  221. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/deploy/coord-serve.service +0 -0
  222. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/deploy/coord-web-dist-build.service +0 -0
  223. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/deploy/coord-web-dist-build.timer +0 -0
  224. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/deploy/coord-web.service +0 -0
  225. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/deploy_manifest.py +0 -0
  226. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/deploy_units.py +0 -0
  227. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/deps.py +0 -0
  228. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/diagnose.py +0 -0
  229. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dispatch.py +0 -0
  230. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/dist_name.py +0 -0
  231. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/drive.py +0 -0
  232. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/drive_queue.py +0 -0
  233. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/drive_state.py +0 -0
  234. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/events.py +0 -0
  235. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/failure_class.py +0 -0
  236. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/filelock.py +0 -0
  237. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/fleet_config_health.py +0 -0
  238. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/freshness.py +0 -0
  239. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/gate_a.py +0 -0
  240. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/gate_b.py +0 -0
  241. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/gate_snapshot.py +0 -0
  242. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/gates.py +0 -0
  243. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/github_ops.py +0 -0
  244. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/goal.py +0 -0
  245. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/graph_health.py +0 -0
  246. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/health/__init__.py +0 -0
  247. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/health/aggregate.py +0 -0
  248. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/health/checks/__init__.py +0 -0
  249. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/health/checks/agent_install.py +0 -0
  250. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/health/checks/cargo_targets.py +0 -0
  251. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/health/checks/claude_binary.py +0 -0
  252. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/health/checks/deploy_lane_facts.py +0 -0
  253. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/health/checks/disk.py +0 -0
  254. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/health/checks/fleet_board.py +0 -0
  255. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  256. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/health/checks/fleet_phantom.py +0 -0
  257. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/health/checks/fleet_unit_drift.py +0 -0
  258. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/health/checks/graph.py +0 -0
  259. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/health/checks/graphify_cli.py +0 -0
  260. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/health/checks/index_lock.py +0 -0
  261. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/health/checks/plan_usage.py +0 -0
  262. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/health/checks/repo_state.py +0 -0
  263. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/health/checks/spawned_coord.py +0 -0
  264. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/health/checks/timer_active.py +0 -0
  265. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/health/checks/toolchain.py +0 -0
  266. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/health/checks/unit_drift.py +0 -0
  267. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/health/checks/unit_enablement.py +0 -0
  268. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/health/checks/worktrees.py +0 -0
  269. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/health/cli.py +0 -0
  270. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/health/context.py +0 -0
  271. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/health/fleet_snapshot.py +0 -0
  272. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/health/models.py +0 -0
  273. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/health/pypi.py +0 -0
  274. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/health/registry.py +0 -0
  275. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/health/render.py +0 -0
  276. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/health/units.py +0 -0
  277. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/hooks.py +0 -0
  278. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/housekeeping.py +0 -0
  279. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/interactive.py +0 -0
  280. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/issue_store.py +0 -0
  281. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/liveness_auditor.py +0 -0
  282. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/machine_pause.py +0 -0
  283. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/merge_queue.py +0 -0
  284. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/milestone_chat.py +0 -0
  285. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/milestone_dispatch.py +0 -0
  286. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/milestone_gate.py +0 -0
  287. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/milestone_order.py +0 -0
  288. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/mock_author.py +0 -0
  289. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/models.py +0 -0
  290. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/network.py +0 -0
  291. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/new_issue_chat.py +0 -0
  292. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/notifier/__init__.py +0 -0
  293. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/notifier/baseline.py +0 -0
  294. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/notifier/cli.py +0 -0
  295. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/notifier/collect.py +0 -0
  296. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/notifier/digest.py +0 -0
  297. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/notifier/models.py +0 -0
  298. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/notifier/predicate.py +0 -0
  299. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/notifier/service.py +0 -0
  300. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/notifier/store.py +0 -0
  301. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/notifier/transport.py +0 -0
  302. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/notify.py +0 -0
  303. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/openapi.py +0 -0
  304. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/overlap_fence.py +0 -0
  305. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/overlap_predict.py +0 -0
  306. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/parentage.py +0 -0
  307. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/parentage_github.py +0 -0
  308. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/pipeline.py +0 -0
  309. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/plan_parser.py +0 -0
  310. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/plans.py +0 -0
  311. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/platform_paths.py +0 -0
  312. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/portal_bridge.py +0 -0
  313. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/portal_store.py +0 -0
  314. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/portal_sync.py +0 -0
  315. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/pr_body_lint.py +0 -0
  316. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/prereqs.py +0 -0
  317. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/progress.py +0 -0
  318. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/providers/__init__.py +0 -0
  319. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/providers/base.py +0 -0
  320. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/providers/claude.py +0 -0
  321. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/providers/claude_pty.py +0 -0
  322. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/providers/opencode.py +0 -0
  323. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/queue_diagnose.py +0 -0
  324. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/reconcile.py +0 -0
  325. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/refine_chat.py +0 -0
  326. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/release_cordon.py +0 -0
  327. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/release_propagate.py +0 -0
  328. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/release_verify.py +0 -0
  329. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/release_window.py +0 -0
  330. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/repo_edit.py +0 -0
  331. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/repo_onboard.py +0 -0
  332. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/reports.py +0 -0
  333. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/revalidate.py +0 -0
  334. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/scorecard.py +0 -0
  335. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/serve_app.py +0 -0
  336. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/skills/portal-followup/SKILL.md +0 -0
  337. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/skills/update-issue/SKILL.md +0 -0
  338. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/smoke.py +0 -0
  339. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/spend_ceiling.py +0 -0
  340. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/stage_projection.py +0 -0
  341. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/state.py +0 -0
  342. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/test_author.py +0 -0
  343. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/test_chat.py +0 -0
  344. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/test_orchestrator.py +0 -0
  345. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/test_report.py +0 -0
  346. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/tui_release.py +0 -0
  347. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/usage.py +0 -0
  348. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/usage_limits.py +0 -0
  349. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/usage_rollup.py +0 -0
  350. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coord/worker_events.py +0 -0
  351. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/coordinator.example.yml +0 -0
  352. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/deploy/coord-agent.service +0 -0
  353. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/deploy/coord-db-backup.service +0 -0
  354. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/deploy/coord-db-backup.sh +0 -0
  355. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/deploy/coord-db-backup.timer +0 -0
  356. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/deploy/coord-drive-queue.service +0 -0
  357. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/deploy/coord-drive-queue.timer +0 -0
  358. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/deploy/coord-notify.service +0 -0
  359. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/deploy/coord-notify.timer +0 -0
  360. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/deploy/coord-release-propagate.service +0 -0
  361. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/deploy/coord-release-propagate.timer +0 -0
  362. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/deploy/coord-release-window.service +0 -0
  363. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/deploy/coord-release-window.timer +0 -0
  364. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/deploy/coord-serve.service +0 -0
  365. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/deploy/coord-web-dist-build.service +0 -0
  366. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/deploy/coord-web-dist-build.sh +0 -0
  367. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/deploy/coord-web-dist-build.timer +0 -0
  368. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/deploy/coord-web-rollback.sh +0 -0
  369. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/deploy/coord-web.service +0 -0
  370. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/deploy/node-shim.sh +0 -0
  371. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/docs/AGENT_OPERATIONS.md +0 -0
  372. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/docs/ARCHITECTURE.md +0 -0
  373. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/docs/ARCH_SECURITY_GATES.md +0 -0
  374. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/docs/COCKPIT.md +0 -0
  375. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/docs/CONTROL_CENTER.md +0 -0
  376. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/docs/COST_DISCIPLINE.md +0 -0
  377. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/docs/CROSS_PLATFORM.md +0 -0
  378. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/docs/CUSTOMER_PORTAL.md +0 -0
  379. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/docs/DRIVE_QUEUE.md +0 -0
  380. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/docs/EPHEMERAL_WORKERS.md +0 -0
  381. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/docs/FORGE_MIGRATION.md +0 -0
  382. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/docs/GRAPHIFY_SETUP.md +0 -0
  383. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/docs/ISSUE_GUIDANCE.md +0 -0
  384. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/docs/MAC_MINI.md +0 -0
  385. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  386. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/docs/NOTIFIER.md +0 -0
  387. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/docs/OPENCODE_VERIFICATION.md +0 -0
  388. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/docs/OPERATING_GOTCHAS.md +0 -0
  389. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/docs/ORACLE_LOOP.md +0 -0
  390. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/docs/PHONE_WEBAPP.md +0 -0
  391. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/docs/PIPELINE_V2.md +0 -0
  392. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/docs/PLATFORM_EVOLUTION.md +0 -0
  393. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/docs/SECOND_BACKEND.md +0 -0
  394. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/docs/STORE_SERVICE.md +0 -0
  395. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  396. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/docs/WEB_CONTROL_CENTER.md +0 -0
  397. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/docs/mocks/web/README.md +0 -0
  398. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/docs/mocks/web/_tokens.css +0 -0
  399. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/docs/mocks/web/issue-detail.html +0 -0
  400. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/docs/mocks/web/pipeline-narrow.html +0 -0
  401. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/docs/mocks/web/pipeline-wide.html +0 -0
  402. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/graphify-out/.gitignore +0 -0
  403. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/install-agent.sh +0 -0
  404. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/pyproject.toml +0 -0
  405. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/scripts/audit_review_verdict_overrides.py +0 -0
  406. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  407. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/scripts/azure-workers/build-worker-image.sh +0 -0
  408. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/scripts/azure-workers/coordinator-machine.py +0 -0
  409. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/scripts/azure-workers/epic-down.sh +0 -0
  410. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/scripts/azure-workers/epic-up.sh +0 -0
  411. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/scripts/azure-workers/preflight.sh +0 -0
  412. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/scripts/azure-workers/provision-worker.sh +0 -0
  413. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  414. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  415. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/scripts/azure-workers/verify-github-token.sh +0 -0
  416. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/scripts/codegen.py +0 -0
  417. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/scripts/coord-test-runner.sh +0 -0
  418. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/scripts/drive-batch.sh +0 -0
  419. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/scripts/gen_board_fixture.py +0 -0
  420. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/scripts/next_release_tag.py +0 -0
  421. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/scripts/run_tests_in_populated_home.sh +0 -0
  422. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/scripts/run_tests_without_gh.sh +0 -0
  423. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/scripts/smoke_437_interactive.py +0 -0
  424. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/scripts/verify_878_review_capture.py +0 -0
  425. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/scripts/verify_release_published.py +0 -0
  426. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/scripts/verify_release_wheel.py +0 -0
  427. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/setup.cfg +0 -0
  428. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/SMOKE_SET.md +0 -0
  429. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/__init__.py +0 -0
  430. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  431. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/acceptance/ms-33/contract.md +0 -0
  432. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/acceptance/ms-33/manifest.yml +0 -0
  433. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  434. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  435. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  436. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  437. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/acceptance/ms-37/conftest.py +0 -0
  438. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/acceptance/ms-37/contract.md +0 -0
  439. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/acceptance/ms-37/manifest.yml +0 -0
  440. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  441. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  442. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/acceptance/ms-38/contract.md +0 -0
  443. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/acceptance/ms-38/manifest.yml +0 -0
  444. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  445. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  446. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  447. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  448. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  449. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  450. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  451. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  452. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  453. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  454. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/acceptance/ms-51/contract.md +0 -0
  455. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  456. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  457. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/acceptance/ms-51/manifest.yml +0 -0
  458. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  459. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/acceptance/ms-51/tsconfig.json +0 -0
  460. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/acceptance/ms-65/contract.md +0 -0
  461. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
  462. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
  463. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
  464. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
  465. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
  466. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
  467. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
  468. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
  469. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  470. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/conftest.py +0 -0
  471. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/fixtures/board-pipeline-basic.json +0 -0
  472. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  473. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  474. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  475. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  476. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/fixtures/playwright/all_pass.json +0 -0
  477. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  478. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/fixtures/playwright/mixed_fail.json +0 -0
  479. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  480. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  481. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/fixtures/playwright/skip.json +0 -0
  482. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/fixtures/playwright/truncated.json +0 -0
  483. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  484. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  485. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  486. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  487. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  488. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  489. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  490. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  491. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_acceptance.py +0 -0
  492. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_acceptance_drivers.py +0 -0
  493. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_agent.py +0 -0
  494. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_agent_api_error.py +0 -0
  495. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_agent_app.py +0 -0
  496. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_agent_branch_base.py +0 -0
  497. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_agent_branch_capture.py +0 -0
  498. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_agent_config_free_1712.py +0 -0
  499. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_agent_deploy_units_endpoint.py +0 -0
  500. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_agent_dirty_worktree.py +0 -0
  501. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_agent_graph_self_heal.py +0 -0
  502. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_agent_health_h3.py +0 -0
  503. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_agent_idle_restart.py +0 -0
  504. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_agent_push_failure.py +0 -0
  505. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_agent_reap.py +0 -0
  506. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_agent_repos_and_pull.py +0 -0
  507. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_agent_restart_services_endpoint.py +0 -0
  508. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_agent_startup_diagnostics.py +0 -0
  509. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_agent_update.py +0 -0
  510. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_agent_update_bluegreen.py +0 -0
  511. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_agent_usage_limit.py +0 -0
  512. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_agent_zero_commit.py +0 -0
  513. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_ambient_home_isolation.py +0 -0
  514. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_approve_reject_plan.py +0 -0
  515. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_approve_usage_gate.py +0 -0
  516. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_assignment_already_recorded_daemon.py +0 -0
  517. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_audit_log.py +0 -0
  518. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_audit_outcome.py +0 -0
  519. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_audit_query.py +0 -0
  520. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_auto_loop.py +0 -0
  521. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_auto_release_publish_2035.py +0 -0
  522. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_base_checkout_restore.py +0 -0
  523. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_block_log.py +0 -0
  524. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_board_cap_762.py +0 -0
  525. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_board_fixture.py +0 -0
  526. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_board_read_path.py +0 -0
  527. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_board_service.py +0 -0
  528. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_board_state.py +0 -0
  529. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_board_wire.py +0 -0
  530. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_brain.py +0 -0
  531. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_branch_model.py +0 -0
  532. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_bug_intake.py +0 -0
  533. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_build_worker_image_env_update.py +0 -0
  534. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_cargo_cache.py +0 -0
  535. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_ci_acceptance_gate_1950.py +0 -0
  536. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_ci_parity_2091.py +0 -0
  537. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_ci_store.py +0 -0
  538. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_claim.py +0 -0
  539. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_cli_acceptance.py +0 -0
  540. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_cli_assign.py +0 -0
  541. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  542. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_cli_assign_interactive_remote.py +0 -0
  543. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_cli_assign_provider.py +0 -0
  544. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  545. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_cli_audit.py +0 -0
  546. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_cli_chat_continue.py +0 -0
  547. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_cli_diagnose_config_provenance.py +0 -0
  548. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_cli_diagnose_graph.py +0 -0
  549. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_cli_doctor.py +0 -0
  550. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_cli_doctor_config_free_1801.py +0 -0
  551. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  552. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_cli_drive.py +0 -0
  553. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_cli_drive_queue.py +0 -0
  554. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_cli_escalate.py +0 -0
  555. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_cli_gate_a.py +0 -0
  556. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_cli_install_drift.py +0 -0
  557. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_cli_install_skills.py +0 -0
  558. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_cli_issue_create_label.py +0 -0
  559. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_cli_issue_reopen.py +0 -0
  560. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_cli_merge.py +0 -0
  561. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_cli_milestone_assign.py +0 -0
  562. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_cli_milestone_capture.py +0 -0
  563. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_cli_milestone_chat_add_child.py +0 -0
  564. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_cli_milestone_dispatch.py +0 -0
  565. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_cli_milestone_gate_b.py +0 -0
  566. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_cli_milestone_gate_c.py +0 -0
  567. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_cli_milestone_order.py +0 -0
  568. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  569. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_cli_milestone_ship.py +0 -0
  570. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_cli_network.py +0 -0
  571. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_cli_new_issue_chat.py +0 -0
  572. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_cli_plans.py +0 -0
  573. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_cli_portal.py +0 -0
  574. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_cli_pull_artifact.py +0 -0
  575. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_cli_queue.py +0 -0
  576. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_cli_reattach_sessions.py +0 -0
  577. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_cli_refine_board.py +0 -0
  578. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_cli_release_preflight.py +0 -0
  579. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_cli_release_propagate.py +0 -0
  580. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_cli_release_window.py +0 -0
  581. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_cli_repo_2220.py +0 -0
  582. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_cli_scorecard.py +0 -0
  583. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_cli_set_review_findings.py +0 -0
  584. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_cli_status_advisory_terminal.py +0 -0
  585. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_cli_status_merge_queue.py +0 -0
  586. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_cli_status_provider.py +0 -0
  587. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_cli_status_review_finalizing.py +0 -0
  588. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_cli_status_test_failed_tag.py +0 -0
  589. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_cli_status_usage_limit.py +0 -0
  590. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_cli_sync_comments_873.py +0 -0
  591. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_cli_test_plan.py +0 -0
  592. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_cli_track.py +0 -0
  593. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_cli_tui_update.py +0 -0
  594. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_cli_wait.py +0 -0
  595. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_client_base_install.py +0 -0
  596. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_comments.py +0 -0
  597. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_completion_summary.py +0 -0
  598. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_config.py +0 -0
  599. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_config_acceptance.py +0 -0
  600. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_config_audit.py +0 -0
  601. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_config_pricing.py +0 -0
  602. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  603. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_config_usage_gate.py +0 -0
  604. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_conflict_fix.py +0 -0
  605. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_conflict_fix_semantic.py +0 -0
  606. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_coord_test.py +0 -0
  607. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_coord_test_runner_baseline.py +0 -0
  608. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_coord_test_runner_routing.py +0 -0
  609. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_coord_test_runner_toolchain.py +0 -0
  610. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_coord_web_sse_restart_live.py +0 -0
  611. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_coordinator_machine.py +0 -0
  612. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_cross_platform_imports.py +0 -0
  613. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_dashboard.py +0 -0
  614. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_dashboard_fixture.py +0 -0
  615. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_dashboard_terminal.py +0 -0
  616. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_dashboard_terminal_live.py +0 -0
  617. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_db.py +0 -0
  618. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_dead_end.py +0 -0
  619. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_deploy_coord_db_backup.py +0 -0
  620. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_deploy_coord_web_dist.py +0 -0
  621. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_deploy_coord_web_rollback.py +0 -0
  622. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_deploy_drive_queue_unit.py +0 -0
  623. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_deploy_manifest.py +0 -0
  624. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_deploy_units_lane.py +0 -0
  625. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_deploy_web_unit.py +0 -0
  626. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_deps.py +0 -0
  627. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_diagnose.py +0 -0
  628. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_dispatch.py +0 -0
  629. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_dispatch_target_validation.py +0 -0
  630. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_dist_name.py +0 -0
  631. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_done_housekeeping.py +0 -0
  632. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_drive.py +0 -0
  633. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_drive_queue.py +0 -0
  634. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_drive_state.py +0 -0
  635. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_drive_tmux.py +0 -0
  636. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_epic_up_capability_detection.py +0 -0
  637. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  638. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_epic_up_image_provenance.py +0 -0
  639. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_errors.py +0 -0
  640. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_events.py +0 -0
  641. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_failure_class.py +0 -0
  642. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_filelock.py +0 -0
  643. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  644. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_fix_of_force_override.py +0 -0
  645. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_fleet_config_health.py +0 -0
  646. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_fleet_health_probes.py +0 -0
  647. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_fleet_health_snapshot.py +0 -0
  648. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_freshness.py +0 -0
  649. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_gate_a.py +0 -0
  650. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_gate_b.py +0 -0
  651. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_gate_snapshot_staleness.py +0 -0
  652. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_gates.py +0 -0
  653. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  654. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_generated_types_fixture.py +0 -0
  655. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_github_ops.py +0 -0
  656. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_goal.py +0 -0
  657. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_graph_health.py +0 -0
  658. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_graph_selfheal_absent_2237.py +0 -0
  659. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_handoff.py +0 -0
  660. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_health_checks.py +0 -0
  661. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_health_cli.py +0 -0
  662. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_health_cli_graph.py +0 -0
  663. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_health_config.py +0 -0
  664. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_health_context.py +0 -0
  665. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_health_deploy_lane_facts.py +0 -0
  666. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_health_incident_regression.py +0 -0
  667. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_health_pypi.py +0 -0
  668. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_health_registry.py +0 -0
  669. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_health_timer_active.py +0 -0
  670. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_health_toolchain.py +0 -0
  671. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_health_unit_drift.py +0 -0
  672. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_health_unit_enablement.py +0 -0
  673. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_hooks.py +0 -0
  674. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_human_attended_437.py +0 -0
  675. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_init.py +0 -0
  676. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_integration.py +0 -0
  677. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_interactive_briefing_echo.py +0 -0
  678. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_interactive_prefill_state.py +0 -0
  679. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_interactive_session_relaunch.py +0 -0
  680. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_interactive_test_verdict_backstop.py +0 -0
  681. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_interactive_token_attribution.py +0 -0
  682. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_interactive_worktree.py +0 -0
  683. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_issue_store_seam.py +0 -0
  684. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_liveness_auditor.py +0 -0
  685. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_liveness_notify.py +0 -0
  686. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_machine_pause.py +0 -0
  687. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_merge_queue.py +0 -0
  688. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_merge_verify.py +0 -0
  689. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_milestone_chat.py +0 -0
  690. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_milestone_dispatch.py +0 -0
  691. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_milestone_gate.py +0 -0
  692. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_milestone_order.py +0 -0
  693. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_milestone_seam.py +0 -0
  694. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_mock_author.py +0 -0
  695. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_model_tiering.py +0 -0
  696. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_models.py +0 -0
  697. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_models_config_labels.py +0 -0
  698. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_needs_attention.py +0 -0
  699. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_network.py +0 -0
  700. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_new_issue_chat.py +0 -0
  701. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_next_release_tag.py +0 -0
  702. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_no_direct_gh_calls.py +0 -0
  703. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_node_shim.py +0 -0
  704. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_notifier_baseline.py +0 -0
  705. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_notifier_cli.py +0 -0
  706. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_notifier_collect.py +0 -0
  707. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_notifier_config.py +0 -0
  708. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_notifier_drive_seam.py +0 -0
  709. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_notifier_isolation.py +0 -0
  710. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_notifier_predicate.py +0 -0
  711. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_notifier_quiet_hours.py +0 -0
  712. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_notifier_service.py +0 -0
  713. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_notify.py +0 -0
  714. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_notify_drain.py +0 -0
  715. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_openapi.py +0 -0
  716. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_overlap_fence.py +0 -0
  717. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_overlap_predict.py +0 -0
  718. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_packaged_deploy_units.py +0 -0
  719. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_parentage.py +0 -0
  720. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_paste_landed.py +0 -0
  721. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_pipeline.py +0 -0
  722. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_plan_followup_approve_plan_command.py +0 -0
  723. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_plan_followup_pr_command.py +0 -0
  724. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_plan_followup_review_command.py +0 -0
  725. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_plan_only.py +0 -0
  726. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_plan_parser.py +0 -0
  727. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_platform_paths.py +0 -0
  728. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_portal_bridge.py +0 -0
  729. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_portal_config.py +0 -0
  730. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_portal_sync.py +0 -0
  731. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_pr_body_lint.py +0 -0
  732. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_prereqs.py +0 -0
  733. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_production_db_guard.py +0 -0
  734. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_progress.py +0 -0
  735. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_provider_seam.py +0 -0
  736. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_providers.py +0 -0
  737. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_providers_config_labels.py +0 -0
  738. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_providers_pty.py +0 -0
  739. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_quiet_hours.py +0 -0
  740. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_quiet_hours_store_2146.py +0 -0
  741. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_reap_merged_sessions.py +0 -0
  742. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_reap_stale_interactive_tick.py +0 -0
  743. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_reconcile.py +0 -0
  744. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_reconcile_branch.py +0 -0
  745. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_reconcile_completions.py +0 -0
  746. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_reconcile_merges.py +0 -0
  747. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_reconcile_no_agent_record.py +0 -0
  748. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_reconcile_usage_limit_done.py +0 -0
  749. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_refine_chat.py +0 -0
  750. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_release_cordon_2101.py +0 -0
  751. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  752. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_release_cordon_deadlock_2240.py +0 -0
  753. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_release_propagate.py +0 -0
  754. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_release_unified_1242.py +0 -0
  755. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_release_verify.py +0 -0
  756. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_release_window.py +0 -0
  757. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_remote_auto_prune.py +0 -0
  758. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_remote_interactive_reaper.py +0 -0
  759. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_repo_edit_2220.py +0 -0
  760. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_repo_graph_fleet_2237.py +0 -0
  761. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_repo_onboard_2220.py +0 -0
  762. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_report_result_push.py +0 -0
  763. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_reports.py +0 -0
  764. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_retry.py +0 -0
  765. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_retry_advisory_1606.py +0 -0
  766. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_retry_type_1636.py +0 -0
  767. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_revalidate.py +0 -0
  768. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_review_end_review_without_verdict.py +0 -0
  769. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_review_parse_failure_diagnostic.py +0 -0
  770. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_review_reaffirm.py +0 -0
  771. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_review_state.py +0 -0
  772. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_review_verdict_backstop.py +0 -0
  773. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_review_verdict_override_audit.py +0 -0
  774. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_review_verdict_relay.py +0 -0
  775. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_review_zero_commits.py +0 -0
  776. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_scoped_review_wiring.py +0 -0
  777. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_scorecard.py +0 -0
  778. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_serve.py +0 -0
  779. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_serve_app_board_trim.py +0 -0
  780. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_session.py +0 -0
  781. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_slice_issue_attribution.py +0 -0
  782. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_smoke.py +0 -0
  783. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_smoke_live_checkout_restore.py +0 -0
  784. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_smoke_workflow.py +0 -0
  785. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_spend_ceiling.py +0 -0
  786. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_spend_ceiling_coordinator.py +0 -0
  787. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_split.py +0 -0
  788. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_split_work.py +0 -0
  789. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_stage_projection.py +0 -0
  790. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_stalled_pipeline.py +0 -0
  791. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_state.py +0 -0
  792. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_state_review_findings_daemon.py +0 -0
  793. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_status_fleet_footer.py +0 -0
  794. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_stop_1567.py +0 -0
  795. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_stuck.py +0 -0
  796. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_terminal_command.py +0 -0
  797. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_test_author.py +0 -0
  798. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_test_chat.py +0 -0
  799. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_test_orchestrator.py +0 -0
  800. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_test_report.py +0 -0
  801. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_test_verdict_parsing.py +0 -0
  802. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_test_verdict_transcript_floor.py +0 -0
  803. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_thin_client_board_audit.py +0 -0
  804. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_thin_client_config_load_1080.py +0 -0
  805. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_thin_client_daemon_routing_906.py +0 -0
  806. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_tmux_host.py +0 -0
  807. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_tmux_session.py +0 -0
  808. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_transcript_floor.py +0 -0
  809. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_usage.py +0 -0
  810. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_usage_limits.py +0 -0
  811. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_usage_rollup.py +0 -0
  812. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_venv_live_install_2121.py +0 -0
  813. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_version_single_source.py +0 -0
  814. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_watch.py +0 -0
  815. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  816. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_worker_events.py +0 -0
  817. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_worker_image_pin_sync.py +0 -0
  818. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_worker_safety.py +0 -0
  819. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_worker_test_scoping.py +0 -0
  820. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_worktree.py +0 -0
  821. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  822. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tui/Cargo.lock +0 -0
  823. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tui/Cargo.toml +0 -0
  824. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tui/cargo-config-local-quadraui.toml.example +0 -0
  825. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tui/src/app/audit.rs +0 -0
  826. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tui/src/app/chat.rs +0 -0
  827. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tui/src/app/data.rs +0 -0
  828. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tui/src/app/dialogs.rs +0 -0
  829. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tui/src/app/drive.rs +0 -0
  830. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tui/src/app/drive_queue.rs +0 -0
  831. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tui/src/app/escalation.rs +0 -0
  832. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tui/src/app/events.rs +0 -0
  833. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tui/src/app/fixtures.rs +0 -0
  834. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tui/src/app/fleet_health.rs +0 -0
  835. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tui/src/app/fleet_sessions.rs +0 -0
  836. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tui/src/app/fleet_terminals.rs +0 -0
  837. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tui/src/app/format.rs +0 -0
  838. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tui/src/app/milestone_dag.rs +0 -0
  839. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tui/src/app/mod.rs +0 -0
  840. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tui/src/app/msv.rs +0 -0
  841. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tui/src/app/pipeline.rs +0 -0
  842. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tui/src/app/plans.rs +0 -0
  843. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tui/src/app/render.rs +0 -0
  844. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tui/src/app/reports.rs +0 -0
  845. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tui/src/app/sessions.rs +0 -0
  846. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tui/src/app/settings_ui.rs +0 -0
  847. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tui/src/app/sidebar.rs +0 -0
  848. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tui/src/app/terminal.rs +0 -0
  849. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tui/src/app/tests.rs +0 -0
  850. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tui/src/app/types.rs +0 -0
  851. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tui/src/app/workspace.rs +0 -0
  852. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tui/src/bin/gtk.rs +0 -0
  853. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tui/src/commands.rs +0 -0
  854. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tui/src/lib.rs +0 -0
  855. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tui/src/main.rs +0 -0
  856. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tui/src/settings.rs +0 -0
  857. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tui/tests/cli.rs +0 -0
  858. {code_coordinator-0.5.121 → code_coordinator-0.5.124}/tui/tests/fixtures/board_sample.json +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-coordinator
3
- Version: 0.5.121
3
+ Version: 0.5.124
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.121
3
+ Version: 0.5.124
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
@@ -784,7 +784,9 @@ tests/acceptance/ms-51/home-active.spec.ts
784
784
  tests/acceptance/ms-51/manifest.yml
785
785
  tests/acceptance/ms-51/tsconfig.json
786
786
  tests/acceptance/ms-51/mocks/home-active.html
787
+ tests/acceptance/ms-65/board_tabs_2282.rs
787
788
  tests/acceptance/ms-65/contract.md
789
+ tests/acceptance/ms-65/manifest.yml
788
790
  tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen
789
791
  tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen
790
792
  tests/acceptance/ms-65/mocks/board-preview-tab.screen
@@ -429,7 +429,9 @@
429
429
  "tests/acceptance/ms-51/manifest.yml",
430
430
  "tests/acceptance/ms-51/mocks/home-active.html",
431
431
  "tests/acceptance/ms-51/tsconfig.json",
432
+ "tests/acceptance/ms-65/board_tabs_2282.rs",
432
433
  "tests/acceptance/ms-65/contract.md",
434
+ "tests/acceptance/ms-65/manifest.yml",
433
435
  "tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen",
434
436
  "tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen",
435
437
  "tests/acceptance/ms-65/mocks/board-preview-tab.screen",
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "0.5.121",
2
+ "tag": "0.5.124",
3
3
  "distance": 0,
4
- "node": "gfcdd7f8f7839bc92680284bc0e829ec126748357",
4
+ "node": "g6db81a3b5b4ce09b2be4da91abbbe348a1fdebc7",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-17"
@@ -3186,6 +3186,17 @@ not apply to it.
3186
3186
  - If even the scoped run genuinely cannot finish in time, follow the \
3187
3187
  background-and-poll pattern in the ONE-SHOT section above — do not invent \
3188
3188
  a chunk-and-loop workaround.
3189
+ - #2192: check your own diff now — does it change user-visible behavior \
3190
+ AND add/modify zero test files? That exact pattern was 18.5% of this \
3191
+ repo's blocking reviews (#2132): the code was correct, but CLAUDE.md's \
3192
+ "Testing — black-box coverage is the acceptance bar" rule was skipped, so \
3193
+ the adversarial reviewer rejected it — costing a paid review leg plus a \
3194
+ fix + re-review round trip to catch something you can see for free right \
3195
+ now, in this same already-running session. If it fires, add the test \
3196
+ before declaring done. If this genuinely is a pure refactor / \
3197
+ internal-only change (CLAUDE.md's existing exemption), say so explicitly \
3198
+ in your final message instead — that already satisfies the reviewer, no \
3199
+ test required.
3189
3200
 
3190
3201
  #252: before exiting, emit a SMOKE_TESTS block telling the human what to \
3191
3202
  manually verify. You changed the code; you know what's worth poking.
@@ -787,8 +787,9 @@ def _fix_from_review(
787
787
  @click.command(
788
788
  help=(
789
789
  "Dispatch a headless same-branch fix worker.\n\n"
790
- "ASSIGNMENT_ID is either a WORK assignment whose test gate FAILED (or "
791
- "whose PR has red CI), or a REVIEW assignment whose verdict was "
790
+ "ASSIGNMENT_ID is either a WORK assignment whose test gate FAILED "
791
+ "(or whose PR has red CI, or whose oracle-loop acceptance trust "
792
+ "gate FAILED — #2344), or a REVIEW assignment whose verdict was "
792
793
  "request-changes. Either way the fix lands on the ORIGINAL branch and "
793
794
  "updates the ORIGINAL PR — no new issue-N-* branch, no orphan PR."
794
795
  )
@@ -802,12 +803,12 @@ def _fix_from_review(
802
803
  help=(
803
804
  "Override the #555 interactive-work exclusion when fixing a review of "
804
805
  "work that ran under claude-pty, or (#2051) dispatch a WORK-row fix "
805
- "when neither the test verdict nor a live CI read shows a failure "
806
- "for when the caller knows the PR is red but the check missed it "
807
- "(ci_store not configured, a transient read error). Since #2091 the "
808
- "refusal names which of those it was, so check the `note:` line "
809
- "before reaching for this. Does NOT override max_review_iterations "
810
- "or the #522 terminal-work guard."
806
+ "when neither the test verdict, a live CI read, nor the acceptance "
807
+ "trust gate shows a failure — for when the caller knows the PR is red "
808
+ "but the check missed it (ci_store not configured, a transient read "
809
+ "error). Since #2091 the refusal names which of those it was, so "
810
+ "check the `note:` line before reaching for this. Does NOT override "
811
+ "max_review_iterations or the #522 terminal-work guard."
811
812
  ),
812
813
  )
813
814
  def fix(assignment_id: str, config_path: Path, guidance: str, force: bool) -> None:
@@ -837,10 +838,27 @@ def fix(assignment_id: str, config_path: Path, guidance: str, force: bool) -> No
837
838
  # `smoke_test=NULL` and must still be fixable.
838
839
  test_failed = assignment.test_state == "failed" or assignment.smoke_test == "fail"
839
840
 
841
+ # #2344: the oracle-loop TRUST GATE (docs/ORACLE_LOOP.md, #2199) is a
842
+ # fourth door onto this command. `_decide_acceptance_gate`
843
+ # (coord/drive.py) dispatches `coord fix <work_aid>` the instant the
844
+ # gate's coordinator-run re-run of the sealed suite comes back red — the
845
+ # same shape as `_decide_test` dispatching on a failed Test verdict.
846
+ # Before this, nothing here recognized that door: a milestone whose
847
+ # trust gate failed in isolation (Test not yet run, or already passed;
848
+ # CI green) hit the #2051 "expected a failed test verdict" refusal on
849
+ # every attempt — structurally unwinnable, not a transient miss — until
850
+ # the drive-queue entry parked after burning its retry budget (ms-65 /
851
+ # #2282, observed live 2026-08-17).
852
+ acceptance_failed = assignment.acceptance_state == "failed"
853
+
840
854
  # #1622 (part 3): red CI is the third trigger. Only consulted when the
841
855
  # local test gate has NOT already failed, so the cheap in-DB path stays
842
- # zero-I/O and the existing failure story keeps priority.
843
- ci_read = CiRead() if test_failed else _read_ci(cfg, assignment)
856
+ # zero-I/O and the existing failure story keeps priority. #2344: same
857
+ # treatment for a failed trust gate — it is definitive evidence on its
858
+ # own, so skip the live CI read entirely rather than let a green CI read
859
+ # (which says nothing about the trust gate's sealed-suite re-run) shadow
860
+ # it below.
861
+ ci_read = CiRead() if (test_failed or acceptance_failed) else _read_ci(cfg, assignment)
844
862
  ci_story = ci_read.story
845
863
 
846
864
  # #2091: the stored Test verdict says PASSED while the branch's live CI
@@ -876,8 +894,9 @@ def fix(assignment_id: str, config_path: Path, guidance: str, force: bool) -> No
876
894
  err=True,
877
895
  )
878
896
 
879
- # #2051: none of the three doors (failed test verdict, red CI, or the
880
- # review-id door handled above) is open. `_read_ci` is read-only and
897
+ # #2051 (extended by #2344): none of the four doors (failed test
898
+ # verdict, red CI, a failed acceptance trust gate, or the review-id door
899
+ # handled above) is open. `_read_ci` is read-only and
881
900
  # fail-quiet (see :class:`CiRead`) — a missing story means "no CI
882
901
  # evidence of a failure", never "CI is green" — so a caller who KNOWS
883
902
  # the PR is red (ci_store not configured for this repo, a transient
@@ -886,15 +905,16 @@ def fix(assignment_id: str, config_path: Path, guidance: str, force: bool) -> No
886
905
  # that caller's release valve; it is NOT a way to skip the #555 / #522 /
887
906
  # max_review_iterations guards, which sit elsewhere.
888
907
  forced_without_evidence = False
889
- if not test_failed and ci_story is None:
908
+ if not test_failed and not acceptance_failed and ci_story is None:
890
909
  if not force:
891
910
  click.echo(
892
911
  f"error: assignment {assignment_id} test_state is "
893
912
  f"{assignment.test_state!r} / smoke_test is "
894
- f"{assignment.smoke_test!r}, expected a failed test verdict "
895
- "(or red CI on its PR, or a request-changes review id). If "
896
- "the PR is actually red and this check missed it, re-run "
897
- "with --force.",
913
+ f"{assignment.smoke_test!r} / acceptance_state is "
914
+ f"{assignment.acceptance_state!r}, expected a failed test "
915
+ "verdict (or red CI on its PR, a failed acceptance trust "
916
+ "gate, or a request-changes review id). If the PR is "
917
+ "actually red and this check missed it, re-run with --force.",
898
918
  err=True,
899
919
  )
900
920
  # #2091: say WHY there is no CI evidence. Before this, six
@@ -940,6 +960,14 @@ def fix(assignment_id: str, config_path: Path, guidance: str, force: bool) -> No
940
960
  test_output_file = COORD_DIR / "test_output" / f"{assignment_id}.txt"
941
961
  if ci_story is not None:
942
962
  test_output = ci_story
963
+ elif acceptance_failed and not test_failed:
964
+ # #2344: the trust gate's own recorded reason is the evidence for
965
+ # this door — `coord acceptance record` writes it to
966
+ # `acceptance_reason` at the same time it flips `acceptance_state`
967
+ # to "failed" (coord/state.py). Neither the CI-story nor the
968
+ # smoke/test-reason fallbacks below apply here: this door fires
969
+ # precisely when Test/CI are NOT what's red.
970
+ test_output = assignment.acceptance_reason or ""
943
971
  elif test_output_file.exists():
944
972
  test_output = test_output_file.read_text()
945
973
  elif assignment.smoke_test_reason or assignment.test_reason:
@@ -965,6 +993,9 @@ def fix(assignment_id: str, config_path: Path, guidance: str, force: bool) -> No
965
993
  "red)"
966
994
  )
967
995
  _failure_heading = "Reported failure (--force, unverified)"
996
+ elif acceptance_failed and not test_failed and ci_story is None:
997
+ _what = "a failed oracle-loop acceptance trust gate (#2199)"
998
+ _failure_heading = "Acceptance trust-gate failure"
968
999
  else:
969
1000
  _what = "red CI" if ci_story is not None else "a failed smoke test"
970
1001
  _failure_heading = "CI failure" if ci_story is not None else "Test failure"
@@ -1273,6 +1273,108 @@ def _diff_paths_outside_sealed(diff_text: str, sealed_paths: list[str]) -> list[
1273
1273
  )
1274
1274
 
1275
1275
 
1276
+ # ── #2192: free pre-review "missing test" nudge ─────────────────────────────
1277
+ #
1278
+ # #2132 classified 27 request-changes verdicts on this repo and found 5/27
1279
+ # (18.5%) were "missing required black-box test only" — the code was correct,
1280
+ # but the diff changed user-visible behavior and shipped no test, which
1281
+ # CLAUDE.md's "Testing — black-box coverage is the acceptance bar" section
1282
+ # already requires. Each one cost a full paid review leg plus a fix +
1283
+ # re-review round trip to catch a pattern a static check can see for free.
1284
+ #
1285
+ # This is intentionally a coarse, path-only heuristic — no diff semantics, no
1286
+ # ``claude -p`` call, no LLM judgment, just the same cheap file-path
1287
+ # inspection ``_diff_file_paths``/``_diff_touched_sealed_paths`` already do
1288
+ # above. It is a NUDGE, not a gate: callers only ever log it, never act on it
1289
+ # to change dispatch behavior, so a false positive costs nothing (the
1290
+ # reviewer remains the sole authority and, per CLAUDE.md, already honors a
1291
+ # PR that says it's a pure refactor / internal-only change).
1292
+ #
1293
+ # The caller (``dispatch_review``) logs the result at ``log.warning``, not
1294
+ # ``log.info`` — this repo has no ``logging.basicConfig`` anywhere outside
1295
+ # tests, so the root logger stays at the default WARNING floor with no
1296
+ # handler attached and an INFO record never reaches anyone. WARNING clears
1297
+ # that floor and reaches Python's handler-of-last-resort (stderr) with zero
1298
+ # configuration. See the comment at the call site for the empirical check.
1299
+
1300
+ _TEST_BASENAME_PREFIXES = ("test_",)
1301
+ _TEST_BASENAME_SUFFIXES = (
1302
+ "_test.py", "_test.rs",
1303
+ ".test.ts", ".test.tsx", ".spec.ts", ".spec.tsx",
1304
+ )
1305
+ _TEST_BASENAME_EXACT = ("conftest.py",)
1306
+ # Matched against the path with a leading "/" prepended, so both a
1307
+ # repo-root prefix ("tests/foo.py" -> "/tests/foo.py") and a nested
1308
+ # directory ("tui/tests/foo.rs" -> "/tui/tests/foo.rs") are caught by the
1309
+ # same substring check.
1310
+ _TEST_PATH_SEGMENTS = ("/tests/", "/test/", "/__tests__/", "/e2e/")
1311
+
1312
+ # Paths under these prefixes are internal tooling/docs, never shipped
1313
+ # product behavior — CLAUDE.md's "internal-only changes are exempt" carve-out,
1314
+ # expressed as the only thing a pure diff inspection can see: file location.
1315
+ _NON_USER_VISIBLE_PATH_PREFIXES = (
1316
+ "docs/", "scripts/", "deploy/", ".github/", ".claude/", "graphify-out/",
1317
+ )
1318
+ _USER_VISIBLE_SUFFIXES = (".py", ".rs", ".ts", ".tsx", ".js", ".jsx")
1319
+
1320
+
1321
+ def _is_test_path(path: str) -> bool:
1322
+ """Does *path* look like a test file, by name/location alone?
1323
+
1324
+ NOTE (#2192 review follow-up): ``coord/split_work.py``'s ``_is_test_file``
1325
+ answers a similarly-shaped question with a narrower, Python-only rule
1326
+ set, for chunk-splitting rather than this module's review nudge. See
1327
+ that function's docstring for why the two aren't unified yet.
1328
+ """
1329
+ lower = path.lower()
1330
+ base = lower.rsplit("/", 1)[-1]
1331
+ if base in _TEST_BASENAME_EXACT:
1332
+ return True
1333
+ if any(base.startswith(p) for p in _TEST_BASENAME_PREFIXES):
1334
+ return True
1335
+ if any(base.endswith(s) for s in _TEST_BASENAME_SUFFIXES):
1336
+ return True
1337
+ return any(seg in f"/{lower}" for seg in _TEST_PATH_SEGMENTS)
1338
+
1339
+
1340
+ def _is_user_visible_path(path: str) -> bool:
1341
+ """Does *path* look like shipped source (not test, not internal tooling)?"""
1342
+ lower = path.lower()
1343
+ if _is_test_path(lower):
1344
+ return False
1345
+ if any(lower.startswith(p) for p in _NON_USER_VISIBLE_PATH_PREFIXES):
1346
+ return False
1347
+ return any(lower.endswith(s) for s in _USER_VISIBLE_SUFFIXES)
1348
+
1349
+
1350
+ def diff_missing_test_coverage(diff_text: str | None) -> bool:
1351
+ """#2192: True when *diff_text* touches user-visible source and zero
1352
+ test files, the pattern behind 18.5% of #2132's blocking reviews.
1353
+
1354
+ Pure, free, deterministic path inspection — reuses :func:`_diff_file_paths`.
1355
+ Returns False (never flags) when the diff is empty, touches no recognized
1356
+ source file (docs-only/internal-tooling-only diffs — CLAUDE.md's
1357
+ internal-only exemption), or already includes a test-file change.
1358
+
1359
+ The CLAUDE.md exemption is honored only at the granularity a path-only
1360
+ heuristic can see: whole file *types/locations* (``docs/``, ``scripts/``,
1361
+ non-source suffixes, ...), not genuine behavior-preserving refactors of
1362
+ shipped source. A true pure refactor of a ``.py``/``.rs``/``.ts`` file
1363
+ (e.g. renaming a local variable) with no test changes still flags —
1364
+ harmless today since the caller only ever logs this, never gates on it,
1365
+ but worth knowing if a caller ever starts acting on the result: at that
1366
+ point this function would honor a narrower exemption than CLAUDE.md's
1367
+ own text, which is about intent ("pure refactor / internal-only"), not
1368
+ file location.
1369
+ """
1370
+ if not diff_text or not diff_text.strip():
1371
+ return False
1372
+ paths = _diff_file_paths(diff_text)
1373
+ if not any(_is_user_visible_path(p) for p in paths):
1374
+ return False
1375
+ return not any(_is_test_path(p) for p in paths)
1376
+
1377
+
1276
1378
  def build_review_briefing(
1277
1379
  *,
1278
1380
  pr_number: int | None,
@@ -2063,6 +2165,30 @@ def dispatch_review(
2063
2165
  fetch_body = issue_body_fetcher or _fetch_issue_body
2064
2166
  issue_body = fetch_body(repo.github, completed.issue_number)
2065
2167
 
2168
+ # #2192: free pre-review nudge (see diff_missing_test_coverage docstring).
2169
+ # Logged only, ahead of the paid reviewer dispatch below — never gates,
2170
+ # never denies, never mutates `completed`. A false positive here must
2171
+ # never cost a round trip, so nothing downstream reads this.
2172
+ #
2173
+ # Deliberately `log.warning`, not `log.info` (#2192 review follow-up):
2174
+ # this repo has zero `logging.basicConfig`/`setLevel`/`addHandler` calls
2175
+ # outside tests (see coord/interactive.py:888-898's #865 note on the same
2176
+ # trap), so the root logger sits at Python's default WARNING floor with
2177
+ # no handler attached — an `INFO` record is filtered before it reaches
2178
+ # anywhere and is a silent no-op under every real entry point (`coord
2179
+ # serve`, `coord notify`, `reconcile()`). `WARNING` clears that floor and
2180
+ # is picked up by `logging`'s handler-of-last-resort, which prints
2181
+ # straight to stderr with zero configuration — confirmed empirically:
2182
+ # `logging.getLogger("coord.review").warning(...)` in a bare subprocess
2183
+ # writes to stderr; `.info(...)` writes nothing.
2184
+ if diff_missing_test_coverage(full_diff_text):
2185
+ log.warning(
2186
+ "[review] %s: diff touches user-visible source with zero test "
2187
+ "files changed — matches #2132's 'missing test only' pattern "
2188
+ "(free static check, non-blocking; dispatching review as normal)",
2189
+ completed.assignment_id,
2190
+ )
2191
+
2066
2192
  # #1811: does the resolved review provider share the worker's model
2067
2193
  # family? ``completed.provider_name`` is the *resolved* name recorded at
2068
2194
  # work-dispatch time (spec > repo > providers.default); ``None`` means a
@@ -2834,6 +2960,13 @@ def dispatch_scoped_review(
2834
2960
  not the prior reviewer) so the scoped review stays independent of the
2835
2961
  code it's judging, mirroring :func:`dispatch_review`'s
2836
2962
  ``completed.machine_name`` contract.
2963
+
2964
+ Does NOT run the #2192 "missing test coverage" nudge that
2965
+ :func:`dispatch_review` does ahead of its dispatch — intentional, not an
2966
+ oversight: this path only fires after a conflict-fix rebase where a full
2967
+ review (nudge included) already happened against the whole PR, and the
2968
+ delta reviewed here is scoped to just the rebase's own resolution, not
2969
+ the PR's original feature diff.
2837
2970
  """
2838
2971
  if not config.reviews.enabled or not config.reviews.auto_dispatch:
2839
2972
  return None
@@ -30,7 +30,19 @@ class WorkChunk:
30
30
  # ---------------------------------------------------------------------------
31
31
 
32
32
  def _is_test_file(f: str) -> bool:
33
- """Return True if the file is a test file."""
33
+ """Return True if the file is a test file.
34
+
35
+ NOTE (#2192 review follow-up): ``coord/review.py``'s ``_is_test_path``
36
+ answers a similarly-shaped question (Rust/TS/JS suffixes, nested
37
+ ``tests/`` dirs, ``conftest.py``, ``__tests__/``/``e2e/``) but for a
38
+ different downstream consumer — that one gates a free pre-review nudge,
39
+ this one drives chunk assignment for large-diff splitting. Deliberately
40
+ NOT unified yet: broadening this classifier to match the other one would
41
+ change which files get treated as "test files" during chunk splitting,
42
+ a behavior change out of scope for #2192. Flagged per the repo's "one
43
+ question, one answer" rule (epic #2096) as worth consolidating into one
44
+ shared helper if the two questions ever turn out to be the same one.
45
+ """
34
46
  p = Path(f)
35
47
  return (
36
48
  len(p.parts) > 0 and p.parts[0] in ("tests", "test")