code-coordinator 0.5.72__tar.gz → 0.5.74__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 (824) hide show
  1. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/CLAUDE.md +2 -0
  2. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/PKG-INFO +1 -1
  3. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/code_coordinator.egg-info/PKG-INFO +1 -1
  4. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/code_coordinator.egg-info/SOURCES.txt +7 -0
  5. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/code_coordinator.egg-info/scm_file_list.json +7 -0
  6. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/code_coordinator.egg-info/scm_version.json +2 -2
  7. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/cli.py +5 -0
  8. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/commands/dispatch.py +98 -0
  9. code_coordinator-0.5.74/coord/commands/repo.py +368 -0
  10. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/commands/status.py +103 -0
  11. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/github_ops.py +82 -0
  12. code_coordinator-0.5.74/coord/repo_edit.py +211 -0
  13. code_coordinator-0.5.74/coord/repo_onboard.py +999 -0
  14. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/docs/AGENT_OPERATIONS.md +63 -0
  15. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/conftest.py +18 -0
  16. code_coordinator-0.5.74/tests/test_cli_assign_repo_drift_2219.py +240 -0
  17. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_doctor_config_mismatch_1712.py +100 -0
  18. code_coordinator-0.5.74/tests/test_cli_repo_2220.py +468 -0
  19. code_coordinator-0.5.74/tests/test_repo_edit_2220.py +225 -0
  20. code_coordinator-0.5.74/tests/test_repo_onboard_2220.py +520 -0
  21. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/.claude/commands/board.md +0 -0
  22. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/.claude/commands/complete-session.md +0 -0
  23. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/.claude/commands/coordinator.md +0 -0
  24. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/.githooks/_lib.sh +0 -0
  25. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/.githooks/post-checkout +0 -0
  26. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/.githooks/post-commit +0 -0
  27. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/.githooks/post-merge +0 -0
  28. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  29. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/.github/coord-ci-acceptance.yml +0 -0
  30. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/.github/workflows/auto-release.yml +0 -0
  31. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/.github/workflows/cargo-test.yml +0 -0
  32. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/.github/workflows/publish.yml +0 -0
  33. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/.github/workflows/release-tui.yml +0 -0
  34. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/.github/workflows/test.yml +0 -0
  35. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/.gitignore +0 -0
  36. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/GOAL.md +0 -0
  37. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/LICENSE +0 -0
  38. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/MANIFEST.in +0 -0
  39. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/README.md +0 -0
  40. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/code_coordinator.egg-info/dependency_links.txt +0 -0
  41. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/code_coordinator.egg-info/entry_points.txt +0 -0
  42. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/code_coordinator.egg-info/requires.txt +0 -0
  43. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/code_coordinator.egg-info/top_level.txt +0 -0
  44. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/__init__.py +0 -0
  45. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/_board_mapping.py +0 -0
  46. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/acceptance.py +0 -0
  47. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/acceptance_drivers.py +0 -0
  48. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/agent.py +0 -0
  49. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/agent_app.py +0 -0
  50. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/agent_update.py +0 -0
  51. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/agents/opencode/.gitignore +0 -0
  52. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/agents/opencode/agents/work.md +0 -0
  53. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/agents/opencode/routing.jsonc +0 -0
  54. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/audit.py +0 -0
  55. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/auto_loop.py +0 -0
  56. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/board_bool_guard.py +0 -0
  57. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/board_service.py +0 -0
  58. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/board_wire.py +0 -0
  59. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/brain.py +0 -0
  60. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/branch_model.py +0 -0
  61. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/bug_intake.py +0 -0
  62. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/cargo_cache.py +0 -0
  63. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/ci_github.py +0 -0
  64. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/ci_store.py +0 -0
  65. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/claim.py +0 -0
  66. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/client.py +0 -0
  67. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/commands/__init__.py +0 -0
  68. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/commands/_common.py +0 -0
  69. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/commands/acceptance.py +0 -0
  70. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/commands/agent_ops.py +0 -0
  71. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/commands/audit.py +0 -0
  72. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/commands/chat.py +0 -0
  73. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/commands/dispatch_workers.py +0 -0
  74. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/commands/drive.py +0 -0
  75. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/commands/drive_queue.py +0 -0
  76. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/commands/gate_a.py +0 -0
  77. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/commands/gates.py +0 -0
  78. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/commands/issues.py +0 -0
  79. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/commands/lifecycle.py +0 -0
  80. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/commands/merge.py +0 -0
  81. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/commands/milestone.py +0 -0
  82. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/commands/plan_followup.py +0 -0
  83. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/commands/plans.py +0 -0
  84. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/commands/portal.py +0 -0
  85. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/commands/release.py +0 -0
  86. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/commands/report.py +0 -0
  87. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/commands/review.py +0 -0
  88. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/commands/scorecard.py +0 -0
  89. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/commands/sessions.py +0 -0
  90. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/commands/setup.py +0 -0
  91. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/commands/terminal.py +0 -0
  92. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/commands/test_gate.py +0 -0
  93. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/commands/tui.py +0 -0
  94. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/comments.py +0 -0
  95. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/config.py +0 -0
  96. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/conflict_fix.py +0 -0
  97. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dao.py +0 -0
  98. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/__init__.py +0 -0
  99. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/fixture.py +0 -0
  100. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/index.html +0 -0
  101. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/server.py +0 -0
  102. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/terminal.py +0 -0
  103. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/.gitignore +0 -0
  104. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/components.json +0 -0
  105. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/dist/assets/Gallery-da3qNiIw.js +0 -0
  106. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
  107. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/dist/assets/Terminal-skVFCxPU.js +0 -0
  108. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/dist/assets/index-DltfZR5f.js +0 -0
  109. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
  110. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
  111. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
  112. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
  113. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
  114. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/dist/index.html +0 -0
  115. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
  116. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/dist/sw.js +0 -0
  117. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
  118. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
  119. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
  120. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
  121. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
  122. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
  123. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
  124. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
  125. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
  126. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
  127. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/eslint.config.js +0 -0
  128. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/index.html +0 -0
  129. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
  130. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/package-lock.json +0 -0
  131. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/package.json +0 -0
  132. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
  133. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/playwright.config.ts +0 -0
  134. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/postcss.config.js +0 -0
  135. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
  136. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
  137. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
  138. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/App.tsx +0 -0
  139. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/api/client.ts +0 -0
  140. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/api/generated.ts +0 -0
  141. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
  142. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
  143. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
  144. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
  145. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
  146. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
  147. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
  148. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
  149. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
  150. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
  151. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
  152. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
  153. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
  154. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
  155. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
  156. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
  157. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
  158. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
  159. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
  160. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
  161. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
  162. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
  163. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
  164. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
  165. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
  166. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
  167. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
  168. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
  169. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
  170. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
  171. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
  172. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
  173. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
  174. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
  175. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/index.css +0 -0
  176. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
  177. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
  178. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/main.tsx +0 -0
  179. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
  180. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
  181. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
  182. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
  183. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
  184. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
  185. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
  186. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
  187. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
  188. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
  189. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
  190. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
  191. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
  192. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
  193. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
  194. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
  195. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
  196. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
  197. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
  198. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
  199. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
  200. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/test-setup.ts +0 -0
  201. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
  202. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/tailwind.config.js +0 -0
  203. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/tsconfig.json +0 -0
  204. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/tsconfig.node.json +0 -0
  205. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/vite.config.ts +0 -0
  206. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/db.py +0 -0
  207. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dead_end.py +0 -0
  208. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/deploy/README.md +0 -0
  209. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/deploy/coord-agent.service +0 -0
  210. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/deploy/coord-db-backup.service +0 -0
  211. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/deploy/coord-db-backup.sh +0 -0
  212. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/deploy/coord-db-backup.timer +0 -0
  213. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/deploy/coord-drive-queue.service +0 -0
  214. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/deploy/coord-drive-queue.timer +0 -0
  215. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/deploy/coord-notify.service +0 -0
  216. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/deploy/coord-notify.timer +0 -0
  217. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/deploy/coord-release-propagate.service +0 -0
  218. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/deploy/coord-release-propagate.timer +0 -0
  219. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/deploy/coord-release-window.service +0 -0
  220. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/deploy/coord-release-window.timer +0 -0
  221. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/deploy/coord-serve.service +0 -0
  222. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/deploy/coord-web-dist-build.service +0 -0
  223. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/deploy/coord-web-dist-build.timer +0 -0
  224. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/deploy/coord-web.service +0 -0
  225. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/deploy_manifest.py +0 -0
  226. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/deploy_units.py +0 -0
  227. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/deps.py +0 -0
  228. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/diagnose.py +0 -0
  229. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dispatch.py +0 -0
  230. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dist_name.py +0 -0
  231. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/drive.py +0 -0
  232. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/drive_queue.py +0 -0
  233. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/drive_state.py +0 -0
  234. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/events.py +0 -0
  235. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/failure_class.py +0 -0
  236. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/filelock.py +0 -0
  237. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/fleet_config_health.py +0 -0
  238. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/freshness.py +0 -0
  239. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/gate_a.py +0 -0
  240. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/gate_b.py +0 -0
  241. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/gate_snapshot.py +0 -0
  242. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/gates.py +0 -0
  243. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/goal.py +0 -0
  244. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/graph_health.py +0 -0
  245. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/health/__init__.py +0 -0
  246. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/health/aggregate.py +0 -0
  247. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/health/checks/__init__.py +0 -0
  248. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/health/checks/agent_install.py +0 -0
  249. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/health/checks/cargo_targets.py +0 -0
  250. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/health/checks/claude_binary.py +0 -0
  251. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/health/checks/deploy_lane_facts.py +0 -0
  252. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/health/checks/disk.py +0 -0
  253. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/health/checks/fleet_board.py +0 -0
  254. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  255. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/health/checks/fleet_phantom.py +0 -0
  256. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/health/checks/fleet_unit_drift.py +0 -0
  257. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/health/checks/graph.py +0 -0
  258. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/health/checks/plan_usage.py +0 -0
  259. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/health/checks/repo_state.py +0 -0
  260. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/health/checks/spawned_coord.py +0 -0
  261. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/health/checks/timer_active.py +0 -0
  262. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/health/checks/toolchain.py +0 -0
  263. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/health/checks/unit_drift.py +0 -0
  264. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/health/checks/unit_enablement.py +0 -0
  265. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/health/checks/worktrees.py +0 -0
  266. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/health/cli.py +0 -0
  267. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/health/context.py +0 -0
  268. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/health/fleet_snapshot.py +0 -0
  269. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/health/models.py +0 -0
  270. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/health/pypi.py +0 -0
  271. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/health/registry.py +0 -0
  272. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/health/render.py +0 -0
  273. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/health/units.py +0 -0
  274. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/hooks.py +0 -0
  275. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/housekeeping.py +0 -0
  276. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/interactive.py +0 -0
  277. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/issue_store.py +0 -0
  278. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/liveness_auditor.py +0 -0
  279. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/machine_pause.py +0 -0
  280. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/merge_queue.py +0 -0
  281. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/milestone_chat.py +0 -0
  282. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/milestone_dispatch.py +0 -0
  283. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/milestone_gate.py +0 -0
  284. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/milestone_order.py +0 -0
  285. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/mock_author.py +0 -0
  286. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/models.py +0 -0
  287. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/network.py +0 -0
  288. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/new_issue_chat.py +0 -0
  289. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/notifier/__init__.py +0 -0
  290. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/notifier/baseline.py +0 -0
  291. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/notifier/cli.py +0 -0
  292. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/notifier/collect.py +0 -0
  293. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/notifier/digest.py +0 -0
  294. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/notifier/models.py +0 -0
  295. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/notifier/predicate.py +0 -0
  296. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/notifier/service.py +0 -0
  297. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/notifier/store.py +0 -0
  298. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/notifier/transport.py +0 -0
  299. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/notify.py +0 -0
  300. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/openapi.py +0 -0
  301. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/overlap_fence.py +0 -0
  302. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/parentage.py +0 -0
  303. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/parentage_github.py +0 -0
  304. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/pipeline.py +0 -0
  305. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/plan_parser.py +0 -0
  306. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/plans.py +0 -0
  307. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/platform_paths.py +0 -0
  308. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/portal_bridge.py +0 -0
  309. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/pr_body_lint.py +0 -0
  310. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/prereqs.py +0 -0
  311. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/progress.py +0 -0
  312. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/providers/__init__.py +0 -0
  313. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/providers/base.py +0 -0
  314. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/providers/claude.py +0 -0
  315. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/providers/claude_pty.py +0 -0
  316. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/providers/opencode.py +0 -0
  317. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/reconcile.py +0 -0
  318. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/refine_chat.py +0 -0
  319. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/release_cordon.py +0 -0
  320. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/release_propagate.py +0 -0
  321. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/release_verify.py +0 -0
  322. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/release_window.py +0 -0
  323. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/reports.py +0 -0
  324. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/revalidate.py +0 -0
  325. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/review.py +0 -0
  326. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/scorecard.py +0 -0
  327. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/serve_app.py +0 -0
  328. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/skills/update-issue/SKILL.md +0 -0
  329. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/smoke.py +0 -0
  330. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/spend_ceiling.py +0 -0
  331. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/split_work.py +0 -0
  332. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/stage_projection.py +0 -0
  333. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/state.py +0 -0
  334. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/test_author.py +0 -0
  335. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/test_chat.py +0 -0
  336. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/test_orchestrator.py +0 -0
  337. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/test_report.py +0 -0
  338. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/tui_release.py +0 -0
  339. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/usage.py +0 -0
  340. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/usage_limits.py +0 -0
  341. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/usage_rollup.py +0 -0
  342. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/worker_events.py +0 -0
  343. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coordinator.example.yml +0 -0
  344. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/deploy/coord-agent.service +0 -0
  345. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/deploy/coord-db-backup.service +0 -0
  346. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/deploy/coord-db-backup.sh +0 -0
  347. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/deploy/coord-db-backup.timer +0 -0
  348. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/deploy/coord-drive-queue.service +0 -0
  349. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/deploy/coord-drive-queue.timer +0 -0
  350. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/deploy/coord-notify.service +0 -0
  351. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/deploy/coord-notify.timer +0 -0
  352. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/deploy/coord-release-propagate.service +0 -0
  353. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/deploy/coord-release-propagate.timer +0 -0
  354. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/deploy/coord-release-window.service +0 -0
  355. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/deploy/coord-release-window.timer +0 -0
  356. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/deploy/coord-serve.service +0 -0
  357. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/deploy/coord-web-dist-build.service +0 -0
  358. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/deploy/coord-web-dist-build.sh +0 -0
  359. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/deploy/coord-web-dist-build.timer +0 -0
  360. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/deploy/coord-web-rollback.sh +0 -0
  361. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/deploy/coord-web.service +0 -0
  362. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/deploy/node-shim.sh +0 -0
  363. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/docs/ARCHITECTURE.md +0 -0
  364. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/docs/ARCH_SECURITY_GATES.md +0 -0
  365. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/docs/COCKPIT.md +0 -0
  366. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/docs/CONTROL_CENTER.md +0 -0
  367. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/docs/CROSS_PLATFORM.md +0 -0
  368. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/docs/CUSTOMER_PORTAL.md +0 -0
  369. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/docs/DRIVE_QUEUE.md +0 -0
  370. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/docs/EPHEMERAL_WORKERS.md +0 -0
  371. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/docs/FORGE_MIGRATION.md +0 -0
  372. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/docs/GRAPHIFY_SETUP.md +0 -0
  373. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/docs/ISSUE_GUIDANCE.md +0 -0
  374. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/docs/MAC_MINI.md +0 -0
  375. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  376. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/docs/NOTIFIER.md +0 -0
  377. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/docs/OPENCODE_VERIFICATION.md +0 -0
  378. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/docs/OPERATING_GOTCHAS.md +0 -0
  379. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/docs/ORACLE_LOOP.md +0 -0
  380. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/docs/PHONE_WEBAPP.md +0 -0
  381. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/docs/PIPELINE_V2.md +0 -0
  382. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/docs/PLATFORM_EVOLUTION.md +0 -0
  383. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/docs/SECOND_BACKEND.md +0 -0
  384. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/docs/STORE_SERVICE.md +0 -0
  385. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  386. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/docs/WEB_CONTROL_CENTER.md +0 -0
  387. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/docs/mocks/web/README.md +0 -0
  388. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/docs/mocks/web/_tokens.css +0 -0
  389. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/docs/mocks/web/issue-detail.html +0 -0
  390. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/docs/mocks/web/pipeline-narrow.html +0 -0
  391. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/docs/mocks/web/pipeline-wide.html +0 -0
  392. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/graphify-out/.gitignore +0 -0
  393. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/install-agent.sh +0 -0
  394. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/pyproject.toml +0 -0
  395. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/scripts/audit_review_verdict_overrides.py +0 -0
  396. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  397. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/scripts/azure-workers/build-worker-image.sh +0 -0
  398. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/scripts/azure-workers/coordinator-machine.py +0 -0
  399. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/scripts/azure-workers/epic-down.sh +0 -0
  400. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/scripts/azure-workers/epic-up.sh +0 -0
  401. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/scripts/azure-workers/preflight.sh +0 -0
  402. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/scripts/azure-workers/provision-worker.sh +0 -0
  403. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  404. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  405. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/scripts/azure-workers/verify-github-token.sh +0 -0
  406. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/scripts/codegen.py +0 -0
  407. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/scripts/coord-test-runner.sh +0 -0
  408. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/scripts/drive-batch.sh +0 -0
  409. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/scripts/gen_board_fixture.py +0 -0
  410. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/scripts/next_release_tag.py +0 -0
  411. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/scripts/run_tests_in_populated_home.sh +0 -0
  412. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/scripts/run_tests_without_gh.sh +0 -0
  413. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/scripts/smoke_437_interactive.py +0 -0
  414. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/scripts/verify_878_review_capture.py +0 -0
  415. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/scripts/verify_release_published.py +0 -0
  416. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/scripts/verify_release_wheel.py +0 -0
  417. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/setup.cfg +0 -0
  418. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/SMOKE_SET.md +0 -0
  419. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/__init__.py +0 -0
  420. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  421. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/acceptance/ms-33/contract.md +0 -0
  422. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/acceptance/ms-33/manifest.yml +0 -0
  423. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  424. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  425. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  426. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  427. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/acceptance/ms-37/conftest.py +0 -0
  428. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/acceptance/ms-37/contract.md +0 -0
  429. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/acceptance/ms-37/manifest.yml +0 -0
  430. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  431. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  432. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/acceptance/ms-38/contract.md +0 -0
  433. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/acceptance/ms-38/manifest.yml +0 -0
  434. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  435. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  436. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  437. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  438. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  439. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  440. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  441. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  442. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  443. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  444. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/acceptance/ms-51/contract.md +0 -0
  445. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  446. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  447. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/acceptance/ms-51/manifest.yml +0 -0
  448. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  449. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/acceptance/ms-51/tsconfig.json +0 -0
  450. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  451. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/fixtures/board-pipeline-basic.json +0 -0
  452. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  453. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  454. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  455. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/fixtures/playwright/all_pass.json +0 -0
  456. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  457. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/fixtures/playwright/mixed_fail.json +0 -0
  458. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  459. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  460. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/fixtures/playwright/skip.json +0 -0
  461. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/fixtures/playwright/truncated.json +0 -0
  462. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  463. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  464. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  465. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  466. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  467. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  468. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  469. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  470. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_acceptance.py +0 -0
  471. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_acceptance_drivers.py +0 -0
  472. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_agent.py +0 -0
  473. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_agent_api_error.py +0 -0
  474. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_agent_app.py +0 -0
  475. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_agent_branch_base.py +0 -0
  476. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_agent_branch_capture.py +0 -0
  477. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_agent_config_free_1712.py +0 -0
  478. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_agent_deploy_units_endpoint.py +0 -0
  479. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_agent_dirty_worktree.py +0 -0
  480. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_agent_graph_self_heal.py +0 -0
  481. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_agent_health_h3.py +0 -0
  482. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_agent_idle_restart.py +0 -0
  483. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_agent_push_failure.py +0 -0
  484. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_agent_reap.py +0 -0
  485. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_agent_repos_and_pull.py +0 -0
  486. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_agent_restart_services_endpoint.py +0 -0
  487. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_agent_startup_diagnostics.py +0 -0
  488. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_agent_update.py +0 -0
  489. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_agent_update_bluegreen.py +0 -0
  490. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_agent_usage_limit.py +0 -0
  491. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_agent_zero_commit.py +0 -0
  492. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_ambient_home_isolation.py +0 -0
  493. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_approve_reject_plan.py +0 -0
  494. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_approve_usage_gate.py +0 -0
  495. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_assignment_already_recorded_daemon.py +0 -0
  496. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_audit_log.py +0 -0
  497. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_audit_outcome.py +0 -0
  498. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_audit_query.py +0 -0
  499. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_auto_loop.py +0 -0
  500. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_auto_release_publish_2035.py +0 -0
  501. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_base_checkout_restore.py +0 -0
  502. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_board_cap_762.py +0 -0
  503. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_board_fixture.py +0 -0
  504. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_board_read_path.py +0 -0
  505. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_board_service.py +0 -0
  506. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_board_state.py +0 -0
  507. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_board_wire.py +0 -0
  508. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_brain.py +0 -0
  509. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_branch_model.py +0 -0
  510. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_bug_intake.py +0 -0
  511. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_build_worker_image_env_update.py +0 -0
  512. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cargo_cache.py +0 -0
  513. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_ci_acceptance_gate_1950.py +0 -0
  514. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_ci_parity_2091.py +0 -0
  515. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_ci_store.py +0 -0
  516. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_claim.py +0 -0
  517. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_acceptance.py +0 -0
  518. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_assign.py +0 -0
  519. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  520. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_assign_interactive_remote.py +0 -0
  521. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_assign_provider.py +0 -0
  522. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_audit.py +0 -0
  523. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_chat_continue.py +0 -0
  524. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_diagnose_config_provenance.py +0 -0
  525. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_diagnose_graph.py +0 -0
  526. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_doctor.py +0 -0
  527. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_doctor_config_free_1801.py +0 -0
  528. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_drive.py +0 -0
  529. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_drive_queue.py +0 -0
  530. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_escalate.py +0 -0
  531. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_fix_headless_review.py +0 -0
  532. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_gate_a.py +0 -0
  533. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_install_drift.py +0 -0
  534. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_install_skills.py +0 -0
  535. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_issue_create_label.py +0 -0
  536. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_issue_reopen.py +0 -0
  537. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_merge.py +0 -0
  538. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_milestone_assign.py +0 -0
  539. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_milestone_capture.py +0 -0
  540. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_milestone_chat_add_child.py +0 -0
  541. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_milestone_dispatch.py +0 -0
  542. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_milestone_gate_b.py +0 -0
  543. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_milestone_gate_c.py +0 -0
  544. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_milestone_order.py +0 -0
  545. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  546. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_milestone_ship.py +0 -0
  547. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_network.py +0 -0
  548. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_new_issue_chat.py +0 -0
  549. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_plans.py +0 -0
  550. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_portal.py +0 -0
  551. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_pull_artifact.py +0 -0
  552. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_queue.py +0 -0
  553. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_reattach_sessions.py +0 -0
  554. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_refine_board.py +0 -0
  555. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_release_preflight.py +0 -0
  556. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_release_propagate.py +0 -0
  557. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_release_window.py +0 -0
  558. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_scorecard.py +0 -0
  559. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_set_review_findings.py +0 -0
  560. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_status_advisory_terminal.py +0 -0
  561. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_status_merge_queue.py +0 -0
  562. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_status_provider.py +0 -0
  563. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_status_review_finalizing.py +0 -0
  564. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_status_test_failed_tag.py +0 -0
  565. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_status_usage_limit.py +0 -0
  566. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_sync_comments_873.py +0 -0
  567. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_test_plan.py +0 -0
  568. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_track.py +0 -0
  569. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_tui_update.py +0 -0
  570. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_wait.py +0 -0
  571. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_client_base_install.py +0 -0
  572. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_comments.py +0 -0
  573. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_completion_summary.py +0 -0
  574. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_config.py +0 -0
  575. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_config_acceptance.py +0 -0
  576. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_config_audit.py +0 -0
  577. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_config_pricing.py +0 -0
  578. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_config_usage_gate.py +0 -0
  579. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_conflict_fix.py +0 -0
  580. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_conflict_fix_semantic.py +0 -0
  581. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_coord_test.py +0 -0
  582. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_coord_test_runner_baseline.py +0 -0
  583. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_coord_test_runner_routing.py +0 -0
  584. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_coord_test_runner_toolchain.py +0 -0
  585. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_coord_web_sse_restart_live.py +0 -0
  586. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_coordinator_machine.py +0 -0
  587. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cross_platform_imports.py +0 -0
  588. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_dashboard.py +0 -0
  589. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_dashboard_fixture.py +0 -0
  590. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_dashboard_terminal.py +0 -0
  591. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_dashboard_terminal_live.py +0 -0
  592. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_db.py +0 -0
  593. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_dead_end.py +0 -0
  594. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_deploy_coord_db_backup.py +0 -0
  595. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_deploy_coord_web_dist.py +0 -0
  596. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_deploy_coord_web_rollback.py +0 -0
  597. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_deploy_drive_queue_unit.py +0 -0
  598. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_deploy_manifest.py +0 -0
  599. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_deploy_units_lane.py +0 -0
  600. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_deploy_web_unit.py +0 -0
  601. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_deps.py +0 -0
  602. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_diagnose.py +0 -0
  603. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_dispatch.py +0 -0
  604. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_dispatch_target_validation.py +0 -0
  605. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_dist_name.py +0 -0
  606. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_done_housekeeping.py +0 -0
  607. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_drive.py +0 -0
  608. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_drive_queue.py +0 -0
  609. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_drive_state.py +0 -0
  610. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_drive_tmux.py +0 -0
  611. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_epic_up_capability_detection.py +0 -0
  612. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  613. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_epic_up_image_provenance.py +0 -0
  614. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_errors.py +0 -0
  615. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_events.py +0 -0
  616. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_failure_class.py +0 -0
  617. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_filelock.py +0 -0
  618. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  619. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_fix_of_force_override.py +0 -0
  620. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_fleet_config_health.py +0 -0
  621. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_fleet_health_probes.py +0 -0
  622. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_fleet_health_snapshot.py +0 -0
  623. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_freshness.py +0 -0
  624. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_gate_a.py +0 -0
  625. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_gate_b.py +0 -0
  626. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_gate_snapshot_staleness.py +0 -0
  627. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_gates.py +0 -0
  628. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_generated_types_fixture.py +0 -0
  629. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_github_ops.py +0 -0
  630. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_goal.py +0 -0
  631. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_graph_health.py +0 -0
  632. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_handoff.py +0 -0
  633. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_health_checks.py +0 -0
  634. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_health_cli.py +0 -0
  635. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_health_cli_graph.py +0 -0
  636. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_health_config.py +0 -0
  637. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_health_context.py +0 -0
  638. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_health_deploy_lane_facts.py +0 -0
  639. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_health_incident_regression.py +0 -0
  640. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_health_pypi.py +0 -0
  641. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_health_registry.py +0 -0
  642. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_health_timer_active.py +0 -0
  643. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_health_toolchain.py +0 -0
  644. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_health_unit_drift.py +0 -0
  645. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_health_unit_enablement.py +0 -0
  646. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_hooks.py +0 -0
  647. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_human_attended_437.py +0 -0
  648. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_init.py +0 -0
  649. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_integration.py +0 -0
  650. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_interactive_briefing_echo.py +0 -0
  651. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_interactive_prefill_state.py +0 -0
  652. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_interactive_session_relaunch.py +0 -0
  653. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_interactive_test_verdict_backstop.py +0 -0
  654. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_interactive_token_attribution.py +0 -0
  655. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_interactive_worktree.py +0 -0
  656. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_issue_store_seam.py +0 -0
  657. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_liveness_auditor.py +0 -0
  658. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_liveness_notify.py +0 -0
  659. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_machine_pause.py +0 -0
  660. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_merge_queue.py +0 -0
  661. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_merge_verify.py +0 -0
  662. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_milestone_chat.py +0 -0
  663. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_milestone_dispatch.py +0 -0
  664. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_milestone_gate.py +0 -0
  665. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_milestone_order.py +0 -0
  666. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_milestone_seam.py +0 -0
  667. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_mock_author.py +0 -0
  668. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_model_tiering.py +0 -0
  669. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_models.py +0 -0
  670. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_models_config_labels.py +0 -0
  671. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_needs_attention.py +0 -0
  672. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_network.py +0 -0
  673. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_new_issue_chat.py +0 -0
  674. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_next_release_tag.py +0 -0
  675. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_no_direct_gh_calls.py +0 -0
  676. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_node_shim.py +0 -0
  677. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_notifier_baseline.py +0 -0
  678. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_notifier_cli.py +0 -0
  679. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_notifier_collect.py +0 -0
  680. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_notifier_config.py +0 -0
  681. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_notifier_drive_seam.py +0 -0
  682. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_notifier_isolation.py +0 -0
  683. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_notifier_predicate.py +0 -0
  684. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_notifier_quiet_hours.py +0 -0
  685. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_notifier_service.py +0 -0
  686. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_notify.py +0 -0
  687. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_notify_drain.py +0 -0
  688. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_openapi.py +0 -0
  689. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_operational_defaults.py +0 -0
  690. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_overlap_fence.py +0 -0
  691. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_packaged_deploy_units.py +0 -0
  692. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_parentage.py +0 -0
  693. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_paste_landed.py +0 -0
  694. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_pipeline.py +0 -0
  695. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_plan_followup_approve_plan_command.py +0 -0
  696. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_plan_followup_pr_command.py +0 -0
  697. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_plan_followup_review_command.py +0 -0
  698. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_plan_only.py +0 -0
  699. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_plan_parser.py +0 -0
  700. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_platform_paths.py +0 -0
  701. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_portal_bridge.py +0 -0
  702. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_portal_config.py +0 -0
  703. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_pr_body_lint.py +0 -0
  704. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_prereqs.py +0 -0
  705. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_production_db_guard.py +0 -0
  706. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_progress.py +0 -0
  707. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_provider_seam.py +0 -0
  708. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_providers.py +0 -0
  709. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_providers_config_labels.py +0 -0
  710. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_providers_pty.py +0 -0
  711. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_quiet_hours.py +0 -0
  712. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_quiet_hours_store_2146.py +0 -0
  713. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_reap_merged_sessions.py +0 -0
  714. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_reap_stale_interactive_tick.py +0 -0
  715. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_reconcile_branch.py +0 -0
  716. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_reconcile_completions.py +0 -0
  717. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_reconcile_merges.py +0 -0
  718. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_reconcile_usage_limit_done.py +0 -0
  719. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_refine_chat.py +0 -0
  720. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_release_cordon_2101.py +0 -0
  721. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_release_propagate.py +0 -0
  722. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_release_unified_1242.py +0 -0
  723. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_release_verify.py +0 -0
  724. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_release_window.py +0 -0
  725. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_remote_auto_prune.py +0 -0
  726. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_remote_interactive_reaper.py +0 -0
  727. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_report_result_push.py +0 -0
  728. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_reports.py +0 -0
  729. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_retry.py +0 -0
  730. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_retry_advisory_1606.py +0 -0
  731. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_retry_type_1636.py +0 -0
  732. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_revalidate.py +0 -0
  733. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_review.py +0 -0
  734. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_review_end_review_without_verdict.py +0 -0
  735. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_review_parse_failure_diagnostic.py +0 -0
  736. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_review_reaffirm.py +0 -0
  737. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_review_state.py +0 -0
  738. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_review_verdict_backstop.py +0 -0
  739. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_review_verdict_override_audit.py +0 -0
  740. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_review_verdict_relay.py +0 -0
  741. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_review_zero_commits.py +0 -0
  742. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_scoped_review_wiring.py +0 -0
  743. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_scorecard.py +0 -0
  744. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_serve.py +0 -0
  745. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_serve_app_board_trim.py +0 -0
  746. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_session.py +0 -0
  747. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_slice_issue_attribution.py +0 -0
  748. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_smoke.py +0 -0
  749. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_smoke_live_checkout_restore.py +0 -0
  750. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_smoke_workflow.py +0 -0
  751. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_spend_ceiling.py +0 -0
  752. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_spend_ceiling_coordinator.py +0 -0
  753. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_split.py +0 -0
  754. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_split_work.py +0 -0
  755. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_stage_projection.py +0 -0
  756. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_stalled_pipeline.py +0 -0
  757. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_state.py +0 -0
  758. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_state_review_findings_daemon.py +0 -0
  759. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_status_fleet_footer.py +0 -0
  760. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_stop_1567.py +0 -0
  761. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_stuck.py +0 -0
  762. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_terminal_command.py +0 -0
  763. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_test_author.py +0 -0
  764. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_test_chat.py +0 -0
  765. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_test_orchestrator.py +0 -0
  766. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_test_report.py +0 -0
  767. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_test_verdict_parsing.py +0 -0
  768. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_test_verdict_transcript_floor.py +0 -0
  769. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_thin_client_board_audit.py +0 -0
  770. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_thin_client_config_load_1080.py +0 -0
  771. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_thin_client_daemon_routing_906.py +0 -0
  772. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_tmux_host.py +0 -0
  773. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_tmux_session.py +0 -0
  774. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_transcript_floor.py +0 -0
  775. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_usage.py +0 -0
  776. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_usage_limits.py +0 -0
  777. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_usage_rollup.py +0 -0
  778. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_venv_live_install_2121.py +0 -0
  779. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_version_single_source.py +0 -0
  780. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_watch.py +0 -0
  781. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_worker_events.py +0 -0
  782. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_worker_image_pin_sync.py +0 -0
  783. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_worker_safety.py +0 -0
  784. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_worker_test_scoping.py +0 -0
  785. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_worktree.py +0 -0
  786. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  787. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/Cargo.lock +0 -0
  788. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/Cargo.toml +0 -0
  789. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/cargo-config-local-quadraui.toml.example +0 -0
  790. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/src/app/audit.rs +0 -0
  791. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/src/app/chat.rs +0 -0
  792. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/src/app/data.rs +0 -0
  793. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/src/app/dialogs.rs +0 -0
  794. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/src/app/drive.rs +0 -0
  795. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/src/app/drive_queue.rs +0 -0
  796. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/src/app/escalation.rs +0 -0
  797. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/src/app/events.rs +0 -0
  798. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/src/app/fixtures.rs +0 -0
  799. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/src/app/fleet_health.rs +0 -0
  800. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/src/app/fleet_sessions.rs +0 -0
  801. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/src/app/fleet_terminals.rs +0 -0
  802. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/src/app/format.rs +0 -0
  803. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/src/app/milestone_dag.rs +0 -0
  804. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/src/app/mod.rs +0 -0
  805. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/src/app/msv.rs +0 -0
  806. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/src/app/pipeline.rs +0 -0
  807. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/src/app/plans.rs +0 -0
  808. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/src/app/render.rs +0 -0
  809. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/src/app/reports.rs +0 -0
  810. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/src/app/sessions.rs +0 -0
  811. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/src/app/settings_ui.rs +0 -0
  812. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/src/app/sidebar.rs +0 -0
  813. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/src/app/terminal.rs +0 -0
  814. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/src/app/tests.rs +0 -0
  815. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/src/app/types.rs +0 -0
  816. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/src/app/workspace.rs +0 -0
  817. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/src/bin/gtk.rs +0 -0
  818. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/src/commands.rs +0 -0
  819. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/src/lib.rs +0 -0
  820. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/src/main.rs +0 -0
  821. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/src/settings.rs +0 -0
  822. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/tests/acceptance.rs +0 -0
  823. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/tests/cli.rs +0 -0
  824. {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/tests/fixtures/board_sample.json +0 -0
@@ -84,6 +84,8 @@ coord retry|stop|resume <id> # Recovery; `coord done` ends th
84
84
  ```
85
85
  Setup / diagnostics (discoverable via `--help`): `coord init`, `coord config`, `coord agent`, `coord serve`, `coord web`, `coord diagnose`, `coord sessions [--remote]`, `coord split`, `coord notifier` ([`docs/NOTIFIER.md`](docs/NOTIFIER.md)).
86
86
 
87
+ **Onboarding a repo is five layers, and every one fails silently (#2220).** `coord repo add <name> --github <owner/repo> --machines a,b,c` does the safely-automatable parts (reads the *real* default branch from GitHub, writes the entry into the coord-settings checkout, adds it to each machine, creates the `coord`/tier labels) and then prints the residue it deliberately did **not** do. `coord repo doctor <name>` is the part that matters: it probes all five layers from **live state, not config** — each agent's `/health` repo list, the clone on each machine, the labels that exist, whether any workflow triggers on `pull_request`, `CLAUDE.md`, graph freshness — and exits non-zero on any CRIT. `coord doctor` folds in the live-state layer for every repo, so a half-onboarded one shows up in the fleet report without anyone remembering to ask. See [`docs/AGENT_OPERATIONS.md`](docs/AGENT_OPERATIONS.md).
88
+
87
89
  ## Development
88
90
 
89
91
  Always work in a virtualenv. Agent workers are spawned with the agent's own
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-coordinator
3
- Version: 0.5.72
3
+ Version: 0.5.74
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.72
3
+ Version: 0.5.74
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
@@ -111,6 +111,8 @@ coord/release_cordon.py
111
111
  coord/release_propagate.py
112
112
  coord/release_verify.py
113
113
  coord/release_window.py
114
+ coord/repo_edit.py
115
+ coord/repo_onboard.py
114
116
  coord/reports.py
115
117
  coord/revalidate.py
116
118
  coord/review.py
@@ -153,6 +155,7 @@ coord/commands/plan_followup.py
153
155
  coord/commands/plans.py
154
156
  coord/commands/portal.py
155
157
  coord/commands/release.py
158
+ coord/commands/repo.py
156
159
  coord/commands/report.py
157
160
  coord/commands/review.py
158
161
  coord/commands/scorecard.py
@@ -459,6 +462,7 @@ tests/test_cli_assign.py
459
462
  tests/test_cli_assign_interactive_oracle_gate.py
460
463
  tests/test_cli_assign_interactive_remote.py
461
464
  tests/test_cli_assign_provider.py
465
+ tests/test_cli_assign_repo_drift_2219.py
462
466
  tests/test_cli_audit.py
463
467
  tests/test_cli_chat_continue.py
464
468
  tests/test_cli_diagnose_config_provenance.py
@@ -496,6 +500,7 @@ tests/test_cli_refine_board.py
496
500
  tests/test_cli_release_preflight.py
497
501
  tests/test_cli_release_propagate.py
498
502
  tests/test_cli_release_window.py
503
+ tests/test_cli_repo_2220.py
499
504
  tests/test_cli_scorecard.py
500
505
  tests/test_cli_set_review_findings.py
501
506
  tests/test_cli_status_advisory_terminal.py
@@ -665,6 +670,8 @@ tests/test_release_verify.py
665
670
  tests/test_release_window.py
666
671
  tests/test_remote_auto_prune.py
667
672
  tests/test_remote_interactive_reaper.py
673
+ tests/test_repo_edit_2220.py
674
+ tests/test_repo_onboard_2220.py
668
675
  tests/test_report_result_push.py
669
676
  tests/test_reports.py
670
677
  tests/test_retry.py
@@ -64,6 +64,7 @@
64
64
  "coord/commands/plans.py",
65
65
  "coord/commands/portal.py",
66
66
  "coord/commands/release.py",
67
+ "coord/commands/repo.py",
67
68
  "coord/commands/report.py",
68
69
  "coord/commands/review.py",
69
70
  "coord/commands/scorecard.py",
@@ -289,6 +290,8 @@
289
290
  "coord/release_propagate.py",
290
291
  "coord/release_verify.py",
291
292
  "coord/release_window.py",
293
+ "coord/repo_edit.py",
294
+ "coord/repo_onboard.py",
292
295
  "coord/reports.py",
293
296
  "coord/revalidate.py",
294
297
  "coord/review.py",
@@ -489,6 +492,7 @@
489
492
  "tests/test_cli_assign_interactive_oracle_gate.py",
490
493
  "tests/test_cli_assign_interactive_remote.py",
491
494
  "tests/test_cli_assign_provider.py",
495
+ "tests/test_cli_assign_repo_drift_2219.py",
492
496
  "tests/test_cli_audit.py",
493
497
  "tests/test_cli_chat_continue.py",
494
498
  "tests/test_cli_diagnose_config_provenance.py",
@@ -526,6 +530,7 @@
526
530
  "tests/test_cli_release_preflight.py",
527
531
  "tests/test_cli_release_propagate.py",
528
532
  "tests/test_cli_release_window.py",
533
+ "tests/test_cli_repo_2220.py",
529
534
  "tests/test_cli_scorecard.py",
530
535
  "tests/test_cli_set_review_findings.py",
531
536
  "tests/test_cli_status_advisory_terminal.py",
@@ -695,6 +700,8 @@
695
700
  "tests/test_release_window.py",
696
701
  "tests/test_remote_auto_prune.py",
697
702
  "tests/test_remote_interactive_reaper.py",
703
+ "tests/test_repo_edit_2220.py",
704
+ "tests/test_repo_onboard_2220.py",
698
705
  "tests/test_report_result_push.py",
699
706
  "tests/test_reports.py",
700
707
  "tests/test_retry.py",
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "0.5.72",
2
+ "tag": "0.5.74",
3
3
  "distance": 0,
4
- "node": "gf89a7326b4afe98af0d76d9cbafabea51928013f",
4
+ "node": "g6932f7816982a66f6e4945073a12324dd56fc91b",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-14"
@@ -141,6 +141,9 @@ from coord.commands.lifecycle import done, housekeeping, notify, resume, serve,
141
141
  from coord.commands.milestone import milestone_group
142
142
  from coord.commands.plans import plans_cmd
143
143
  from coord.commands.release import release_group, release_preflight
144
+ # #2220: `coord repo add` / `coord repo doctor` — onboarding a repo, and
145
+ # verifying it actually happened across all five layers.
146
+ from coord.commands.repo import repo_group
144
147
  from coord.commands.plan_followup import (
145
148
  _dispatch_followup, # noqa: F401 — re-exported for tests
146
149
  approve_plan,
@@ -449,6 +452,8 @@ main.add_command(release_preflight)
449
452
  # the flat command above), grouped so the pre-tag and post-release halves of
450
453
  # the release story are discoverable together.
451
454
  main.add_command(release_group)
455
+ # #2220: repo onboarding + its verifier.
456
+ main.add_command(repo_group)
452
457
  main.add_command(tui_group)
453
458
 
454
459
 
@@ -9,6 +9,7 @@ import dataclasses
9
9
  import socket
10
10
  import sys
11
11
  from pathlib import Path
12
+ from typing import TYPE_CHECKING
12
13
 
13
14
  import click
14
15
  import httpx
@@ -31,6 +32,9 @@ from coord.commands.dispatch_workers import (
31
32
  _dispatch_troubleshoot,
32
33
  )
33
34
 
35
+ if TYPE_CHECKING:
36
+ from coord.models import Machine
37
+
34
38
 
35
39
  def _stdin_is_tty() -> bool:
36
40
  """Seam over ``sys.stdin.isatty()`` — see ``_require_interactive_tty``
@@ -89,6 +93,88 @@ def _require_interactive_tty(dry_run: bool) -> None:
89
93
  )
90
94
 
91
95
 
96
+ def _repo_capability_refusal(
97
+ machine_obj: Machine, repo: str, *, timeout: float = 3.0
98
+ ) -> str | None:
99
+ """Cross-check *repo* against the target agent's LIVE ``/health`` repo
100
+ list, returning a refusal message when the two disagree — or ``None``
101
+ when they agree, the agent is unreachable, or the agent is config-free
102
+ (#2219).
103
+
104
+ ``assign()``'s ``machine_obj.can_work_on(repo)`` check (just above this
105
+ call site) only ever reads ``coordinator.yml`` — which the operator can
106
+ edit any time — never the agent process actually running on that
107
+ machine. A repo added to config after the agent started stays invisible
108
+ to it until a full ``systemctl --user restart coord-agent`` (there is no
109
+ partial re-read today). Every pre-flight surface an operator would
110
+ check before spending a dispatch reads config too: ``coord config``,
111
+ ``coord status``, and — worst of all — ``coord assign ... --dry-run``,
112
+ which is the documented way to sanity-check a dispatch before paying
113
+ for it. All three said this was fine while the live agent rejected it
114
+ outright, and a drive queue burned both retry attempts discovering that
115
+ by trial before landing terminally ``blocked`` (#2219). This is the
116
+ same ``/health`` read ``coord status``/``coord doctor`` already make
117
+ (``coord.network.check_machine``) — reused, not duplicated.
118
+
119
+ ``/health``'s ``repos`` field is NOT what ``AgentServer.assign()``
120
+ itself gates on, though — it's ``AgentServer._servable_repos()``'s
121
+ FILTERED list (``coord/agent.py``, #1527), which drops any repo with no
122
+ ``repo_paths`` entry or whose configured path is missing on disk.
123
+ ``assign()``'s own gate (``coord/agent.py``: ``if self.repos and
124
+ spec.repo_name not in self.repos``) checks the UNFILTERED
125
+ ``self.repos``. The two disagree exactly when a repo is configured on
126
+ that machine but degraded (``/health``'s ``degraded`` dict, #1527): in
127
+ that case ``assign()`` would NOT reject with "does not handle repo" —
128
+ it proceeds and fails later with the distinct "repo path does not
129
+ exist" — so this helper checks ``degraded`` FIRST and reports that
130
+ reason (with no restart advice, since restarting coord-agent cannot
131
+ repair a missing/misconfigured ``repo_paths`` entry) before ever
132
+ falling back to the "hasn't re-read config since *repo* was added"
133
+ story, which is only accurate when *repo* is absent from ``/health``
134
+ entirely — not merely degraded.
135
+
136
+ Deliberately narrow otherwise: only refuses when the agent is
137
+ reachable, ANSWERED with a real ``/health`` body, is not running
138
+ config-free (#1801 — a config-free agent's repos come from the dispatch
139
+ payload, not its own config, so an empty/mismatched list there is not a
140
+ capability gap), and either lists *repo* as degraded or published a
141
+ NON-empty repo list that plainly excludes it. Every other case
142
+ (offline, timeout, old agent with no ``repos`` key, empty list) falls
143
+ through to ``None`` — today's behavior, where the POST itself is left
144
+ to surface a real problem — so this never turns a transient network
145
+ hiccup into a new dispatch failure mode.
146
+ """
147
+ from coord.network import check_machine
148
+
149
+ status = check_machine(machine_obj, timeout=timeout)
150
+ if not status.is_online or status.health is None:
151
+ return None
152
+ health = status.health
153
+ if health.get("config_free"):
154
+ return None
155
+ degraded = health.get("degraded") or {}
156
+ if repo in degraded:
157
+ return (
158
+ f"{machine_obj.name!r} lists {repo!r} in coordinator.yml, and "
159
+ f"the live agent agrees it's configured, but the repo is "
160
+ f"DEGRADED there, not just unrefreshed: {degraded[repo]} "
161
+ f"(#1527). This is not the #2219 stale-config case — "
162
+ f"restarting coord-agent will not fix a missing or "
163
+ f"misconfigured repo_paths entry. Repair repo_paths[{repo!r}] "
164
+ f"on {machine_obj.name!r} instead, then retry."
165
+ )
166
+ live_repos = health.get("repos")
167
+ if not live_repos or repo in live_repos:
168
+ return None
169
+ return (
170
+ f"{machine_obj.name!r} rejected the assignment: this agent does "
171
+ f"not handle repo {repo!r} (supported: {live_repos}) — "
172
+ f"coordinator.yml lists it, but the live agent process hasn't "
173
+ f"re-read its config since {repo!r} was added (#2219). Restart "
174
+ f"coord-agent on {machine_obj.name!r} to pick it up, then retry."
175
+ )
176
+
177
+
92
178
  @click.command(help="Brain proposes assignments for idle machines.")
93
179
  @_CONFIG_OPTION
94
180
  @click.option("--dry-run", is_flag=True, help="Plan without saving proposals.")
@@ -951,6 +1037,18 @@ def assign(
951
1037
  )
952
1038
  sys.exit(2)
953
1039
 
1040
+ # #2219: config says this machine handles `repo` — but the LIVE agent
1041
+ # process may not (yet) agree, if `repo` was added to coordinator.yml
1042
+ # after that agent started. Refuse with the agent's real reason here,
1043
+ # before any claim/worktree/network work — including under --dry-run,
1044
+ # which is exactly the surface that used to green-light this. See
1045
+ # _repo_capability_refusal's docstring for the full rationale and what
1046
+ # it deliberately does NOT block on (offline/unreachable/config-free).
1047
+ capability_refusal = _repo_capability_refusal(machine_obj, repo)
1048
+ if capability_refusal is not None:
1049
+ click.echo(f"error: {capability_refusal}", err=True)
1050
+ sys.exit(2)
1051
+
954
1052
  # Refuse direct assignment to a paused machine — `coord pause` exists
955
1053
  # so the user can explicitly steer work away. If they meant to dispatch
956
1054
  # anyway they should `coord unpause` first. #1862: also refuses inside
@@ -0,0 +1,368 @@
1
+ """``coord repo add`` / ``coord repo doctor`` — onboarding a repo, and
2
+ checking that it actually happened (#2220).
3
+
4
+ Onboarding a repo is ~14 steps across five layers (config, three machines,
5
+ GitHub, the repo's own contents, the graph) with no command, no checklist and
6
+ no verifier — reconstructed from memory each time, and **every layer fails
7
+ silently**. ``stick-demo`` sat two-thirds onboarded until ``stick-demo#1`` died
8
+ of it, having burned both drive attempts, while ``coord config``, ``coord
9
+ status`` and ``coord assign --dry-run`` all reported the dispatch as fine.
10
+
11
+ Of the two commands here the **second is the one that matters**. A runbook is
12
+ the weakest available answer and this codebase already has the proof:
13
+ ``docs/GRAPHIFY_SETUP.md`` is exactly that shape, and graphify has still fallen
14
+ by the wayside more than once because nothing checks it. What holds is a
15
+ checkable gate — ``coord diagnose --graph``, ``coord doctor``, ``coord release
16
+ verify`` all work because they answer *is it true right now*, not *did you
17
+ remember*.
18
+
19
+ ``coord repo add`` therefore does only the mechanical, safely-automatable parts
20
+ and **prints the residue it deliberately did not do**, rather than pretending
21
+ completeness. The parts it skips (clone, agent restart, CLAUDE.md, CI workflow)
22
+ are the ones a wrong guess makes worse, and they are exactly what ``coord repo
23
+ doctor`` then verifies.
24
+ """
25
+
26
+ from __future__ import annotations
27
+
28
+ import sys
29
+ from pathlib import Path
30
+
31
+ import click
32
+
33
+ from coord.commands._common import _CONFIG_OPTION, _load_config
34
+
35
+ # Reuse the fleet's own definition of where the tracked config lives (#1779) —
36
+ # `~/src/coord-settings/coord/coordinator.yml`, NOT the `~/.coord/` symlink
37
+ # (#1832): edits must land in the checkout so they can be committed, reviewed
38
+ # and pulled onto the daemon host.
39
+ from coord.fleet_config_health import TRACKED_CONFIG_REL, default_settings_dir
40
+
41
+
42
+ @click.group("repo", help="Add a repo to the fleet, and verify it is actually onboarded.")
43
+ def repo_group() -> None:
44
+ """Repo onboarding (#2220)."""
45
+
46
+
47
+ def _resolve_write_target(explicit: Path | None) -> Path:
48
+ """Where ``coord repo add`` writes.
49
+
50
+ Defaults to the coord-settings checkout's tracked file rather than
51
+ whatever ``resolve_config_path()`` returns, because the live
52
+ ``~/.coord/coordinator.yml`` is a *symlink* into that checkout: writing
53
+ through the symlink produces an untracked, uncommitted change to the
54
+ fleet's governing config with nothing to review and nothing to pull
55
+ (#1779/#1832). Refuses rather than falling back when the checkout is
56
+ absent — a machine with no coord-settings checkout is deliberately not
57
+ allowed to edit the fleet's config.
58
+ """
59
+ if explicit is not None:
60
+ return explicit
61
+ tracked = default_settings_dir() / TRACKED_CONFIG_REL
62
+ if not tracked.exists():
63
+ raise click.ClickException(
64
+ f"no coord-settings checkout at {default_settings_dir()} (expected "
65
+ f"{tracked}). `coord repo add` writes the TRACKED config so the "
66
+ "change can be committed, reviewed and pulled — it will not write "
67
+ "through the ~/.coord symlink (#1832). Clone coord-settings, set "
68
+ "$COORD_SETTINGS_DIR, or pass --config explicitly."
69
+ )
70
+ return tracked
71
+
72
+
73
+ @repo_group.command(
74
+ "add",
75
+ help=(
76
+ "Write a new repo's coordinator.yml entry into the coord-settings "
77
+ "checkout, add it to the named machines, create the `coord` and tier "
78
+ "labels — then print the residue it deliberately did NOT do."
79
+ ),
80
+ )
81
+ @click.argument("name")
82
+ @click.option("--github", "github_slug", required=True, help="owner/repo on GitHub.")
83
+ @click.option(
84
+ "--machines", "machines_csv", default=None,
85
+ help="Comma-separated machine names that should serve this repo.",
86
+ )
87
+ @click.option(
88
+ "--repo-path", "repo_path_tmpl", default=None,
89
+ help=(
90
+ "Path to the clone on each machine. Default: ~/src/<name> — the fleet "
91
+ "convention, and the worker WORKTREE BASE, not a convenience checkout."
92
+ ),
93
+ )
94
+ @click.option(
95
+ "--default-branch", "default_branch_override", default=None,
96
+ help=(
97
+ "Override the default branch instead of reading the real one from "
98
+ "GitHub. Use only when GitHub is unreachable — a default_branch that "
99
+ "disagrees with the repo's real default silently routes worker PRs to "
100
+ "the wrong base."
101
+ ),
102
+ )
103
+ @click.option("--build-command", default=None, help="repos[].build_command.")
104
+ @click.option("--test-command", default=None, help="repos[].test_command.")
105
+ @click.option(
106
+ "--labels/--no-labels", "do_labels", default=True, show_default=True,
107
+ help="Create the `coord` and tier:small/tier:large labels on GitHub.",
108
+ )
109
+ @click.option(
110
+ "--dry-run", is_flag=True, default=False,
111
+ help="Print the edited config and the residue without writing anything.",
112
+ )
113
+ @click.option(
114
+ "--config", "config_path", type=click.Path(path_type=Path), default=None,
115
+ help="coordinator.yml to edit. Default: the coord-settings tracked file.",
116
+ )
117
+ def repo_add( # noqa: PLR0913 — one option per thing the command can set
118
+ name: str,
119
+ github_slug: str,
120
+ machines_csv: str | None,
121
+ repo_path_tmpl: str | None,
122
+ default_branch_override: str | None,
123
+ build_command: str | None,
124
+ test_command: str | None,
125
+ do_labels: bool, # noqa: FBT001
126
+ dry_run: bool, # noqa: FBT001
127
+ config_path: Path | None,
128
+ ) -> None:
129
+ from coord.config import load as load_config # noqa: PLC0415
130
+ from coord.repo_edit import ( # noqa: PLC0415
131
+ RepoEditError,
132
+ add_repo_to_machine,
133
+ insert_repo_entry,
134
+ render_repo_entry,
135
+ )
136
+ from coord.repo_onboard import COORD_LABEL, TIER_LABELS # noqa: PLC0415
137
+
138
+ target = _resolve_write_target(config_path)
139
+ original = target.read_text(encoding="utf-8")
140
+
141
+ try:
142
+ cfg = load_config(target)
143
+ except Exception as exc: # noqa: BLE001
144
+ raise click.ClickException(f"{target} does not currently load: {exc}") from exc
145
+
146
+ if cfg.repo(name) is not None:
147
+ raise click.ClickException(
148
+ f"repo {name!r} already has a repos[] entry in {target} — use "
149
+ f"`coord repo doctor {name}` to find what is actually missing."
150
+ )
151
+
152
+ known = {m.name for m in cfg.machines}
153
+ machines = [m.strip() for m in (machines_csv or "").split(",") if m.strip()]
154
+ unknown = [m for m in machines if m not in known]
155
+ if unknown:
156
+ raise click.ClickException(
157
+ f"unknown machine(s) {unknown} — coordinator.yml has {sorted(known)}"
158
+ )
159
+
160
+ # ── The real default branch, read from GitHub rather than trusted ────
161
+ if default_branch_override:
162
+ default_branch = default_branch_override
163
+ branch_source = "--default-branch (NOT verified against GitHub)"
164
+ else:
165
+ from coord import github_ops # noqa: PLC0415
166
+
167
+ try:
168
+ default_branch = github_ops.get_repo_default_branch(github_slug)
169
+ except Exception as exc: # noqa: BLE001
170
+ raise click.ClickException(
171
+ f"could not read {github_slug}'s default branch from GitHub: "
172
+ f"{exc}. Fix `gh` auth, or pass --default-branch explicitly "
173
+ "(and know that an unverified value silently routes worker PRs "
174
+ "to the wrong base)."
175
+ ) from exc
176
+ branch_source = f"read from GitHub ({github_slug})"
177
+
178
+ entry = render_repo_entry(
179
+ name, github_slug, default_branch,
180
+ build_command=build_command, test_command=test_command,
181
+ )
182
+ try:
183
+ updated = insert_repo_entry(original, entry)
184
+ path_tmpl = repo_path_tmpl or f"~/src/{name}"
185
+ for machine in machines:
186
+ updated = add_repo_to_machine(updated, machine, name, path_tmpl)
187
+ except RepoEditError as exc:
188
+ raise click.ClickException(str(exc)) from exc
189
+
190
+ # ── Seatbelt: the edit must produce a config that LOADS and contains
191
+ # what we think it contains. A line-level edit that "worked" but left a
192
+ # repo unroutable is worse than no command at all (#2220's whole thesis).
193
+ import tempfile # noqa: PLC0415
194
+
195
+ with tempfile.NamedTemporaryFile(
196
+ "w", suffix=".yml", delete=False, encoding="utf-8"
197
+ ) as fh:
198
+ fh.write(updated)
199
+ probe_path = Path(fh.name)
200
+ try:
201
+ new_cfg = load_config(probe_path)
202
+ except Exception as exc: # noqa: BLE001
203
+ raise click.ClickException(
204
+ f"refusing to write: the edited config does not parse ({exc}). "
205
+ f"{target} is unchanged."
206
+ ) from exc
207
+ finally:
208
+ probe_path.unlink(missing_ok=True)
209
+
210
+ if new_cfg.repo(name) is None:
211
+ raise click.ClickException(
212
+ f"refusing to write: the edit parsed but repo {name!r} is not in "
213
+ f"the result. {target} is unchanged."
214
+ )
215
+ landed = [m.name for m in new_cfg.machines if name in (m.repos or [])]
216
+ missing = [m for m in machines if m not in landed]
217
+ if missing:
218
+ raise click.ClickException(
219
+ f"refusing to write: the edit parsed but machine(s) {missing} do "
220
+ f"not list {name!r}. {target} is unchanged."
221
+ )
222
+
223
+ if dry_run:
224
+ click.echo(f"--dry-run: would write {target}")
225
+ click.echo(updated)
226
+ else:
227
+ target.write_text(updated, encoding="utf-8")
228
+ click.echo(f"✓ wrote repos[{name}] to {target}")
229
+ click.echo(f" default_branch: {default_branch} ({branch_source})")
230
+ if landed:
231
+ click.echo(f" machines: {', '.join(landed)}")
232
+
233
+ # ── Labels ───────────────────────────────────────────────────────────
234
+ created: list[str] = []
235
+ label_failures: list[str] = []
236
+ if do_labels and not dry_run:
237
+ from coord import github_ops # noqa: PLC0415
238
+
239
+ for label, colour, desc in (
240
+ (COORD_LABEL, "0e8a16", "Managed by the coord Pipeline"),
241
+ (TIER_LABELS[0], "c2e0c6", "Route to the small/cheap model"),
242
+ (TIER_LABELS[1], "5319e7", "Route to the large model"),
243
+ ):
244
+ try:
245
+ github_ops.create_label(
246
+ github_slug, label, color=colour, description=desc
247
+ )
248
+ created.append(label)
249
+ except Exception as exc: # noqa: BLE001
250
+ label_failures.append(f"{label}: {exc}")
251
+ if created:
252
+ click.echo(f"✓ labels ensured on {github_slug}: {', '.join(created)}")
253
+ for failure in label_failures:
254
+ click.echo(f"⚠ label creation failed — {failure}", err=True)
255
+
256
+ # ── Residue: what this command deliberately did NOT do ───────────────
257
+ click.echo("")
258
+ click.echo("NOT DONE — these need a human, and `coord repo doctor` checks each:")
259
+ tracked = default_settings_dir() / TRACKED_CONFIG_REL
260
+ if target == tracked:
261
+ click.echo(
262
+ f" 1. commit + push in {default_settings_dir()}, then `git pull` on "
263
+ "the daemon host — the fleet runs the COMMITTED config"
264
+ )
265
+ else:
266
+ click.echo(
267
+ f" 1. commit + push {target} wherever it is tracked, then `git "
268
+ "pull` on the daemon host — the fleet runs the COMMITTED config"
269
+ )
270
+ for machine in machines or ["<each machine>"]:
271
+ click.echo(
272
+ f" 2. clone the repo to {repo_path_tmpl or f'~/src/{name}'} on "
273
+ f"{machine} — this is the worker WORKTREE BASE"
274
+ )
275
+ click.echo(
276
+ " 3. RESTART coord-agent on each of those machines. The repo list is "
277
+ "frozen at process start (#2219), so a running agent will refuse every "
278
+ "dispatch for this repo while config says it is supported. This cannot "
279
+ "run while headless workers are live."
280
+ )
281
+ click.echo(
282
+ " 4. add a CLAUDE.md to the repo — the Test agent auto-loads it and "
283
+ "the adversarial review prompt is assembled from it; without one, "
284
+ "reviews enforce nothing."
285
+ )
286
+ click.echo(
287
+ " 5. make sure at least one CI workflow triggers on `pull_request`. "
288
+ "If none does, expects_checks() reads 'CI exists' while zero checks "
289
+ "arrive and `checks_absent` blocks EVERY merge in this repo, forever."
290
+ )
291
+ click.echo(
292
+ " 6. set `test_command`/`ci_command`, `smoke_tests.capability_rules` "
293
+ "for this repo's paths, and (if it joins the oracle loop) "
294
+ "`acceptance.drivers`."
295
+ )
296
+ click.echo(
297
+ " 7. graphify build + `graphify hook install` + `core.hooksPath`, in "
298
+ "that order, per machine (docs/GRAPHIFY_SETUP.md)."
299
+ )
300
+ click.echo("")
301
+ click.echo(f"Then: coord repo doctor {name}")
302
+
303
+
304
+ @repo_group.command(
305
+ "doctor",
306
+ help=(
307
+ "Probe all five onboarding layers for a repo and report per-layer "
308
+ "status. Reads LIVE state — each agent's /health repo list, the labels "
309
+ "that exist on GitHub, whether any workflow triggers on pull_request — "
310
+ "not config. Exits non-zero on any CRIT so it can gate."
311
+ ),
312
+ )
313
+ @click.argument("name")
314
+ @_CONFIG_OPTION
315
+ @click.option(
316
+ "--timeout", default=3.0, show_default=True, type=float,
317
+ help="Per-machine /health timeout (seconds).",
318
+ )
319
+ @click.option(
320
+ "--github/--no-github", "probe_github", default=True, show_default=True,
321
+ help="Probe GitHub (labels, workflows, CLAUDE.md). Off makes this offline.",
322
+ )
323
+ @click.option(
324
+ "--verbose", "-v", is_flag=True, default=False,
325
+ help="Show passing checks too, not just the residue.",
326
+ )
327
+ def repo_doctor(
328
+ name: str,
329
+ config_path: Path,
330
+ timeout: float,
331
+ probe_github: bool, # noqa: FBT001
332
+ verbose: bool, # noqa: FBT001
333
+ ) -> None:
334
+ from coord import repo_onboard # noqa: PLC0415
335
+ from coord.network import check_all # noqa: PLC0415
336
+
337
+ cfg = _load_config(config_path)
338
+
339
+ repo = cfg.repo(name)
340
+ if repo is None:
341
+ known = [r.name for r in cfg.repos]
342
+ click.echo(
343
+ f"error: repo {name!r} is not in coordinator.yml (have: {known})",
344
+ err=True,
345
+ )
346
+ # Still render the report — "config.repo_missing" IS the finding, and
347
+ # a caller gating on this deserves the same structured output.
348
+ facts = repo_onboard.RepoFacts(name=name, configured=False)
349
+ for line in repo_onboard.format_report(
350
+ repo_onboard.evaluate(facts), verbose=verbose
351
+ ):
352
+ click.echo(line)
353
+ sys.exit(1)
354
+
355
+ machines = [m for m in cfg.machines if name in (m.repos or [])]
356
+ statuses = check_all(machines, timeout=timeout) if machines else []
357
+
358
+ facts = repo_onboard.gather_facts(
359
+ cfg, name,
360
+ statuses=statuses,
361
+ probe_github=probe_github,
362
+ local_clone=repo_onboard.local_clone_path(cfg, name),
363
+ )
364
+ report = repo_onboard.evaluate(facts)
365
+ for line in repo_onboard.format_report(report, verbose=verbose):
366
+ click.echo(line)
367
+ if not report.ok:
368
+ sys.exit(1)