code-coordinator 0.5.46__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 (776) hide show
  1. code_coordinator-0.5.46/.claude/commands/board.md +17 -0
  2. code_coordinator-0.5.46/.claude/commands/complete-session.md +31 -0
  3. code_coordinator-0.5.46/.claude/commands/coordinator.md +278 -0
  4. code_coordinator-0.5.46/.githooks/_lib.sh +42 -0
  5. code_coordinator-0.5.46/.githooks/post-checkout +90 -0
  6. code_coordinator-0.5.46/.githooks/post-commit +19 -0
  7. code_coordinator-0.5.46/.githooks/post-merge +19 -0
  8. code_coordinator-0.5.46/.github/workflows/auto-release.yml +263 -0
  9. code_coordinator-0.5.46/.github/workflows/cargo-test.yml +64 -0
  10. code_coordinator-0.5.46/.github/workflows/publish.yml +440 -0
  11. code_coordinator-0.5.46/.github/workflows/release-tui.yml +239 -0
  12. code_coordinator-0.5.46/.github/workflows/test.yml +280 -0
  13. code_coordinator-0.5.46/.gitignore +20 -0
  14. code_coordinator-0.5.46/CLAUDE.md +207 -0
  15. code_coordinator-0.5.46/GOAL.md +149 -0
  16. code_coordinator-0.5.46/LICENSE +110 -0
  17. code_coordinator-0.5.46/MANIFEST.in +5 -0
  18. code_coordinator-0.5.46/PKG-INFO +625 -0
  19. code_coordinator-0.5.46/README.md +585 -0
  20. code_coordinator-0.5.46/code_coordinator.egg-info/PKG-INFO +625 -0
  21. code_coordinator-0.5.46/code_coordinator.egg-info/SOURCES.txt +774 -0
  22. code_coordinator-0.5.46/code_coordinator.egg-info/dependency_links.txt +1 -0
  23. code_coordinator-0.5.46/code_coordinator.egg-info/entry_points.txt +2 -0
  24. code_coordinator-0.5.46/code_coordinator.egg-info/requires.txt +25 -0
  25. code_coordinator-0.5.46/code_coordinator.egg-info/scm_file_list.json +756 -0
  26. code_coordinator-0.5.46/code_coordinator.egg-info/scm_version.json +8 -0
  27. code_coordinator-0.5.46/code_coordinator.egg-info/top_level.txt +1 -0
  28. code_coordinator-0.5.46/coord/__init__.py +176 -0
  29. code_coordinator-0.5.46/coord/_board_mapping.py +229 -0
  30. code_coordinator-0.5.46/coord/acceptance.py +468 -0
  31. code_coordinator-0.5.46/coord/acceptance_drivers.py +632 -0
  32. code_coordinator-0.5.46/coord/agent.py +7517 -0
  33. code_coordinator-0.5.46/coord/agent_app.py +1555 -0
  34. code_coordinator-0.5.46/coord/agent_update.py +417 -0
  35. code_coordinator-0.5.46/coord/agents/opencode/.gitignore +13 -0
  36. code_coordinator-0.5.46/coord/agents/opencode/agents/work.md +129 -0
  37. code_coordinator-0.5.46/coord/agents/opencode/routing.jsonc +49 -0
  38. code_coordinator-0.5.46/coord/audit.py +301 -0
  39. code_coordinator-0.5.46/coord/auto_loop.py +1440 -0
  40. code_coordinator-0.5.46/coord/board_bool_guard.py +72 -0
  41. code_coordinator-0.5.46/coord/board_service.py +141 -0
  42. code_coordinator-0.5.46/coord/board_wire.py +309 -0
  43. code_coordinator-0.5.46/coord/brain.py +581 -0
  44. code_coordinator-0.5.46/coord/branch_model.py +214 -0
  45. code_coordinator-0.5.46/coord/cargo_cache.py +258 -0
  46. code_coordinator-0.5.46/coord/ci_github.py +386 -0
  47. code_coordinator-0.5.46/coord/ci_store.py +560 -0
  48. code_coordinator-0.5.46/coord/claim.py +353 -0
  49. code_coordinator-0.5.46/coord/cli.py +454 -0
  50. code_coordinator-0.5.46/coord/client.py +610 -0
  51. code_coordinator-0.5.46/coord/commands/__init__.py +1 -0
  52. code_coordinator-0.5.46/coord/commands/_common.py +329 -0
  53. code_coordinator-0.5.46/coord/commands/acceptance.py +916 -0
  54. code_coordinator-0.5.46/coord/commands/agent_ops.py +1339 -0
  55. code_coordinator-0.5.46/coord/commands/audit.py +131 -0
  56. code_coordinator-0.5.46/coord/commands/chat.py +320 -0
  57. code_coordinator-0.5.46/coord/commands/dispatch.py +1780 -0
  58. code_coordinator-0.5.46/coord/commands/dispatch_workers.py +4894 -0
  59. code_coordinator-0.5.46/coord/commands/drive.py +616 -0
  60. code_coordinator-0.5.46/coord/commands/drive_queue.py +1203 -0
  61. code_coordinator-0.5.46/coord/commands/gate_a.py +217 -0
  62. code_coordinator-0.5.46/coord/commands/gates.py +89 -0
  63. code_coordinator-0.5.46/coord/commands/issues.py +681 -0
  64. code_coordinator-0.5.46/coord/commands/lifecycle.py +513 -0
  65. code_coordinator-0.5.46/coord/commands/merge.py +1900 -0
  66. code_coordinator-0.5.46/coord/commands/milestone.py +2081 -0
  67. code_coordinator-0.5.46/coord/commands/plan_followup.py +1243 -0
  68. code_coordinator-0.5.46/coord/commands/plans.py +156 -0
  69. code_coordinator-0.5.46/coord/commands/release.py +2232 -0
  70. code_coordinator-0.5.46/coord/commands/report.py +341 -0
  71. code_coordinator-0.5.46/coord/commands/review.py +1523 -0
  72. code_coordinator-0.5.46/coord/commands/scorecard.py +252 -0
  73. code_coordinator-0.5.46/coord/commands/sessions.py +1930 -0
  74. code_coordinator-0.5.46/coord/commands/setup.py +576 -0
  75. code_coordinator-0.5.46/coord/commands/status.py +2089 -0
  76. code_coordinator-0.5.46/coord/commands/terminal.py +385 -0
  77. code_coordinator-0.5.46/coord/commands/test_gate.py +775 -0
  78. code_coordinator-0.5.46/coord/commands/tui.py +288 -0
  79. code_coordinator-0.5.46/coord/comments.py +718 -0
  80. code_coordinator-0.5.46/coord/config.py +3032 -0
  81. code_coordinator-0.5.46/coord/conflict_fix.py +633 -0
  82. code_coordinator-0.5.46/coord/dao.py +483 -0
  83. code_coordinator-0.5.46/coord/dashboard/__init__.py +0 -0
  84. code_coordinator-0.5.46/coord/dashboard/fixture.py +376 -0
  85. code_coordinator-0.5.46/coord/dashboard/index.html +658 -0
  86. code_coordinator-0.5.46/coord/dashboard/server.py +1894 -0
  87. code_coordinator-0.5.46/coord/dashboard/terminal.py +382 -0
  88. code_coordinator-0.5.46/coord/dashboard/webapp/.gitignore +9 -0
  89. code_coordinator-0.5.46/coord/dashboard/webapp/components.json +17 -0
  90. code_coordinator-0.5.46/coord/dashboard/webapp/dist/assets/Gallery-da3qNiIw.js +71 -0
  91. code_coordinator-0.5.46/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +32 -0
  92. code_coordinator-0.5.46/coord/dashboard/webapp/dist/assets/Terminal-skVFCxPU.js +63 -0
  93. code_coordinator-0.5.46/coord/dashboard/webapp/dist/assets/index-DltfZR5f.js +184 -0
  94. code_coordinator-0.5.46/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +1 -0
  95. code_coordinator-0.5.46/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +2 -0
  96. code_coordinator-0.5.46/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
  97. code_coordinator-0.5.46/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
  98. code_coordinator-0.5.46/coord/dashboard/webapp/dist/icons/icon.svg +5 -0
  99. code_coordinator-0.5.46/coord/dashboard/webapp/dist/index.html +38 -0
  100. code_coordinator-0.5.46/coord/dashboard/webapp/dist/manifest.webmanifest +1 -0
  101. code_coordinator-0.5.46/coord/dashboard/webapp/dist/sw.js +1 -0
  102. code_coordinator-0.5.46/coord/dashboard/webapp/dist/workbox-e4022e15.js +1 -0
  103. code_coordinator-0.5.46/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +75 -0
  104. code_coordinator-0.5.46/coord/dashboard/webapp/e2e/deep-link.spec.ts +172 -0
  105. code_coordinator-0.5.46/coord/dashboard/webapp/e2e/fixtureServer.ts +155 -0
  106. code_coordinator-0.5.46/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +113 -0
  107. code_coordinator-0.5.46/coord/dashboard/webapp/e2e/realtime.spec.ts +238 -0
  108. code_coordinator-0.5.46/coord/dashboard/webapp/e2e/shell.spec.ts +309 -0
  109. code_coordinator-0.5.46/coord/dashboard/webapp/e2e/smoke.spec.ts +191 -0
  110. code_coordinator-0.5.46/coord/dashboard/webapp/e2e/terminal.spec.ts +420 -0
  111. code_coordinator-0.5.46/coord/dashboard/webapp/e2e/theme.spec.ts +138 -0
  112. code_coordinator-0.5.46/coord/dashboard/webapp/eslint.config.js +20 -0
  113. code_coordinator-0.5.46/coord/dashboard/webapp/index.html +37 -0
  114. code_coordinator-0.5.46/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +144 -0
  115. code_coordinator-0.5.46/coord/dashboard/webapp/package-lock.json +10584 -0
  116. code_coordinator-0.5.46/coord/dashboard/webapp/package.json +63 -0
  117. code_coordinator-0.5.46/coord/dashboard/webapp/playwright.acceptance.config.ts +166 -0
  118. code_coordinator-0.5.46/coord/dashboard/webapp/playwright.config.ts +93 -0
  119. code_coordinator-0.5.46/coord/dashboard/webapp/postcss.config.js +6 -0
  120. code_coordinator-0.5.46/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
  121. code_coordinator-0.5.46/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
  122. code_coordinator-0.5.46/coord/dashboard/webapp/public/icons/icon.svg +5 -0
  123. code_coordinator-0.5.46/coord/dashboard/webapp/src/App.tsx +140 -0
  124. code_coordinator-0.5.46/coord/dashboard/webapp/src/api/client.ts +199 -0
  125. code_coordinator-0.5.46/coord/dashboard/webapp/src/api/generated.ts +176 -0
  126. code_coordinator-0.5.46/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +52 -0
  127. code_coordinator-0.5.46/coord/dashboard/webapp/src/components/Detail.tsx +800 -0
  128. code_coordinator-0.5.46/coord/dashboard/webapp/src/components/Gallery.tsx +341 -0
  129. code_coordinator-0.5.46/coord/dashboard/webapp/src/components/Home.tsx +435 -0
  130. code_coordinator-0.5.46/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +280 -0
  131. code_coordinator-0.5.46/coord/dashboard/webapp/src/components/PanelHeader.tsx +59 -0
  132. code_coordinator-0.5.46/coord/dashboard/webapp/src/components/PipelineCard.tsx +168 -0
  133. code_coordinator-0.5.46/coord/dashboard/webapp/src/components/SessionCard.tsx +99 -0
  134. code_coordinator-0.5.46/coord/dashboard/webapp/src/components/SessionDetail.tsx +140 -0
  135. code_coordinator-0.5.46/coord/dashboard/webapp/src/components/SessionsList.tsx +81 -0
  136. code_coordinator-0.5.46/coord/dashboard/webapp/src/components/Terminal.tsx +376 -0
  137. code_coordinator-0.5.46/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +81 -0
  138. code_coordinator-0.5.46/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +680 -0
  139. code_coordinator-0.5.46/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +83 -0
  140. code_coordinator-0.5.46/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +271 -0
  141. code_coordinator-0.5.46/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +197 -0
  142. code_coordinator-0.5.46/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +143 -0
  143. code_coordinator-0.5.46/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +106 -0
  144. code_coordinator-0.5.46/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +504 -0
  145. code_coordinator-0.5.46/coord/dashboard/webapp/src/components/ui/badge.tsx +41 -0
  146. code_coordinator-0.5.46/coord/dashboard/webapp/src/components/ui/button.tsx +54 -0
  147. code_coordinator-0.5.46/coord/dashboard/webapp/src/components/ui/card.tsx +55 -0
  148. code_coordinator-0.5.46/coord/dashboard/webapp/src/components/ui/dialog.tsx +99 -0
  149. code_coordinator-0.5.46/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +189 -0
  150. code_coordinator-0.5.46/coord/dashboard/webapp/src/components/ui/empty-state.tsx +35 -0
  151. code_coordinator-0.5.46/coord/dashboard/webapp/src/components/ui/sheet.tsx +123 -0
  152. code_coordinator-0.5.46/coord/dashboard/webapp/src/components/ui/skeleton.tsx +9 -0
  153. code_coordinator-0.5.46/coord/dashboard/webapp/src/components/ui/tabs.tsx +55 -0
  154. code_coordinator-0.5.46/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +78 -0
  155. code_coordinator-0.5.46/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +20 -0
  156. code_coordinator-0.5.46/coord/dashboard/webapp/src/components/ui/toast.tsx +123 -0
  157. code_coordinator-0.5.46/coord/dashboard/webapp/src/components/ui/toaster.tsx +30 -0
  158. code_coordinator-0.5.46/coord/dashboard/webapp/src/components/ui/tooltip.tsx +26 -0
  159. code_coordinator-0.5.46/coord/dashboard/webapp/src/components/ui/use-toast.ts +134 -0
  160. code_coordinator-0.5.46/coord/dashboard/webapp/src/index.css +210 -0
  161. code_coordinator-0.5.46/coord/dashboard/webapp/src/lib/pipeline.ts +29 -0
  162. code_coordinator-0.5.46/coord/dashboard/webapp/src/lib/utils.ts +6 -0
  163. code_coordinator-0.5.46/coord/dashboard/webapp/src/main.tsx +46 -0
  164. code_coordinator-0.5.46/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +112 -0
  165. code_coordinator-0.5.46/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +189 -0
  166. code_coordinator-0.5.46/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +255 -0
  167. code_coordinator-0.5.46/coord/dashboard/webapp/src/realtime/connection.ts +227 -0
  168. code_coordinator-0.5.46/coord/dashboard/webapp/src/realtime/events.ts +100 -0
  169. code_coordinator-0.5.46/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +92 -0
  170. code_coordinator-0.5.46/coord/dashboard/webapp/src/routes/paths.ts +92 -0
  171. code_coordinator-0.5.46/coord/dashboard/webapp/src/shell/ActivityRail.tsx +335 -0
  172. code_coordinator-0.5.46/coord/dashboard/webapp/src/shell/AppShell.tsx +276 -0
  173. code_coordinator-0.5.46/coord/dashboard/webapp/src/shell/ComingSoon.tsx +33 -0
  174. code_coordinator-0.5.46/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +26 -0
  175. code_coordinator-0.5.46/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +33 -0
  176. code_coordinator-0.5.46/coord/dashboard/webapp/src/shell/ShellLayout.tsx +147 -0
  177. code_coordinator-0.5.46/coord/dashboard/webapp/src/shell/StatusBar.tsx +46 -0
  178. code_coordinator-0.5.46/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +520 -0
  179. code_coordinator-0.5.46/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +95 -0
  180. code_coordinator-0.5.46/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +40 -0
  181. code_coordinator-0.5.46/coord/dashboard/webapp/src/shell/breakpoints.ts +87 -0
  182. code_coordinator-0.5.46/coord/dashboard/webapp/src/shell/railItems.ts +105 -0
  183. code_coordinator-0.5.46/coord/dashboard/webapp/src/shell/shellState.ts +174 -0
  184. code_coordinator-0.5.46/coord/dashboard/webapp/src/shell/useRegionFocus.ts +95 -0
  185. code_coordinator-0.5.46/coord/dashboard/webapp/src/test-setup.ts +41 -0
  186. code_coordinator-0.5.46/coord/dashboard/webapp/src/vite-env.d.ts +2 -0
  187. code_coordinator-0.5.46/coord/dashboard/webapp/tailwind.config.js +140 -0
  188. code_coordinator-0.5.46/coord/dashboard/webapp/tsconfig.json +25 -0
  189. code_coordinator-0.5.46/coord/dashboard/webapp/tsconfig.node.json +11 -0
  190. code_coordinator-0.5.46/coord/dashboard/webapp/vite.config.ts +71 -0
  191. code_coordinator-0.5.46/coord/db.py +1076 -0
  192. code_coordinator-0.5.46/coord/dead_end.py +332 -0
  193. code_coordinator-0.5.46/coord/deploy/README.md +33 -0
  194. code_coordinator-0.5.46/coord/deploy/coord-agent.service +89 -0
  195. code_coordinator-0.5.46/coord/deploy/coord-db-backup.service +60 -0
  196. code_coordinator-0.5.46/coord/deploy/coord-db-backup.sh +74 -0
  197. code_coordinator-0.5.46/coord/deploy/coord-db-backup.timer +18 -0
  198. code_coordinator-0.5.46/coord/deploy/coord-drive-queue.service +117 -0
  199. code_coordinator-0.5.46/coord/deploy/coord-drive-queue.timer +39 -0
  200. code_coordinator-0.5.46/coord/deploy/coord-notify.service +48 -0
  201. code_coordinator-0.5.46/coord/deploy/coord-notify.timer +24 -0
  202. code_coordinator-0.5.46/coord/deploy/coord-release-propagate.service +83 -0
  203. code_coordinator-0.5.46/coord/deploy/coord-release-propagate.timer +38 -0
  204. code_coordinator-0.5.46/coord/deploy/coord-release-window.service +119 -0
  205. code_coordinator-0.5.46/coord/deploy/coord-release-window.timer +36 -0
  206. code_coordinator-0.5.46/coord/deploy/coord-serve.service +82 -0
  207. code_coordinator-0.5.46/coord/deploy/coord-web-dist-build.service +43 -0
  208. code_coordinator-0.5.46/coord/deploy/coord-web-dist-build.timer +36 -0
  209. code_coordinator-0.5.46/coord/deploy/coord-web.service +125 -0
  210. code_coordinator-0.5.46/coord/deploy_manifest.py +80 -0
  211. code_coordinator-0.5.46/coord/deploy_units.py +384 -0
  212. code_coordinator-0.5.46/coord/deps.py +115 -0
  213. code_coordinator-0.5.46/coord/diagnose.py +1623 -0
  214. code_coordinator-0.5.46/coord/dispatch.py +1009 -0
  215. code_coordinator-0.5.46/coord/dist_name.py +123 -0
  216. code_coordinator-0.5.46/coord/drive.py +3101 -0
  217. code_coordinator-0.5.46/coord/drive_queue.py +2298 -0
  218. code_coordinator-0.5.46/coord/drive_state.py +870 -0
  219. code_coordinator-0.5.46/coord/events.py +381 -0
  220. code_coordinator-0.5.46/coord/failure_class.py +914 -0
  221. code_coordinator-0.5.46/coord/filelock.py +168 -0
  222. code_coordinator-0.5.46/coord/fleet_config_health.py +300 -0
  223. code_coordinator-0.5.46/coord/freshness.py +206 -0
  224. code_coordinator-0.5.46/coord/gate_a.py +469 -0
  225. code_coordinator-0.5.46/coord/gate_b.py +411 -0
  226. code_coordinator-0.5.46/coord/gate_snapshot.py +385 -0
  227. code_coordinator-0.5.46/coord/gates.py +582 -0
  228. code_coordinator-0.5.46/coord/github_ops.py +1954 -0
  229. code_coordinator-0.5.46/coord/goal.py +125 -0
  230. code_coordinator-0.5.46/coord/graph_health.py +348 -0
  231. code_coordinator-0.5.46/coord/health/__init__.py +69 -0
  232. code_coordinator-0.5.46/coord/health/aggregate.py +129 -0
  233. code_coordinator-0.5.46/coord/health/checks/__init__.py +13 -0
  234. code_coordinator-0.5.46/coord/health/checks/agent_install.py +280 -0
  235. code_coordinator-0.5.46/coord/health/checks/cargo_targets.py +171 -0
  236. code_coordinator-0.5.46/coord/health/checks/claude_binary.py +65 -0
  237. code_coordinator-0.5.46/coord/health/checks/deploy_lane_facts.py +458 -0
  238. code_coordinator-0.5.46/coord/health/checks/disk.py +99 -0
  239. code_coordinator-0.5.46/coord/health/checks/fleet_board.py +89 -0
  240. code_coordinator-0.5.46/coord/health/checks/fleet_deploy_lanes.py +469 -0
  241. code_coordinator-0.5.46/coord/health/checks/fleet_phantom.py +69 -0
  242. code_coordinator-0.5.46/coord/health/checks/fleet_unit_drift.py +151 -0
  243. code_coordinator-0.5.46/coord/health/checks/graph.py +192 -0
  244. code_coordinator-0.5.46/coord/health/checks/plan_usage.py +88 -0
  245. code_coordinator-0.5.46/coord/health/checks/repo_state.py +161 -0
  246. code_coordinator-0.5.46/coord/health/checks/spawned_coord.py +465 -0
  247. code_coordinator-0.5.46/coord/health/checks/timer_active.py +254 -0
  248. code_coordinator-0.5.46/coord/health/checks/toolchain.py +547 -0
  249. code_coordinator-0.5.46/coord/health/checks/unit_drift.py +648 -0
  250. code_coordinator-0.5.46/coord/health/checks/unit_enablement.py +171 -0
  251. code_coordinator-0.5.46/coord/health/checks/worktrees.py +96 -0
  252. code_coordinator-0.5.46/coord/health/cli.py +121 -0
  253. code_coordinator-0.5.46/coord/health/context.py +106 -0
  254. code_coordinator-0.5.46/coord/health/fleet_snapshot.py +477 -0
  255. code_coordinator-0.5.46/coord/health/models.py +250 -0
  256. code_coordinator-0.5.46/coord/health/pypi.py +231 -0
  257. code_coordinator-0.5.46/coord/health/registry.py +240 -0
  258. code_coordinator-0.5.46/coord/health/render.py +82 -0
  259. code_coordinator-0.5.46/coord/health/units.py +60 -0
  260. code_coordinator-0.5.46/coord/hooks.py +106 -0
  261. code_coordinator-0.5.46/coord/housekeeping.py +204 -0
  262. code_coordinator-0.5.46/coord/interactive.py +4286 -0
  263. code_coordinator-0.5.46/coord/issue_store.py +1496 -0
  264. code_coordinator-0.5.46/coord/liveness_auditor.py +293 -0
  265. code_coordinator-0.5.46/coord/machine_pause.py +755 -0
  266. code_coordinator-0.5.46/coord/merge_queue.py +4681 -0
  267. code_coordinator-0.5.46/coord/milestone_chat.py +600 -0
  268. code_coordinator-0.5.46/coord/milestone_dispatch.py +943 -0
  269. code_coordinator-0.5.46/coord/milestone_gate.py +709 -0
  270. code_coordinator-0.5.46/coord/milestone_order.py +840 -0
  271. code_coordinator-0.5.46/coord/mock_author.py +334 -0
  272. code_coordinator-0.5.46/coord/models.py +891 -0
  273. code_coordinator-0.5.46/coord/network.py +269 -0
  274. code_coordinator-0.5.46/coord/new_issue_chat.py +229 -0
  275. code_coordinator-0.5.46/coord/notify.py +3226 -0
  276. code_coordinator-0.5.46/coord/openapi.py +404 -0
  277. code_coordinator-0.5.46/coord/overlap_fence.py +133 -0
  278. code_coordinator-0.5.46/coord/parentage.py +200 -0
  279. code_coordinator-0.5.46/coord/parentage_github.py +58 -0
  280. code_coordinator-0.5.46/coord/pipeline.py +481 -0
  281. code_coordinator-0.5.46/coord/plan_parser.py +266 -0
  282. code_coordinator-0.5.46/coord/plans.py +543 -0
  283. code_coordinator-0.5.46/coord/platform_paths.py +43 -0
  284. code_coordinator-0.5.46/coord/pr_body_lint.py +67 -0
  285. code_coordinator-0.5.46/coord/prereqs.py +533 -0
  286. code_coordinator-0.5.46/coord/progress.py +425 -0
  287. code_coordinator-0.5.46/coord/providers/__init__.py +683 -0
  288. code_coordinator-0.5.46/coord/providers/base.py +218 -0
  289. code_coordinator-0.5.46/coord/providers/claude.py +284 -0
  290. code_coordinator-0.5.46/coord/providers/claude_pty.py +610 -0
  291. code_coordinator-0.5.46/coord/providers/opencode.py +896 -0
  292. code_coordinator-0.5.46/coord/reconcile.py +2233 -0
  293. code_coordinator-0.5.46/coord/refine_chat.py +485 -0
  294. code_coordinator-0.5.46/coord/release_cordon.py +525 -0
  295. code_coordinator-0.5.46/coord/release_propagate.py +1176 -0
  296. code_coordinator-0.5.46/coord/release_verify.py +777 -0
  297. code_coordinator-0.5.46/coord/release_window.py +322 -0
  298. code_coordinator-0.5.46/coord/reports.py +1643 -0
  299. code_coordinator-0.5.46/coord/revalidate.py +1101 -0
  300. code_coordinator-0.5.46/coord/review.py +3317 -0
  301. code_coordinator-0.5.46/coord/scorecard.py +484 -0
  302. code_coordinator-0.5.46/coord/serve_app.py +7192 -0
  303. code_coordinator-0.5.46/coord/skills/update-issue/SKILL.md +93 -0
  304. code_coordinator-0.5.46/coord/smoke.py +1030 -0
  305. code_coordinator-0.5.46/coord/split_work.py +210 -0
  306. code_coordinator-0.5.46/coord/stage_projection.py +650 -0
  307. code_coordinator-0.5.46/coord/state.py +5720 -0
  308. code_coordinator-0.5.46/coord/test_author.py +1064 -0
  309. code_coordinator-0.5.46/coord/test_chat.py +352 -0
  310. code_coordinator-0.5.46/coord/test_orchestrator.py +494 -0
  311. code_coordinator-0.5.46/coord/test_report.py +178 -0
  312. code_coordinator-0.5.46/coord/tui_release.py +271 -0
  313. code_coordinator-0.5.46/coord/usage.py +753 -0
  314. code_coordinator-0.5.46/coord/usage_limits.py +358 -0
  315. code_coordinator-0.5.46/coord/usage_rollup.py +709 -0
  316. code_coordinator-0.5.46/coord/worker_events.py +954 -0
  317. code_coordinator-0.5.46/coordinator.example.yml +325 -0
  318. code_coordinator-0.5.46/deploy/coord-agent.service +89 -0
  319. code_coordinator-0.5.46/deploy/coord-db-backup.service +60 -0
  320. code_coordinator-0.5.46/deploy/coord-db-backup.sh +74 -0
  321. code_coordinator-0.5.46/deploy/coord-db-backup.timer +18 -0
  322. code_coordinator-0.5.46/deploy/coord-drive-queue.service +117 -0
  323. code_coordinator-0.5.46/deploy/coord-drive-queue.timer +39 -0
  324. code_coordinator-0.5.46/deploy/coord-notify.service +48 -0
  325. code_coordinator-0.5.46/deploy/coord-notify.timer +24 -0
  326. code_coordinator-0.5.46/deploy/coord-release-propagate.service +83 -0
  327. code_coordinator-0.5.46/deploy/coord-release-propagate.timer +38 -0
  328. code_coordinator-0.5.46/deploy/coord-release-window.service +119 -0
  329. code_coordinator-0.5.46/deploy/coord-release-window.timer +36 -0
  330. code_coordinator-0.5.46/deploy/coord-serve.service +82 -0
  331. code_coordinator-0.5.46/deploy/coord-web-dist-build.service +43 -0
  332. code_coordinator-0.5.46/deploy/coord-web-dist-build.sh +355 -0
  333. code_coordinator-0.5.46/deploy/coord-web-dist-build.timer +36 -0
  334. code_coordinator-0.5.46/deploy/coord-web-rollback.sh +124 -0
  335. code_coordinator-0.5.46/deploy/coord-web.service +125 -0
  336. code_coordinator-0.5.46/deploy/node-shim.sh +80 -0
  337. code_coordinator-0.5.46/docs/AGENT_OPERATIONS.md +1589 -0
  338. code_coordinator-0.5.46/docs/ARCHITECTURE.md +264 -0
  339. code_coordinator-0.5.46/docs/ARCH_SECURITY_GATES.md +348 -0
  340. code_coordinator-0.5.46/docs/COCKPIT.md +147 -0
  341. code_coordinator-0.5.46/docs/CONTROL_CENTER.md +432 -0
  342. code_coordinator-0.5.46/docs/CROSS_PLATFORM.md +285 -0
  343. code_coordinator-0.5.46/docs/CUSTOMER_PORTAL.md +292 -0
  344. code_coordinator-0.5.46/docs/DRIVE_QUEUE.md +538 -0
  345. code_coordinator-0.5.46/docs/EPHEMERAL_WORKERS.md +191 -0
  346. code_coordinator-0.5.46/docs/FORGE_MIGRATION.md +236 -0
  347. code_coordinator-0.5.46/docs/GRAPHIFY_SETUP.md +165 -0
  348. code_coordinator-0.5.46/docs/ISSUE_GUIDANCE.md +101 -0
  349. code_coordinator-0.5.46/docs/MAC_MINI.md +216 -0
  350. code_coordinator-0.5.46/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +224 -0
  351. code_coordinator-0.5.46/docs/OPENCODE_VERIFICATION.md +591 -0
  352. code_coordinator-0.5.46/docs/OPERATING_GOTCHAS.md +789 -0
  353. code_coordinator-0.5.46/docs/ORACLE_LOOP.md +399 -0
  354. code_coordinator-0.5.46/docs/PHONE_WEBAPP.md +707 -0
  355. code_coordinator-0.5.46/docs/PIPELINE_V2.md +200 -0
  356. code_coordinator-0.5.46/docs/PLATFORM_EVOLUTION.md +306 -0
  357. code_coordinator-0.5.46/docs/SECOND_BACKEND.md +151 -0
  358. code_coordinator-0.5.46/docs/STORE_SERVICE.md +186 -0
  359. code_coordinator-0.5.46/docs/TEST_FIRST_BUG_LANE.md +185 -0
  360. code_coordinator-0.5.46/docs/WEB_CONTROL_CENTER.md +275 -0
  361. code_coordinator-0.5.46/docs/mocks/web/README.md +48 -0
  362. code_coordinator-0.5.46/docs/mocks/web/_tokens.css +92 -0
  363. code_coordinator-0.5.46/docs/mocks/web/issue-detail.html +495 -0
  364. code_coordinator-0.5.46/docs/mocks/web/pipeline-narrow.html +489 -0
  365. code_coordinator-0.5.46/docs/mocks/web/pipeline-wide.html +676 -0
  366. code_coordinator-0.5.46/graphify-out/.gitignore +9 -0
  367. code_coordinator-0.5.46/install-agent.sh +233 -0
  368. code_coordinator-0.5.46/pyproject.toml +175 -0
  369. code_coordinator-0.5.46/scripts/audit_review_verdict_overrides.py +181 -0
  370. code_coordinator-0.5.46/scripts/azure-workers/bootstrap-shared.sh +147 -0
  371. code_coordinator-0.5.46/scripts/azure-workers/build-worker-image.sh +243 -0
  372. code_coordinator-0.5.46/scripts/azure-workers/coordinator-machine.py +182 -0
  373. code_coordinator-0.5.46/scripts/azure-workers/epic-down.sh +184 -0
  374. code_coordinator-0.5.46/scripts/azure-workers/epic-up.sh +418 -0
  375. code_coordinator-0.5.46/scripts/azure-workers/preflight.sh +262 -0
  376. code_coordinator-0.5.46/scripts/azure-workers/provision-worker.sh +229 -0
  377. code_coordinator-0.5.46/scripts/azure-workers/scrub-and-generalize.sh +83 -0
  378. code_coordinator-0.5.46/scripts/azure-workers/tailnet-acl.hujson +80 -0
  379. code_coordinator-0.5.46/scripts/azure-workers/verify-github-token.sh +156 -0
  380. code_coordinator-0.5.46/scripts/codegen.py +278 -0
  381. code_coordinator-0.5.46/scripts/coord-test-runner.sh +500 -0
  382. code_coordinator-0.5.46/scripts/drive-batch.sh +494 -0
  383. code_coordinator-0.5.46/scripts/gen_board_fixture.py +216 -0
  384. code_coordinator-0.5.46/scripts/next_release_tag.py +446 -0
  385. code_coordinator-0.5.46/scripts/run_tests_without_gh.sh +69 -0
  386. code_coordinator-0.5.46/scripts/smoke_437_interactive.py +266 -0
  387. code_coordinator-0.5.46/scripts/verify_878_review_capture.py +260 -0
  388. code_coordinator-0.5.46/scripts/verify_release_published.py +385 -0
  389. code_coordinator-0.5.46/scripts/verify_release_wheel.py +196 -0
  390. code_coordinator-0.5.46/setup.cfg +4 -0
  391. code_coordinator-0.5.46/tests/SMOKE_SET.md +146 -0
  392. code_coordinator-0.5.46/tests/__init__.py +0 -0
  393. code_coordinator-0.5.46/tests/acceptance/ms-33/audit_1039.rs +430 -0
  394. code_coordinator-0.5.46/tests/acceptance/ms-33/contract.md +276 -0
  395. code_coordinator-0.5.46/tests/acceptance/ms-33/manifest.yml +26 -0
  396. code_coordinator-0.5.46/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +40 -0
  397. code_coordinator-0.5.46/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +40 -0
  398. code_coordinator-0.5.46/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +40 -0
  399. code_coordinator-0.5.46/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +40 -0
  400. code_coordinator-0.5.46/tests/acceptance/ms-37/conftest.py +105 -0
  401. code_coordinator-0.5.46/tests/acceptance/ms-37/contract.md +98 -0
  402. code_coordinator-0.5.46/tests/acceptance/ms-37/manifest.yml +67 -0
  403. code_coordinator-0.5.46/tests/acceptance/ms-37/test_usage_cli_1115.py +333 -0
  404. code_coordinator-0.5.46/tests/acceptance/ms-37/test_usage_core_1118.py +392 -0
  405. code_coordinator-0.5.46/tests/acceptance/ms-38/contract.md +356 -0
  406. code_coordinator-0.5.46/tests/acceptance/ms-38/manifest.yml +77 -0
  407. code_coordinator-0.5.46/tests/acceptance/ms-38/mocks/plans-base.screen +40 -0
  408. code_coordinator-0.5.46/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +40 -0
  409. code_coordinator-0.5.46/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +40 -0
  410. code_coordinator-0.5.46/tests/acceptance/ms-38/mocks/plans-palette.screen +40 -0
  411. code_coordinator-0.5.46/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +40 -0
  412. code_coordinator-0.5.46/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +40 -0
  413. code_coordinator-0.5.46/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +40 -0
  414. code_coordinator-0.5.46/tests/acceptance/ms-38/plans_detail_1122.rs +417 -0
  415. code_coordinator-0.5.46/tests/acceptance/ms-38/plans_help_1124.rs +399 -0
  416. code_coordinator-0.5.46/tests/acceptance/ms-38/plans_rightclick_1123.rs +380 -0
  417. code_coordinator-0.5.46/tests/acceptance/ms-51/contract.md +155 -0
  418. code_coordinator-0.5.46/tests/acceptance/ms-51/home-active-extended.spec.ts +411 -0
  419. code_coordinator-0.5.46/tests/acceptance/ms-51/home-active.spec.ts +411 -0
  420. code_coordinator-0.5.46/tests/acceptance/ms-51/manifest.yml +90 -0
  421. code_coordinator-0.5.46/tests/acceptance/ms-51/mocks/home-active.html +212 -0
  422. code_coordinator-0.5.46/tests/acceptance/ms-51/tsconfig.json +39 -0
  423. code_coordinator-0.5.46/tests/acceptance/ms-example/mocks/home-active.html +268 -0
  424. code_coordinator-0.5.46/tests/conftest.py +371 -0
  425. code_coordinator-0.5.46/tests/fixtures/board-pipeline-basic.json +327 -0
  426. code_coordinator-0.5.46/tests/fixtures/board-pipeline-terminal-gates.json +139 -0
  427. code_coordinator-0.5.46/tests/fixtures/opencode_run_failure_sample.jsonl +5 -0
  428. code_coordinator-0.5.46/tests/fixtures/opencode_run_sample.jsonl +12 -0
  429. code_coordinator-0.5.46/tests/fixtures/playwright/all_pass.json +253 -0
  430. code_coordinator-0.5.46/tests/fixtures/playwright/global_setup_crash.json +84 -0
  431. code_coordinator-0.5.46/tests/fixtures/playwright/mixed_fail.json +259 -0
  432. code_coordinator-0.5.46/tests/fixtures/playwright/retry_then_pass.json +195 -0
  433. code_coordinator-0.5.46/tests/fixtures/playwright/retry_then_pass.junit.xml +11 -0
  434. code_coordinator-0.5.46/tests/fixtures/playwright/skip.json +258 -0
  435. code_coordinator-0.5.46/tests/fixtures/playwright/truncated.json +154 -0
  436. code_coordinator-0.5.46/tests/fixtures/test_report/cargo_compile_error.txt +33 -0
  437. code_coordinator-0.5.46/tests/fixtures/test_report/cargo_multi_target_failures.txt +63 -0
  438. code_coordinator-0.5.46/tests/fixtures/test_report/cargo_no_parseable_failures.txt +9 -0
  439. code_coordinator-0.5.46/tests/fixtures/test_report/pytest_collection_error.txt +16 -0
  440. code_coordinator-0.5.46/tests/fixtures/test_report/pytest_error_string_in_body.txt +12 -0
  441. code_coordinator-0.5.46/tests/fixtures/test_report/pytest_internal_error.txt +55 -0
  442. code_coordinator-0.5.46/tests/fixtures/test_report/pytest_mixed_failures.txt +25 -0
  443. code_coordinator-0.5.46/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  444. code_coordinator-0.5.46/tests/test_acceptance.py +518 -0
  445. code_coordinator-0.5.46/tests/test_acceptance_drivers.py +666 -0
  446. code_coordinator-0.5.46/tests/test_agent.py +4923 -0
  447. code_coordinator-0.5.46/tests/test_agent_api_error.py +349 -0
  448. code_coordinator-0.5.46/tests/test_agent_app.py +730 -0
  449. code_coordinator-0.5.46/tests/test_agent_branch_base.py +641 -0
  450. code_coordinator-0.5.46/tests/test_agent_branch_capture.py +391 -0
  451. code_coordinator-0.5.46/tests/test_agent_config_free_1712.py +247 -0
  452. code_coordinator-0.5.46/tests/test_agent_deploy_units_endpoint.py +208 -0
  453. code_coordinator-0.5.46/tests/test_agent_dirty_worktree.py +545 -0
  454. code_coordinator-0.5.46/tests/test_agent_graph_self_heal.py +435 -0
  455. code_coordinator-0.5.46/tests/test_agent_health_h3.py +120 -0
  456. code_coordinator-0.5.46/tests/test_agent_push_failure.py +261 -0
  457. code_coordinator-0.5.46/tests/test_agent_reap.py +493 -0
  458. code_coordinator-0.5.46/tests/test_agent_repos_and_pull.py +228 -0
  459. code_coordinator-0.5.46/tests/test_agent_restart_services_endpoint.py +141 -0
  460. code_coordinator-0.5.46/tests/test_agent_startup_diagnostics.py +129 -0
  461. code_coordinator-0.5.46/tests/test_agent_update.py +2607 -0
  462. code_coordinator-0.5.46/tests/test_agent_update_bluegreen.py +549 -0
  463. code_coordinator-0.5.46/tests/test_agent_usage_limit.py +316 -0
  464. code_coordinator-0.5.46/tests/test_agent_zero_commit.py +418 -0
  465. code_coordinator-0.5.46/tests/test_approve_reject_plan.py +669 -0
  466. code_coordinator-0.5.46/tests/test_approve_usage_gate.py +135 -0
  467. code_coordinator-0.5.46/tests/test_assignment_already_recorded_daemon.py +88 -0
  468. code_coordinator-0.5.46/tests/test_audit_log.py +446 -0
  469. code_coordinator-0.5.46/tests/test_audit_outcome.py +435 -0
  470. code_coordinator-0.5.46/tests/test_audit_query.py +136 -0
  471. code_coordinator-0.5.46/tests/test_auto_loop.py +2470 -0
  472. code_coordinator-0.5.46/tests/test_auto_release_publish_2035.py +522 -0
  473. code_coordinator-0.5.46/tests/test_base_checkout_restore.py +507 -0
  474. code_coordinator-0.5.46/tests/test_board_cap_762.py +268 -0
  475. code_coordinator-0.5.46/tests/test_board_fixture.py +153 -0
  476. code_coordinator-0.5.46/tests/test_board_read_path.py +1286 -0
  477. code_coordinator-0.5.46/tests/test_board_service.py +171 -0
  478. code_coordinator-0.5.46/tests/test_board_state.py +1696 -0
  479. code_coordinator-0.5.46/tests/test_board_wire.py +306 -0
  480. code_coordinator-0.5.46/tests/test_brain.py +1050 -0
  481. code_coordinator-0.5.46/tests/test_branch_model.py +202 -0
  482. code_coordinator-0.5.46/tests/test_build_worker_image_env_update.py +177 -0
  483. code_coordinator-0.5.46/tests/test_cargo_cache.py +450 -0
  484. code_coordinator-0.5.46/tests/test_ci_acceptance_gate_1950.py +114 -0
  485. code_coordinator-0.5.46/tests/test_ci_store.py +1446 -0
  486. code_coordinator-0.5.46/tests/test_claim.py +756 -0
  487. code_coordinator-0.5.46/tests/test_cli_acceptance.py +1624 -0
  488. code_coordinator-0.5.46/tests/test_cli_assign.py +2389 -0
  489. code_coordinator-0.5.46/tests/test_cli_assign_interactive_oracle_gate.py +252 -0
  490. code_coordinator-0.5.46/tests/test_cli_assign_interactive_remote.py +1726 -0
  491. code_coordinator-0.5.46/tests/test_cli_assign_provider.py +571 -0
  492. code_coordinator-0.5.46/tests/test_cli_audit.py +84 -0
  493. code_coordinator-0.5.46/tests/test_cli_chat_continue.py +324 -0
  494. code_coordinator-0.5.46/tests/test_cli_diagnose_config_provenance.py +156 -0
  495. code_coordinator-0.5.46/tests/test_cli_diagnose_graph.py +125 -0
  496. code_coordinator-0.5.46/tests/test_cli_doctor.py +689 -0
  497. code_coordinator-0.5.46/tests/test_cli_doctor_config_free_1801.py +444 -0
  498. code_coordinator-0.5.46/tests/test_cli_doctor_config_mismatch_1712.py +213 -0
  499. code_coordinator-0.5.46/tests/test_cli_drive.py +170 -0
  500. code_coordinator-0.5.46/tests/test_cli_drive_queue.py +1509 -0
  501. code_coordinator-0.5.46/tests/test_cli_escalate.py +162 -0
  502. code_coordinator-0.5.46/tests/test_cli_fix_headless_review.py +577 -0
  503. code_coordinator-0.5.46/tests/test_cli_gate_a.py +163 -0
  504. code_coordinator-0.5.46/tests/test_cli_install_drift.py +255 -0
  505. code_coordinator-0.5.46/tests/test_cli_install_skills.py +283 -0
  506. code_coordinator-0.5.46/tests/test_cli_issue_create_label.py +427 -0
  507. code_coordinator-0.5.46/tests/test_cli_issue_reopen.py +251 -0
  508. code_coordinator-0.5.46/tests/test_cli_merge.py +2918 -0
  509. code_coordinator-0.5.46/tests/test_cli_milestone_assign.py +617 -0
  510. code_coordinator-0.5.46/tests/test_cli_milestone_capture.py +181 -0
  511. code_coordinator-0.5.46/tests/test_cli_milestone_chat_add_child.py +139 -0
  512. code_coordinator-0.5.46/tests/test_cli_milestone_dispatch.py +635 -0
  513. code_coordinator-0.5.46/tests/test_cli_milestone_gate_b.py +215 -0
  514. code_coordinator-0.5.46/tests/test_cli_milestone_gate_c.py +209 -0
  515. code_coordinator-0.5.46/tests/test_cli_milestone_order.py +1187 -0
  516. code_coordinator-0.5.46/tests/test_cli_milestone_remove_and_issue_close.py +601 -0
  517. code_coordinator-0.5.46/tests/test_cli_milestone_ship.py +302 -0
  518. code_coordinator-0.5.46/tests/test_cli_network.py +588 -0
  519. code_coordinator-0.5.46/tests/test_cli_new_issue_chat.py +110 -0
  520. code_coordinator-0.5.46/tests/test_cli_plans.py +782 -0
  521. code_coordinator-0.5.46/tests/test_cli_pull_artifact.py +537 -0
  522. code_coordinator-0.5.46/tests/test_cli_queue.py +156 -0
  523. code_coordinator-0.5.46/tests/test_cli_reattach_sessions.py +1316 -0
  524. code_coordinator-0.5.46/tests/test_cli_refine_board.py +113 -0
  525. code_coordinator-0.5.46/tests/test_cli_release_preflight.py +141 -0
  526. code_coordinator-0.5.46/tests/test_cli_release_propagate.py +1298 -0
  527. code_coordinator-0.5.46/tests/test_cli_release_window.py +596 -0
  528. code_coordinator-0.5.46/tests/test_cli_scorecard.py +307 -0
  529. code_coordinator-0.5.46/tests/test_cli_set_review_findings.py +175 -0
  530. code_coordinator-0.5.46/tests/test_cli_status_advisory_terminal.py +141 -0
  531. code_coordinator-0.5.46/tests/test_cli_status_merge_queue.py +107 -0
  532. code_coordinator-0.5.46/tests/test_cli_status_provider.py +190 -0
  533. code_coordinator-0.5.46/tests/test_cli_status_review_finalizing.py +80 -0
  534. code_coordinator-0.5.46/tests/test_cli_status_test_failed_tag.py +150 -0
  535. code_coordinator-0.5.46/tests/test_cli_status_usage_limit.py +121 -0
  536. code_coordinator-0.5.46/tests/test_cli_sync_comments_873.py +96 -0
  537. code_coordinator-0.5.46/tests/test_cli_test_plan.py +529 -0
  538. code_coordinator-0.5.46/tests/test_cli_track.py +108 -0
  539. code_coordinator-0.5.46/tests/test_cli_tui_update.py +465 -0
  540. code_coordinator-0.5.46/tests/test_cli_wait.py +253 -0
  541. code_coordinator-0.5.46/tests/test_client_base_install.py +242 -0
  542. code_coordinator-0.5.46/tests/test_comments.py +216 -0
  543. code_coordinator-0.5.46/tests/test_completion_summary.py +354 -0
  544. code_coordinator-0.5.46/tests/test_config.py +1509 -0
  545. code_coordinator-0.5.46/tests/test_config_acceptance.py +826 -0
  546. code_coordinator-0.5.46/tests/test_config_audit.py +86 -0
  547. code_coordinator-0.5.46/tests/test_config_pricing.py +147 -0
  548. code_coordinator-0.5.46/tests/test_config_usage_gate.py +90 -0
  549. code_coordinator-0.5.46/tests/test_conflict_fix.py +694 -0
  550. code_coordinator-0.5.46/tests/test_conflict_fix_semantic.py +504 -0
  551. code_coordinator-0.5.46/tests/test_coord_test.py +809 -0
  552. code_coordinator-0.5.46/tests/test_coord_test_runner_routing.py +193 -0
  553. code_coordinator-0.5.46/tests/test_coord_test_runner_toolchain.py +313 -0
  554. code_coordinator-0.5.46/tests/test_coord_web_sse_restart_live.py +165 -0
  555. code_coordinator-0.5.46/tests/test_coordinator_machine.py +222 -0
  556. code_coordinator-0.5.46/tests/test_cross_platform_imports.py +136 -0
  557. code_coordinator-0.5.46/tests/test_dashboard.py +1755 -0
  558. code_coordinator-0.5.46/tests/test_dashboard_fixture.py +644 -0
  559. code_coordinator-0.5.46/tests/test_dashboard_terminal.py +905 -0
  560. code_coordinator-0.5.46/tests/test_dashboard_terminal_live.py +108 -0
  561. code_coordinator-0.5.46/tests/test_db.py +839 -0
  562. code_coordinator-0.5.46/tests/test_dead_end.py +408 -0
  563. code_coordinator-0.5.46/tests/test_deploy_coord_db_backup.py +299 -0
  564. code_coordinator-0.5.46/tests/test_deploy_coord_web_dist.py +403 -0
  565. code_coordinator-0.5.46/tests/test_deploy_coord_web_rollback.py +209 -0
  566. code_coordinator-0.5.46/tests/test_deploy_drive_queue_unit.py +58 -0
  567. code_coordinator-0.5.46/tests/test_deploy_manifest.py +97 -0
  568. code_coordinator-0.5.46/tests/test_deploy_units_lane.py +349 -0
  569. code_coordinator-0.5.46/tests/test_deploy_web_unit.py +81 -0
  570. code_coordinator-0.5.46/tests/test_deps.py +300 -0
  571. code_coordinator-0.5.46/tests/test_diagnose.py +2214 -0
  572. code_coordinator-0.5.46/tests/test_dispatch.py +2752 -0
  573. code_coordinator-0.5.46/tests/test_dispatch_target_validation.py +531 -0
  574. code_coordinator-0.5.46/tests/test_dist_name.py +351 -0
  575. code_coordinator-0.5.46/tests/test_done_housekeeping.py +393 -0
  576. code_coordinator-0.5.46/tests/test_drive.py +3871 -0
  577. code_coordinator-0.5.46/tests/test_drive_queue.py +1912 -0
  578. code_coordinator-0.5.46/tests/test_drive_state.py +1184 -0
  579. code_coordinator-0.5.46/tests/test_drive_tmux.py +532 -0
  580. code_coordinator-0.5.46/tests/test_epic_up_capability_detection.py +280 -0
  581. code_coordinator-0.5.46/tests/test_epic_up_down_symlinked_config_1887.py +287 -0
  582. code_coordinator-0.5.46/tests/test_epic_up_image_provenance.py +148 -0
  583. code_coordinator-0.5.46/tests/test_errors.py +195 -0
  584. code_coordinator-0.5.46/tests/test_events.py +439 -0
  585. code_coordinator-0.5.46/tests/test_failure_class.py +759 -0
  586. code_coordinator-0.5.46/tests/test_filelock.py +155 -0
  587. code_coordinator-0.5.46/tests/test_finalize_interactive_exit_test_verdict.py +229 -0
  588. code_coordinator-0.5.46/tests/test_fix_of_force_override.py +92 -0
  589. code_coordinator-0.5.46/tests/test_fleet_config_health.py +343 -0
  590. code_coordinator-0.5.46/tests/test_fleet_health_probes.py +777 -0
  591. code_coordinator-0.5.46/tests/test_fleet_health_snapshot.py +478 -0
  592. code_coordinator-0.5.46/tests/test_freshness.py +267 -0
  593. code_coordinator-0.5.46/tests/test_gate_a.py +771 -0
  594. code_coordinator-0.5.46/tests/test_gate_b.py +329 -0
  595. code_coordinator-0.5.46/tests/test_gate_snapshot_staleness.py +108 -0
  596. code_coordinator-0.5.46/tests/test_gates.py +716 -0
  597. code_coordinator-0.5.46/tests/test_generated_types_fixture.py +36 -0
  598. code_coordinator-0.5.46/tests/test_github_ops.py +1807 -0
  599. code_coordinator-0.5.46/tests/test_goal.py +143 -0
  600. code_coordinator-0.5.46/tests/test_graph_health.py +542 -0
  601. code_coordinator-0.5.46/tests/test_handoff.py +645 -0
  602. code_coordinator-0.5.46/tests/test_health_checks.py +775 -0
  603. code_coordinator-0.5.46/tests/test_health_cli.py +290 -0
  604. code_coordinator-0.5.46/tests/test_health_cli_graph.py +137 -0
  605. code_coordinator-0.5.46/tests/test_health_config.py +237 -0
  606. code_coordinator-0.5.46/tests/test_health_context.py +240 -0
  607. code_coordinator-0.5.46/tests/test_health_deploy_lane_facts.py +453 -0
  608. code_coordinator-0.5.46/tests/test_health_incident_regression.py +283 -0
  609. code_coordinator-0.5.46/tests/test_health_pypi.py +198 -0
  610. code_coordinator-0.5.46/tests/test_health_registry.py +441 -0
  611. code_coordinator-0.5.46/tests/test_health_timer_active.py +236 -0
  612. code_coordinator-0.5.46/tests/test_health_toolchain.py +568 -0
  613. code_coordinator-0.5.46/tests/test_health_unit_drift.py +751 -0
  614. code_coordinator-0.5.46/tests/test_health_unit_enablement.py +174 -0
  615. code_coordinator-0.5.46/tests/test_hooks.py +322 -0
  616. code_coordinator-0.5.46/tests/test_human_attended_437.py +652 -0
  617. code_coordinator-0.5.46/tests/test_init.py +966 -0
  618. code_coordinator-0.5.46/tests/test_integration.py +361 -0
  619. code_coordinator-0.5.46/tests/test_interactive_briefing_echo.py +391 -0
  620. code_coordinator-0.5.46/tests/test_interactive_prefill_state.py +440 -0
  621. code_coordinator-0.5.46/tests/test_interactive_session_relaunch.py +551 -0
  622. code_coordinator-0.5.46/tests/test_interactive_test_verdict_backstop.py +647 -0
  623. code_coordinator-0.5.46/tests/test_interactive_worktree.py +1127 -0
  624. code_coordinator-0.5.46/tests/test_issue_store_seam.py +2078 -0
  625. code_coordinator-0.5.46/tests/test_liveness_auditor.py +326 -0
  626. code_coordinator-0.5.46/tests/test_liveness_notify.py +424 -0
  627. code_coordinator-0.5.46/tests/test_machine_pause.py +291 -0
  628. code_coordinator-0.5.46/tests/test_merge_queue.py +7716 -0
  629. code_coordinator-0.5.46/tests/test_merge_verify.py +1262 -0
  630. code_coordinator-0.5.46/tests/test_milestone_chat.py +636 -0
  631. code_coordinator-0.5.46/tests/test_milestone_dispatch.py +965 -0
  632. code_coordinator-0.5.46/tests/test_milestone_gate.py +727 -0
  633. code_coordinator-0.5.46/tests/test_milestone_order.py +889 -0
  634. code_coordinator-0.5.46/tests/test_milestone_seam.py +377 -0
  635. code_coordinator-0.5.46/tests/test_mock_author.py +519 -0
  636. code_coordinator-0.5.46/tests/test_model_tiering.py +1635 -0
  637. code_coordinator-0.5.46/tests/test_models.py +140 -0
  638. code_coordinator-0.5.46/tests/test_models_config_labels.py +184 -0
  639. code_coordinator-0.5.46/tests/test_needs_attention.py +609 -0
  640. code_coordinator-0.5.46/tests/test_network.py +250 -0
  641. code_coordinator-0.5.46/tests/test_new_issue_chat.py +210 -0
  642. code_coordinator-0.5.46/tests/test_next_release_tag.py +335 -0
  643. code_coordinator-0.5.46/tests/test_no_direct_gh_calls.py +112 -0
  644. code_coordinator-0.5.46/tests/test_node_shim.py +263 -0
  645. code_coordinator-0.5.46/tests/test_notify.py +1606 -0
  646. code_coordinator-0.5.46/tests/test_notify_drain.py +1041 -0
  647. code_coordinator-0.5.46/tests/test_openapi.py +264 -0
  648. code_coordinator-0.5.46/tests/test_operational_defaults.py +182 -0
  649. code_coordinator-0.5.46/tests/test_overlap_fence.py +156 -0
  650. code_coordinator-0.5.46/tests/test_packaged_deploy_units.py +89 -0
  651. code_coordinator-0.5.46/tests/test_parentage.py +287 -0
  652. code_coordinator-0.5.46/tests/test_paste_landed.py +289 -0
  653. code_coordinator-0.5.46/tests/test_pipeline.py +1789 -0
  654. code_coordinator-0.5.46/tests/test_plan_followup_approve_plan_command.py +146 -0
  655. code_coordinator-0.5.46/tests/test_plan_followup_pr_command.py +213 -0
  656. code_coordinator-0.5.46/tests/test_plan_followup_review_command.py +249 -0
  657. code_coordinator-0.5.46/tests/test_plan_only.py +463 -0
  658. code_coordinator-0.5.46/tests/test_plan_parser.py +598 -0
  659. code_coordinator-0.5.46/tests/test_platform_paths.py +95 -0
  660. code_coordinator-0.5.46/tests/test_pr_body_lint.py +62 -0
  661. code_coordinator-0.5.46/tests/test_prereqs.py +518 -0
  662. code_coordinator-0.5.46/tests/test_production_db_guard.py +63 -0
  663. code_coordinator-0.5.46/tests/test_progress.py +476 -0
  664. code_coordinator-0.5.46/tests/test_provider_seam.py +387 -0
  665. code_coordinator-0.5.46/tests/test_providers.py +2414 -0
  666. code_coordinator-0.5.46/tests/test_providers_config_labels.py +96 -0
  667. code_coordinator-0.5.46/tests/test_providers_pty.py +894 -0
  668. code_coordinator-0.5.46/tests/test_quiet_hours.py +302 -0
  669. code_coordinator-0.5.46/tests/test_reap_merged_sessions.py +775 -0
  670. code_coordinator-0.5.46/tests/test_reap_stale_interactive_tick.py +192 -0
  671. code_coordinator-0.5.46/tests/test_reconcile_branch.py +448 -0
  672. code_coordinator-0.5.46/tests/test_reconcile_completions.py +755 -0
  673. code_coordinator-0.5.46/tests/test_reconcile_merges.py +1440 -0
  674. code_coordinator-0.5.46/tests/test_reconcile_usage_limit_done.py +186 -0
  675. code_coordinator-0.5.46/tests/test_refine_chat.py +177 -0
  676. code_coordinator-0.5.46/tests/test_release_cordon_2101.py +708 -0
  677. code_coordinator-0.5.46/tests/test_release_propagate.py +846 -0
  678. code_coordinator-0.5.46/tests/test_release_unified_1242.py +395 -0
  679. code_coordinator-0.5.46/tests/test_release_verify.py +1086 -0
  680. code_coordinator-0.5.46/tests/test_release_window.py +163 -0
  681. code_coordinator-0.5.46/tests/test_remote_auto_prune.py +769 -0
  682. code_coordinator-0.5.46/tests/test_remote_interactive_reaper.py +697 -0
  683. code_coordinator-0.5.46/tests/test_report_result_push.py +162 -0
  684. code_coordinator-0.5.46/tests/test_reports.py +2540 -0
  685. code_coordinator-0.5.46/tests/test_retry.py +191 -0
  686. code_coordinator-0.5.46/tests/test_retry_advisory_1606.py +140 -0
  687. code_coordinator-0.5.46/tests/test_retry_type_1636.py +250 -0
  688. code_coordinator-0.5.46/tests/test_revalidate.py +1767 -0
  689. code_coordinator-0.5.46/tests/test_review.py +4460 -0
  690. code_coordinator-0.5.46/tests/test_review_end_review_without_verdict.py +163 -0
  691. code_coordinator-0.5.46/tests/test_review_parse_failure_diagnostic.py +801 -0
  692. code_coordinator-0.5.46/tests/test_review_reaffirm.py +444 -0
  693. code_coordinator-0.5.46/tests/test_review_state.py +990 -0
  694. code_coordinator-0.5.46/tests/test_review_verdict_backstop.py +425 -0
  695. code_coordinator-0.5.46/tests/test_review_verdict_override_audit.py +159 -0
  696. code_coordinator-0.5.46/tests/test_review_verdict_relay.py +627 -0
  697. code_coordinator-0.5.46/tests/test_review_zero_commits.py +216 -0
  698. code_coordinator-0.5.46/tests/test_scoped_review_wiring.py +95 -0
  699. code_coordinator-0.5.46/tests/test_scorecard.py +469 -0
  700. code_coordinator-0.5.46/tests/test_serve.py +6561 -0
  701. code_coordinator-0.5.46/tests/test_serve_app_board_trim.py +134 -0
  702. code_coordinator-0.5.46/tests/test_session.py +183 -0
  703. code_coordinator-0.5.46/tests/test_slice_issue_attribution.py +359 -0
  704. code_coordinator-0.5.46/tests/test_smoke.py +1932 -0
  705. code_coordinator-0.5.46/tests/test_smoke_live_checkout_restore.py +530 -0
  706. code_coordinator-0.5.46/tests/test_smoke_workflow.py +881 -0
  707. code_coordinator-0.5.46/tests/test_split.py +266 -0
  708. code_coordinator-0.5.46/tests/test_split_work.py +398 -0
  709. code_coordinator-0.5.46/tests/test_stage_projection.py +561 -0
  710. code_coordinator-0.5.46/tests/test_stalled_pipeline.py +1652 -0
  711. code_coordinator-0.5.46/tests/test_state.py +1944 -0
  712. code_coordinator-0.5.46/tests/test_state_review_findings_daemon.py +124 -0
  713. code_coordinator-0.5.46/tests/test_status_fleet_footer.py +217 -0
  714. code_coordinator-0.5.46/tests/test_stop_1567.py +276 -0
  715. code_coordinator-0.5.46/tests/test_stuck.py +609 -0
  716. code_coordinator-0.5.46/tests/test_terminal_command.py +464 -0
  717. code_coordinator-0.5.46/tests/test_test_author.py +923 -0
  718. code_coordinator-0.5.46/tests/test_test_chat.py +294 -0
  719. code_coordinator-0.5.46/tests/test_test_orchestrator.py +643 -0
  720. code_coordinator-0.5.46/tests/test_test_report.py +208 -0
  721. code_coordinator-0.5.46/tests/test_test_verdict_parsing.py +157 -0
  722. code_coordinator-0.5.46/tests/test_test_verdict_transcript_floor.py +169 -0
  723. code_coordinator-0.5.46/tests/test_thin_client_board_audit.py +393 -0
  724. code_coordinator-0.5.46/tests/test_thin_client_config_load_1080.py +163 -0
  725. code_coordinator-0.5.46/tests/test_thin_client_daemon_routing_906.py +672 -0
  726. code_coordinator-0.5.46/tests/test_tmux_host.py +570 -0
  727. code_coordinator-0.5.46/tests/test_tmux_session.py +745 -0
  728. code_coordinator-0.5.46/tests/test_transcript_floor.py +474 -0
  729. code_coordinator-0.5.46/tests/test_usage.py +1374 -0
  730. code_coordinator-0.5.46/tests/test_usage_limits.py +276 -0
  731. code_coordinator-0.5.46/tests/test_usage_rollup.py +617 -0
  732. code_coordinator-0.5.46/tests/test_version_single_source.py +544 -0
  733. code_coordinator-0.5.46/tests/test_watch.py +662 -0
  734. code_coordinator-0.5.46/tests/test_worker_events.py +810 -0
  735. code_coordinator-0.5.46/tests/test_worker_image_pin_sync.py +147 -0
  736. code_coordinator-0.5.46/tests/test_worker_safety.py +386 -0
  737. code_coordinator-0.5.46/tests/test_worktree.py +634 -0
  738. code_coordinator-0.5.46/tests/test_worktree_rmtree_chokepoint.py +382 -0
  739. code_coordinator-0.5.46/tui/Cargo.lock +3272 -0
  740. code_coordinator-0.5.46/tui/Cargo.toml +63 -0
  741. code_coordinator-0.5.46/tui/cargo-config-local-quadraui.toml.example +21 -0
  742. code_coordinator-0.5.46/tui/src/app/audit.rs +562 -0
  743. code_coordinator-0.5.46/tui/src/app/chat.rs +273 -0
  744. code_coordinator-0.5.46/tui/src/app/data.rs +3393 -0
  745. code_coordinator-0.5.46/tui/src/app/dialogs.rs +7172 -0
  746. code_coordinator-0.5.46/tui/src/app/drive.rs +1419 -0
  747. code_coordinator-0.5.46/tui/src/app/drive_queue.rs +3021 -0
  748. code_coordinator-0.5.46/tui/src/app/escalation.rs +306 -0
  749. code_coordinator-0.5.46/tui/src/app/events.rs +6557 -0
  750. code_coordinator-0.5.46/tui/src/app/fixtures.rs +730 -0
  751. code_coordinator-0.5.46/tui/src/app/fleet_health.rs +351 -0
  752. code_coordinator-0.5.46/tui/src/app/fleet_sessions.rs +474 -0
  753. code_coordinator-0.5.46/tui/src/app/fleet_terminals.rs +566 -0
  754. code_coordinator-0.5.46/tui/src/app/format.rs +315 -0
  755. code_coordinator-0.5.46/tui/src/app/milestone_dag.rs +1671 -0
  756. code_coordinator-0.5.46/tui/src/app/mod.rs +8200 -0
  757. code_coordinator-0.5.46/tui/src/app/msv.rs +140 -0
  758. code_coordinator-0.5.46/tui/src/app/pipeline.rs +7980 -0
  759. code_coordinator-0.5.46/tui/src/app/plans.rs +2241 -0
  760. code_coordinator-0.5.46/tui/src/app/render.rs +3621 -0
  761. code_coordinator-0.5.46/tui/src/app/reports.rs +1639 -0
  762. code_coordinator-0.5.46/tui/src/app/sessions.rs +3452 -0
  763. code_coordinator-0.5.46/tui/src/app/settings_ui.rs +2071 -0
  764. code_coordinator-0.5.46/tui/src/app/sidebar.rs +632 -0
  765. code_coordinator-0.5.46/tui/src/app/terminal.rs +1243 -0
  766. code_coordinator-0.5.46/tui/src/app/tests.rs +46592 -0
  767. code_coordinator-0.5.46/tui/src/app/types.rs +2282 -0
  768. code_coordinator-0.5.46/tui/src/app/workspace.rs +581 -0
  769. code_coordinator-0.5.46/tui/src/bin/gtk.rs +13 -0
  770. code_coordinator-0.5.46/tui/src/commands.rs +1138 -0
  771. code_coordinator-0.5.46/tui/src/lib.rs +20 -0
  772. code_coordinator-0.5.46/tui/src/main.rs +186 -0
  773. code_coordinator-0.5.46/tui/src/settings.rs +850 -0
  774. code_coordinator-0.5.46/tui/tests/acceptance.rs +41 -0
  775. code_coordinator-0.5.46/tui/tests/cli.rs +58 -0
  776. code_coordinator-0.5.46/tui/tests/fixtures/board_sample.json +350 -0
@@ -0,0 +1,17 @@
1
+ Show the current assignment board.
2
+
3
+ 1. Run `coord status` to get machine and assignment state.
4
+ 2. Run `coord notify --dry-run 2>/dev/null || true` to check for pending notifications (if the flag exists, otherwise skip).
5
+ 3. Format the output as a board:
6
+
7
+ ```
8
+ | ID | Machine | Repo | Issue | Model | Status |
9
+ |----|---------|------|-------|-------|--------|
10
+ ```
11
+
12
+ Include:
13
+ - All active assignments (running, pending)
14
+ - Recently completed assignments (last 5)
15
+ - Machine connectivity (online/offline)
16
+
17
+ If no assignments are active, say "Board is clear — all machines idle."
@@ -0,0 +1,31 @@
1
+ Gracefully end the current coordinator session.
2
+
3
+ 1. **Check for active work:**
4
+ ```bash
5
+ coord status
6
+ ```
7
+ If assignments are still running, ask: "N assignments still running. Wait for them, stop them, or shut down anyway?"
8
+ - Wait: run `coord wait <id>` for each active assignment
9
+ - Stop: run `coord stop <id>` for each active assignment
10
+ - Shut down anyway: continue (workers keep running on the agent server)
11
+
12
+ 2. **Post pending notifications:**
13
+ ```bash
14
+ coord notify
15
+ ```
16
+
17
+ 3. **Run session shutdown:**
18
+ ```bash
19
+ coord done
20
+ ```
21
+ This pulls repos, runs housekeeping commands, and saves session state.
22
+
23
+ 4. **Show session summary:**
24
+ ```bash
25
+ coord session
26
+ ```
27
+
28
+ 5. **Check for unresolved work:**
29
+ If any assignments are failed or stuck, note: "N assignments failed/stuck and weren't resolved. They'll show up on next startup via `coord resume`."
30
+
31
+ 6. Close with: "Session complete. Board state saved. Safe to close."
@@ -0,0 +1,278 @@
1
+ # Coordinator
2
+
3
+ You are the **coordinator**. You do NOT write code. You plan, route, and track work across machines using the `coord` CLI.
4
+
5
+ ---
6
+
7
+ ## Startup
8
+
9
+ ### 1. Check coord is installed
10
+
11
+ ```bash
12
+ which coord
13
+ ```
14
+
15
+ If not found: tell the user to run `pip install -e .` from the repo root and stop.
16
+
17
+ ### 2. Check for coordinator.yml
18
+
19
+ ```bash
20
+ ls coordinator.yml 2>/dev/null || echo "MISSING"
21
+ ```
22
+
23
+ If missing:
24
+ - Say: "No coordinator.yml found. This looks like first-time setup."
25
+ - Ask: "Want me to run `coord init` to create one interactively?"
26
+ - If yes: run `coord init`
27
+ - If they already have a config elsewhere: suggest copying it here
28
+ - Either way, point to `coordinator.example.yml` as a reference
29
+ - Wait until coordinator.yml exists before continuing.
30
+
31
+ ### 3. Validate config
32
+
33
+ ```bash
34
+ coord config
35
+ ```
36
+
37
+ If it errors, show the output and stop. Ask the user to fix the YAML before continuing.
38
+
39
+ ### 4. Check for previous session
40
+
41
+ ```bash
42
+ coord session
43
+ ```
44
+
45
+ - **"clean_shutdown: false" or "Session in progress":** Say "Previous session didn't end cleanly. Reconciling..." then run `coord resume` to sync board with agents. Run `coord status` and summarize what completed while away and what's still running.
46
+ - **Clean last session:** Briefly note "Last session: N assignments, $X.XX cost" and continue.
47
+ - **"No session state found":** First time — continue normally.
48
+
49
+ **After `coord resume` — purge stale merge queue entries:**
50
+
51
+ `coord resume` enrolls every completed assignment into the merge queue, including old work for issues that are now closed. Running `coord merge` on those creates junk PRs. Always check first:
52
+
53
+ ```bash
54
+ # List pending merge queue issues
55
+ sqlite3 ~/.coord/coord.db "SELECT repo_name, issue_number FROM merge_queue WHERE state='pending' ORDER BY repo_name, issue_number;"
56
+
57
+ # For each repo, verify issues are still open (replace OWNER/REPO):
58
+ for n in $(sqlite3 ~/.coord/coord.db "SELECT issue_number FROM merge_queue WHERE repo_name='claude-coordinator' AND state='pending';"); do
59
+ state=$(gh issue view $n --repo JDonaghy/claude-coordinator --json state --jq '.state' 2>/dev/null)
60
+ [ "$state" != "OPEN" ] && echo "STALE: $n ($state)"
61
+ done
62
+
63
+ # Delete stale entries (replace issue numbers):
64
+ sqlite3 ~/.coord/coord.db "DELETE FROM merge_queue WHERE repo_name='claude-coordinator' AND issue_number IN (12,14,34,...);"
65
+ ```
66
+
67
+ ### 5. Check agent versions and machine state
68
+
69
+ ```bash
70
+ coord status
71
+ ```
72
+
73
+ Check agent versions — version skew causes `--force` dispatch failures (400 errors):
74
+
75
+ ```bash
76
+ # Quick version check across all agents (replace hostnames from coordinator.yml):
77
+ for host in john-precision-3571 john-hp-elitebook-830-g7-notebook-pc dellserver; do
78
+ echo -n "$host: "
79
+ curl -s http://$host:7433/status | python3 -c "import sys,json; d=json.load(sys.stdin); print(d.get('version','<0.3.0 (old)'))" 2>/dev/null || echo "unreachable"
80
+ done
81
+ ```
82
+
83
+ If any agent is old (no `version` in /status, or version < current):
84
+ - **Agent >= 0.3.0**: `curl -X POST http://<host>:7433/update` — self-updates from PyPI and restarts
85
+ - **Agent < 0.3.0**: must SSH in — see README "Upgrading Agents"
86
+
87
+ **Symptom of version skew:** `coord assign ... --force` returns HTTP 400 "unexpected keyword argument 'fresh_branch'" from the agent.
88
+
89
+ ### 6. Load open issues for each repo
90
+
91
+ Read `coordinator.yml` to discover the repos. For each repo with a `github:` field, run:
92
+
93
+ ```bash
94
+ gh issue list --state open --repo <github>
95
+ ```
96
+
97
+ ### 7. Ask the user
98
+
99
+ - **Which machines are available today?** (list names from the config)
100
+ - **Any constraints?** (shared clone paths, no GTK builds, rate-limit concerns, etc.)
101
+
102
+ ---
103
+
104
+ ## Your responsibilities
105
+
106
+ - Read repos, machines, and dependency chains from `coordinator.yml` — never hardcode repo or machine names.
107
+ - Propose and track assignments on the board.
108
+ - Prevent conflicts: no two agents working on the same file set simultaneously.
109
+ - Respect dependency order: if repo A `depends_on` repo B, don't assign work in A while B has an active assignment.
110
+ - After each completion, check whether it unblocks downstream repos and propose the next assignment.
111
+ - Route smoke tests to machines with the required capabilities.
112
+
113
+ ---
114
+
115
+ ## Commands available to you
116
+
117
+ ### Dispatch
118
+
119
+ ```
120
+ coord assign <machine> <repo> <issue> [--model haiku|sonnet|opus] --briefing "..."
121
+ coord status # all machines + assignments
122
+ coord watch <id> # filtered live log (streaming)
123
+ coord wait <id> # block until assignment done
124
+ ```
125
+
126
+ ### Post-completion
127
+
128
+ ```
129
+ coord test <id> # pull branch, run build + tests
130
+ coord test --passed <id> # record smoke test as passed
131
+ coord test --fail <id> --reason "" # record smoke test as failed
132
+ coord pr <id> # dispatch PR-creation worker
133
+ coord fix <id> [--guidance "..."] # dispatch fix-up worker (auto-escalates model)
134
+ ```
135
+
136
+ ### Recovery
137
+
138
+ ```
139
+ coord resume-stuck <id> --guidance "..." # cancel stuck worker, dispatch continuation
140
+ coord retry <id> # re-dispatch failed assignment to another machine
141
+ coord stop <id> # cancel a running assignment
142
+ coord notify # post completions/failures/stuck to GitHub
143
+ ```
144
+
145
+ ### Inspection
146
+
147
+ ```
148
+ coord log <id> [-f] # raw log output for an assignment
149
+ coord plan # brain proposes assignments (for reference)
150
+ coord merge [--dry-run] # process merge queue
151
+ ```
152
+
153
+ ### Model tiers
154
+
155
+ | Flag | Use for |
156
+ |------|---------|
157
+ | `--model haiku` | Docs, config, trivial single-file changes |
158
+ | `--model sonnet` | Standard features, bug fixes (default) |
159
+ | `--model opus` | Complex multi-file or architectural work |
160
+
161
+ ---
162
+
163
+ ## Board format
164
+
165
+ Maintain a running board in this conversation:
166
+
167
+ ```
168
+ | ID | Machine | Repo | Issue | Status |
169
+ |----|---------|------|-------|--------|
170
+ ```
171
+
172
+ Update it after every dispatch, completion, failure, or status check.
173
+
174
+ ---
175
+
176
+ ## After each completion
177
+
178
+ 1. Run `coord watch <id>` or check `coord status` to confirm what landed.
179
+ 2. If smoke testing is needed: `coord test <id>`
180
+ - Pass → `coord test --passed <id>` → `coord pr <id>`
181
+ - Fail → `coord test --fail <id> --reason "..."` → `coord fix <id> --guidance "..."`
182
+ 3. Check `coordinator.yml` dependencies: does this completion unblock anything?
183
+ 4. Propose the next assignment.
184
+
185
+ ---
186
+
187
+ ## What NOT to do
188
+
189
+ - Don't write code.
190
+ - Don't open PRs directly — use `coord pr <id>` to dispatch a worker.
191
+ - Don't run builds yourself — use `coord test <id>`.
192
+ - Don't assign the same issue to two machines.
193
+ - Don't assign work to a repo while its upstream dependency (`depends_on`) has active work.
194
+ - Don't hardcode repo names, machine names, or GitHub orgs — read them from `coordinator.yml`.
195
+ - Don't run `coord merge` blindly after `coord resume` — purge stale merge queue entries first (see Startup step 4).
196
+
197
+ ---
198
+
199
+ ## Common Pitfalls
200
+
201
+ ### Merge queue is full of stale entries after crash recovery
202
+ `coord resume` enrolls all old completed assignments — even for issues closed months ago. Always check issue state before `coord merge`. See Startup step 4 for the purge procedure.
203
+
204
+ ### `coord assign --force` returns HTTP 400
205
+ Agents older than 0.3.0 don't accept the `fresh_branch` field. Check versions (Startup step 5) and upgrade agents before using `--force`.
206
+
207
+ ### PR exists but merge queue doesn't know about it
208
+ If a PR was opened via `coord pr` before it entered the merge queue, the DB `pr_number` column is NULL. `coord merge` will try to open a duplicate. Fix it:
209
+ ```bash
210
+ sqlite3 ~/.coord/coord.db "UPDATE merge_queue SET pr_number=<N>, pr_url='https://github.com/OWNER/REPO/pull/<N>' WHERE repo_name='<repo>' AND issue_number=<issue>;"
211
+ ```
212
+
213
+ ### `coord merge` fails with conflict
214
+ The branch conflicts with something that merged after the worker finished. Dispatch a rebase worker:
215
+ ```bash
216
+ coord assign <machine> <repo> <issue> --force --briefing "Rebase branch <branch> onto main. git fetch origin, git checkout <branch>, git rebase origin/main, resolve conflicts, git push --force-with-lease. Do not change any logic."
217
+ ```
218
+ Note: requires agents >= 0.3.0 for `--force` to work.
219
+
220
+
221
+ ### 7. Epic / Parent-Issue Hygiene
222
+
223
+ When an issue is split into sub-issues (e.g. `coord split`, or a manual A/B/C/D...
224
+ breakdown), the parent becomes an **epic** — a tracking issue, not a dispatchable
225
+ one. `coord` has no distinct "epic" issue type: a Pipeline card is dispatchable
226
+ purely from having both the `coord` + `status:ready` labels, regardless of whether
227
+ the issue body has any diffable scope left. Leaving the parent `status:ready` risks
228
+ a Work session getting dispatched against an issue with nothing left to build.
229
+
230
+ - Once a parent's own actionable scope is fully delegated to sub-issues, pull it out
231
+ of "live": `coord backlog <repo> <issue>`. This keeps it `coord`-tracked and
232
+ visible on the board, but drops it to the Backlog column — no `[Go]` button, can't
233
+ be auto-dispatched by `coord plan`.
234
+ - Prefer a dedicated milestone for a tightly-coupled parent + sub-issue family over
235
+ lumping it into a large umbrella milestone — keeps milestone size a meaningful
236
+ progress signal (see #448 → milestone "GTK ShellApp Event Dispatch", carved out of
237
+ the ballooning "Platform-Neutral" milestone).
238
+ - The parent issue's body should say plainly **"Status: parent/tracking issue"** and
239
+ list the remaining open sub-issues, so anyone who lands on it — human or agent —
240
+ doesn't mistake it for actionable work.
241
+
242
+ **Every epic holds the plan AND a machine-readable work order — add this as a matter of
243
+ course.** The tracking issue is the single home for both the *intent* and the *dispatch
244
+ DAG*, so it can be read, chatted with, and drained by tooling. Whenever you create an epic
245
+ or carve a milestone, the tracking issue must carry, by default:
246
+
247
+ 1. **The overall plan** — why the epic exists, how it decomposes into sub-issues, the
248
+ consumer/dependency structure, and the key decisions. Prose in the body.
249
+ 2. **A `## Work order` block** — the dispatch DAG as checklist lines and NOTHING else under
250
+ that heading: `- [ ] #NNN {group: A}` for concurrent roots, `- [ ] #NNN {after: #X,#Y}`
251
+ for hard deps. Keep any ASCII DAG / step table in a SEPARATE section (e.g.
252
+ `## Dispatch plan`) — `coord milestone write-order` idempotently **replaces the entire
253
+ `## Work order` section**, so anything parked under that heading is destroyed on the next
254
+ rewrite (this is why #947 keeps its DAG in `docs/ORACLE_LOOP.md`).
255
+ 3. **Runtime notes** per node: coord-live (editable install → immediate) vs. needs-release
256
+ (touches `agent.py`/worker prompts → PyPI + `coord agent update`) vs. coord-tui (local
257
+ `cargo build` + copy binary, no PyPI).
258
+
259
+ Use the milestone seam (#767/#770) — **never raw `gh` for the work order**:
260
+
261
+ ```
262
+ coord milestone write-order <repo> <issue> --file lines.txt # validate (cycles, unknown
263
+ # after-targets, milestone membership) + idempotently splice the ## Work order block
264
+ coord milestone order <repo> <issue> # parse + print the ready frontier / blocked set
265
+ coord milestone dispatch <repo> <issue> # promote the ready frontier into the pipeline
266
+ coord milestone chat <repo> <issue> # dispatch a milestone-steward chat: an agent seeded
267
+ # with the epic body + open sub-issues that discusses next steps and (only on your
268
+ # confirmation) writes the ## Work order via write-order. THIS is "chat in the epic".
269
+ ```
270
+
271
+ - **Cross-milestone `after:` edges are rejected** by the validator. A hard dep on an issue
272
+ in another milestone (e.g. #973's #972 needs #952, which lives in milestone #26) goes in
273
+ the step table / runtime notes as a prose prereq — NOT as a machine edge.
274
+ - To refine next steps *inside* an epic, dispatch `coord milestone chat` rather than editing
275
+ the body by hand — the steward proposes/updates the work order through the validated write
276
+ path and keeps the plan and the DAG in sync.
277
+ - Canonical examples: **#947** (oracle-loop, milestone #25) and **#973** (fleet session
278
+ substrate, milestone #28 — DAG/table in the epic's `## Dispatch plan` section).
@@ -0,0 +1,42 @@
1
+ # Shared helpers for the versioned hooks in this directory. Sourced, not run.
2
+ #
3
+ # WHY THESE HOOKS EXIST AT ALL: setting `core.hooksPath` REPLACES `.git/hooks`
4
+ # wholesale — git stops looking there entirely. graphify installs post-commit,
5
+ # post-checkout, and post-merge into `$GIT_COMMON_DIR/hooks/`, so every one of
6
+ # them needs a counterpart here or it is silently disabled. (Shipping only
7
+ # post-checkout killed graphify's commit/merge rebuilds on the operator box for
8
+ # about an hour — caught by `coord diagnose --graph` reporting the repo's own
9
+ # graph STALE right after a merge.)
10
+ #
11
+ # Each hook here is a thin shim: skip in linked worktrees, otherwise hand off
12
+ # to the machine-local graphify hook, which pins an absolute interpreter path
13
+ # and therefore must never be committed.
14
+
15
+ # Absolute path, whether git handed us a relative one or not.
16
+ gfy_abs() {
17
+ case "$1" in
18
+ /*) printf '%s\n' "$1" ;;
19
+ *) printf '%s\n' "$PWD/$1" ;;
20
+ esac
21
+ }
22
+
23
+ gfy_common_dir() {
24
+ gfy_abs "$(git rev-parse --git-common-dir 2>/dev/null || echo .git)"
25
+ }
26
+
27
+ # True in a linked worktree (its per-worktree git dir differs from the common one).
28
+ gfy_is_linked_worktree() {
29
+ _gd=$(gfy_abs "$(git rev-parse --git-dir 2>/dev/null || echo .git)")
30
+ [ "$_gd" != "$(gfy_common_dir)" ]
31
+ }
32
+
33
+ # Hand off to the machine-local hook of the same name, if present.
34
+ gfy_chain() {
35
+ _name=$1
36
+ shift
37
+ _local="$(gfy_common_dir)/hooks/$_name"
38
+ if [ -x "$_local" ]; then
39
+ exec "$_local" "$@"
40
+ fi
41
+ exit 0
42
+ }
@@ -0,0 +1,90 @@
1
+ #!/bin/sh
2
+ # Versioned post-checkout hook — enabled per machine with:
3
+ #
4
+ # git config core.hooksPath .githooks
5
+ #
6
+ # Purpose: make the graphify knowledge graph usable from a *linked worktree*.
7
+ #
8
+ # `graphify-out/` is gitignored by design (only `graphify-out/.gitignore` is
9
+ # tracked — the graph is multi-MB, rewritten on every commit, and would
10
+ # conflict across parallel worker branches). So `git worktree add` gives a
11
+ # worktree an EMPTY `graphify-out/`, and `graphify query` — which resolves
12
+ # `graphify-out/graph.json` strictly relative to cwd, with no upward walk and
13
+ # no `--graph` override — fails there. Every agent working in a worktree is
14
+ # graph-blind.
15
+ #
16
+ # Git runs this hook on `git worktree add` (verified: cwd = the new worktree,
17
+ # $3 = 1), which is why the bootstrap lives here rather than in coord's
18
+ # dispatch code: one implementation covers coord's remote `worktree add` call
19
+ # sites, Claude Code's `.claude/worktrees/`, review worktrees, and anything
20
+ # created by hand — on every machine, with no creator-side changes.
21
+ #
22
+ # The fix is symlinking the base checkout's graph *contents* into the
23
+ # worktree's `graphify-out/` — never replacing the directory itself. A
24
+ # worker branch differs from the base by a handful of files, so the base
25
+ # graph is the right answer for "where is X handled / what calls this"
26
+ # navigation. It is NOT the right answer for "did my change land" — the
27
+ # linked graph reflects the base checkout's HEAD, not the worktree's edits.
28
+ #
29
+ # #1617: an earlier version of this hook replaced the whole `graphify-out/`
30
+ # directory with a symlink to the base checkout. `git worktree add`
31
+ # materialises `graphify-out/` with only the tracked `.gitignore` checked
32
+ # out (everything else in the directory is untracked-and-ignored), and
33
+ # `rm -rf graphify-out` before `ln -sfn` deleted that tracked file out from
34
+ # under git — leaving `git status` showing a deleted tracked file *and* an
35
+ # untracked, machine-local, absolute-path symlink. Every worktree's own
36
+ # rescue-commit machinery then committed both. `graphify-out/.gitignore` is
37
+ # `*` / `!.gitignore`, so anything placed *inside* the directory is already
38
+ # invisible to git for free — the fix is to keep the directory (and its
39
+ # tracked `.gitignore`) and symlink each entry of the base graph into it
40
+ # instead of swapping the directory out from under git.
41
+ #
42
+ # See .githooks/_lib.sh for why every graphify hook needs a shim here.
43
+
44
+ set -u
45
+ . "$(dirname "$0")/_lib.sh"
46
+
47
+ # $3 == 1 means a branch checkout (not a file checkout). `git worktree add`
48
+ # sets it. Anything else is not our business.
49
+ if [ "${3:-0}" != "1" ]; then
50
+ exit 0
51
+ fi
52
+
53
+ if gfy_is_linked_worktree; then
54
+ # The base checkout is the parent of the common git dir.
55
+ _base=$(CDPATH= cd -- "$(dirname -- "$(gfy_common_dir)")" 2>/dev/null && pwd) || _base=""
56
+ if [ -n "$_base" ] && [ -f "$_base/graphify-out/graph.json" ]; then
57
+ # Only bootstrap when graph.json here is absent, or is itself a
58
+ # symlink from a previous run of this hook (idempotent re-link on a
59
+ # later checkout in the same worktree). If a REAL graph was built
60
+ # in this worktree, leave it alone.
61
+ if [ ! -e graphify-out/graph.json ] || [ -L graphify-out/graph.json ]; then
62
+ # `git worktree add` already checked out the tracked
63
+ # graphify-out/.gitignore, materialising the directory — never
64
+ # remove it, only add symlinks alongside it.
65
+ mkdir -p graphify-out 2>/dev/null
66
+ _linked=0
67
+ for _entry in "$_base"/graphify-out/* "$_base"/graphify-out/.[!.]*; do
68
+ [ -e "$_entry" ] || continue
69
+ _name=$(basename -- "$_entry")
70
+ # .gitignore is the tracked file that keeps this directory
71
+ # self-ignoring — never shadow it with a symlink to the
72
+ # base's copy.
73
+ [ "$_name" = ".gitignore" ] && continue
74
+ ln -sfn "$_entry" "graphify-out/$_name" 2>/dev/null && _linked=1
75
+ done
76
+ [ "$_linked" = "1" ] &&
77
+ echo "[graphify] linked graphify-out/* -> $_base/graphify-out/* (read-only base graph)"
78
+ fi
79
+ fi
80
+ # Never rebuild in a linked worktree. Two reasons, both load-bearing:
81
+ # 1. graphify-out/graph.json (and friends) are symlinks to the SHARED
82
+ # base graph — a rebuild here would overwrite it from a
83
+ # feature-branch tree.
84
+ # 2. A worktree can be reaped mid-rebuild, which is how the graphify
85
+ # hook's own "burns a full AST pass and then dies with ENOENT"
86
+ # comment came to be.
87
+ exit 0
88
+ fi
89
+
90
+ gfy_chain post-checkout "$@"
@@ -0,0 +1,19 @@
1
+ #!/bin/sh
2
+ # Versioned post-commit shim.
3
+ #
4
+ # core.hooksPath REPLACES .git/hooks wholesale, so without this file
5
+ # graphify's post-commit rebuild is silently DISABLED on any machine that opts
6
+ # into the versioned hooks. See .githooks/_lib.sh.
7
+ #
8
+ # Linked worktrees never rebuild: graphify-out there is a symlink to the base
9
+ # checkout's SHARED graph, so a rebuild would overwrite it from a
10
+ # feature-branch tree — and a worktree can be reaped mid-rebuild.
11
+
12
+ set -u
13
+ . "$(dirname "$0")/_lib.sh"
14
+
15
+ if gfy_is_linked_worktree; then
16
+ exit 0
17
+ fi
18
+
19
+ gfy_chain post-commit "$@"
@@ -0,0 +1,19 @@
1
+ #!/bin/sh
2
+ # Versioned post-merge shim.
3
+ #
4
+ # core.hooksPath REPLACES .git/hooks wholesale, so without this file
5
+ # graphify's post-merge rebuild is silently DISABLED on any machine that opts
6
+ # into the versioned hooks. See .githooks/_lib.sh.
7
+ #
8
+ # Linked worktrees never rebuild: graphify-out there is a symlink to the base
9
+ # checkout's SHARED graph, so a rebuild would overwrite it from a
10
+ # feature-branch tree — and a worktree can be reaped mid-rebuild.
11
+
12
+ set -u
13
+ . "$(dirname "$0")/_lib.sh"
14
+
15
+ if gfy_is_linked_worktree; then
16
+ exit 0
17
+ fi
18
+
19
+ gfy_chain post-merge "$@"