code-coordinator 0.5.167__tar.gz → 0.5.170__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 (882) hide show
  1. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/code_coordinator.egg-info/SOURCES.txt +3 -0
  4. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/code_coordinator.egg-info/scm_file_list.json +3 -0
  5. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/code_coordinator.egg-info/scm_version.json +2 -2
  6. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/commands/status.py +65 -0
  7. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/drive.py +73 -1
  8. code_coordinator-0.5.170/coord/self_health.py +270 -0
  9. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/docs/OPERATING_GOTCHAS.md +14 -0
  10. code_coordinator-0.5.170/tests/test_cli_diagnose_self.py +115 -0
  11. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_drive.py +145 -0
  12. code_coordinator-0.5.170/tests/test_self_health.py +204 -0
  13. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tui/src/app/events.rs +108 -36
  14. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tui/src/app/fixtures.rs +4 -2
  15. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tui/src/app/mod.rs +24 -55
  16. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tui/src/app/pipeline.rs +972 -278
  17. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tui/src/app/render.rs +35 -5
  18. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tui/src/app/reports.rs +12 -0
  19. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tui/src/app/tests.rs +534 -1242
  20. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tui/src/app/types.rs +80 -0
  21. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/.claude/commands/board.md +0 -0
  22. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/.claude/commands/complete-session.md +0 -0
  23. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/.claude/commands/coordinator.md +0 -0
  24. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/.githooks/_lib.sh +0 -0
  25. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/.githooks/post-checkout +0 -0
  26. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/.githooks/post-commit +0 -0
  27. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/.githooks/post-merge +0 -0
  28. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  29. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/.github/coord-ci-acceptance.yml +0 -0
  30. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/.github/workflows/acceptance-web.yml +0 -0
  31. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/.github/workflows/auto-release.yml +0 -0
  32. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/.github/workflows/cargo-test.yml +0 -0
  33. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/.github/workflows/publish.yml +0 -0
  34. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/.github/workflows/release-tui.yml +0 -0
  35. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/.github/workflows/test.yml +0 -0
  36. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/.gitignore +0 -0
  37. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/CLAUDE.md +0 -0
  38. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/GOAL.md +0 -0
  39. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/LICENSE +0 -0
  40. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/MANIFEST.in +0 -0
  41. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/README.md +0 -0
  42. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/code_coordinator.egg-info/dependency_links.txt +0 -0
  43. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/code_coordinator.egg-info/entry_points.txt +0 -0
  44. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/code_coordinator.egg-info/requires.txt +0 -0
  45. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/code_coordinator.egg-info/top_level.txt +0 -0
  46. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/__init__.py +0 -0
  47. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/_board_mapping.py +0 -0
  48. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/acceptance.py +0 -0
  49. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/acceptance_drivers.py +0 -0
  50. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/agent.py +0 -0
  51. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/agent_app.py +0 -0
  52. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/agent_update.py +0 -0
  53. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/agents/opencode/.gitignore +0 -0
  54. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/agents/opencode/agents/work.md +0 -0
  55. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/agents/opencode/routing.jsonc +0 -0
  56. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/audit.py +0 -0
  57. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/auto_loop.py +0 -0
  58. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/block_log.py +0 -0
  59. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/board_bool_guard.py +0 -0
  60. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/board_service.py +0 -0
  61. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/board_wire.py +0 -0
  62. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/brain.py +0 -0
  63. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/branch_model.py +0 -0
  64. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/bug_intake.py +0 -0
  65. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/cargo_cache.py +0 -0
  66. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/ci_github.py +0 -0
  67. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/ci_store.py +0 -0
  68. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/claim.py +0 -0
  69. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/cli.py +0 -0
  70. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/client.py +0 -0
  71. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/commands/__init__.py +0 -0
  72. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/commands/_common.py +0 -0
  73. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/commands/acceptance.py +0 -0
  74. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/commands/agent_ops.py +0 -0
  75. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/commands/audit.py +0 -0
  76. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/commands/chat.py +0 -0
  77. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/commands/dispatch.py +0 -0
  78. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/commands/dispatch_workers.py +0 -0
  79. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/commands/drive.py +0 -0
  80. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/commands/drive_queue.py +0 -0
  81. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/commands/gate_a.py +0 -0
  82. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/commands/gates.py +0 -0
  83. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/commands/issues.py +0 -0
  84. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/commands/lifecycle.py +0 -0
  85. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/commands/merge.py +0 -0
  86. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/commands/milestone.py +0 -0
  87. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/commands/plan_followup.py +0 -0
  88. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/commands/plans.py +0 -0
  89. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/commands/portal.py +0 -0
  90. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/commands/release.py +0 -0
  91. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/commands/repo.py +0 -0
  92. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/commands/report.py +0 -0
  93. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/commands/review.py +0 -0
  94. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/commands/scorecard.py +0 -0
  95. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/commands/sessions.py +0 -0
  96. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/commands/setup.py +0 -0
  97. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/commands/terminal.py +0 -0
  98. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/commands/test_gate.py +0 -0
  99. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/commands/tui.py +0 -0
  100. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/comments.py +0 -0
  101. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/config.py +0 -0
  102. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/config_reload.py +0 -0
  103. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/conflict_fix.py +0 -0
  104. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dao.py +0 -0
  105. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/__init__.py +0 -0
  106. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/fixture.py +0 -0
  107. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/index.html +0 -0
  108. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/server.py +0 -0
  109. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/terminal.py +0 -0
  110. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/.gitignore +0 -0
  111. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/components.json +0 -0
  112. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/dist/assets/Gallery-BoKs3mpY.js +0 -0
  113. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
  114. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/dist/assets/Terminal-CEsP08iX.js +0 -0
  115. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/dist/assets/index-CDHPlB6k.js +0 -0
  116. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
  117. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
  118. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
  119. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
  120. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
  121. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/dist/index.html +0 -0
  122. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
  123. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/dist/sw.js +0 -0
  124. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
  125. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
  126. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
  127. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
  128. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
  129. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
  130. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
  131. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
  132. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
  133. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
  134. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/eslint.config.js +0 -0
  135. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/index.html +0 -0
  136. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
  137. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/package-lock.json +0 -0
  138. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/package.json +0 -0
  139. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
  140. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/playwright.config.ts +0 -0
  141. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/postcss.config.js +0 -0
  142. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
  143. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
  144. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
  145. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/src/App.tsx +0 -0
  146. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/src/api/client.ts +0 -0
  147. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/src/api/generated.ts +0 -0
  148. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
  149. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
  150. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
  151. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
  152. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
  153. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
  154. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
  155. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
  156. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
  157. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
  158. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
  159. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
  160. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
  161. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
  162. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
  163. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
  164. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
  165. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
  166. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
  167. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
  168. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
  169. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
  170. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
  171. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
  172. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
  173. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
  174. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
  175. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
  176. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
  177. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
  178. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
  179. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
  180. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
  181. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
  182. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/src/index.css +0 -0
  183. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
  184. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
  185. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/src/main.tsx +0 -0
  186. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
  187. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
  188. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
  189. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
  190. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
  191. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
  192. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
  193. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
  194. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
  195. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
  196. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
  197. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
  198. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
  199. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
  200. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
  201. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
  202. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
  203. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
  204. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
  205. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
  206. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
  207. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/src/test-setup.ts +0 -0
  208. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
  209. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/tailwind.config.js +0 -0
  210. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/tsconfig.json +0 -0
  211. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/tsconfig.node.json +0 -0
  212. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dashboard/webapp/vite.config.ts +0 -0
  213. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/db.py +0 -0
  214. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dead_end.py +0 -0
  215. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/deploy/README.md +0 -0
  216. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/deploy/coord-agent.service +0 -0
  217. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/deploy/coord-db-backup.service +0 -0
  218. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/deploy/coord-db-backup.sh +0 -0
  219. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/deploy/coord-db-backup.timer +0 -0
  220. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/deploy/coord-drive-queue.service +0 -0
  221. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/deploy/coord-drive-queue.timer +0 -0
  222. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/deploy/coord-notify.service +0 -0
  223. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/deploy/coord-notify.timer +0 -0
  224. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/deploy/coord-release-propagate.service +0 -0
  225. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/deploy/coord-release-propagate.timer +0 -0
  226. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/deploy/coord-release-window.service +0 -0
  227. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/deploy/coord-release-window.timer +0 -0
  228. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/deploy/coord-serve.service +0 -0
  229. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/deploy/coord-web-dist-build.service +0 -0
  230. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/deploy/coord-web-dist-build.timer +0 -0
  231. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/deploy/coord-web.service +0 -0
  232. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/deploy_manifest.py +0 -0
  233. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/deploy_units.py +0 -0
  234. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/deps.py +0 -0
  235. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/diagnose.py +0 -0
  236. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dispatch.py +0 -0
  237. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/dist_name.py +0 -0
  238. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/drive_queue.py +0 -0
  239. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/drive_state.py +0 -0
  240. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/events.py +0 -0
  241. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/failure_class.py +0 -0
  242. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/filelock.py +0 -0
  243. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/fleet_config_health.py +0 -0
  244. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/freshness.py +0 -0
  245. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/gate_a.py +0 -0
  246. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/gate_b.py +0 -0
  247. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/gate_snapshot.py +0 -0
  248. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/gates.py +0 -0
  249. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/github_ops.py +0 -0
  250. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/goal.py +0 -0
  251. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/graph_health.py +0 -0
  252. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/health/__init__.py +0 -0
  253. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/health/aggregate.py +0 -0
  254. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/health/checks/__init__.py +0 -0
  255. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/health/checks/agent_install.py +0 -0
  256. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/health/checks/cargo_targets.py +0 -0
  257. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/health/checks/claude_binary.py +0 -0
  258. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/health/checks/deploy_lane_facts.py +0 -0
  259. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/health/checks/disk.py +0 -0
  260. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/health/checks/fleet_board.py +0 -0
  261. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  262. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/health/checks/fleet_phantom.py +0 -0
  263. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/health/checks/fleet_unit_drift.py +0 -0
  264. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/health/checks/graph.py +0 -0
  265. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/health/checks/graphify_cli.py +0 -0
  266. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/health/checks/index_lock.py +0 -0
  267. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/health/checks/plan_usage.py +0 -0
  268. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/health/checks/repo_state.py +0 -0
  269. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/health/checks/spawned_coord.py +0 -0
  270. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/health/checks/timer_active.py +0 -0
  271. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/health/checks/toolchain.py +0 -0
  272. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/health/checks/unit_drift.py +0 -0
  273. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/health/checks/unit_enablement.py +0 -0
  274. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/health/checks/worktrees.py +0 -0
  275. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/health/cli.py +0 -0
  276. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/health/context.py +0 -0
  277. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/health/fleet_snapshot.py +0 -0
  278. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/health/models.py +0 -0
  279. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/health/pypi.py +0 -0
  280. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/health/registry.py +0 -0
  281. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/health/render.py +0 -0
  282. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/health/units.py +0 -0
  283. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/hooks.py +0 -0
  284. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/housekeeping.py +0 -0
  285. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/interactive.py +0 -0
  286. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/issue_store.py +0 -0
  287. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/liveness_auditor.py +0 -0
  288. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/machine_pause.py +0 -0
  289. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/merge_queue.py +0 -0
  290. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/milestone_chat.py +0 -0
  291. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/milestone_dispatch.py +0 -0
  292. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/milestone_gate.py +0 -0
  293. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/milestone_order.py +0 -0
  294. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/mock_author.py +0 -0
  295. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/models.py +0 -0
  296. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/network.py +0 -0
  297. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/new_issue_chat.py +0 -0
  298. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/notifier/__init__.py +0 -0
  299. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/notifier/baseline.py +0 -0
  300. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/notifier/cli.py +0 -0
  301. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/notifier/collect.py +0 -0
  302. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/notifier/digest.py +0 -0
  303. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/notifier/models.py +0 -0
  304. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/notifier/predicate.py +0 -0
  305. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/notifier/service.py +0 -0
  306. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/notifier/store.py +0 -0
  307. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/notifier/transport.py +0 -0
  308. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/notify.py +0 -0
  309. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/openapi.py +0 -0
  310. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/overlap_fence.py +0 -0
  311. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/overlap_predict.py +0 -0
  312. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/parentage.py +0 -0
  313. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/parentage_github.py +0 -0
  314. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/pipeline.py +0 -0
  315. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/plan_parser.py +0 -0
  316. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/plans.py +0 -0
  317. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/platform_paths.py +0 -0
  318. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/portal_bridge.py +0 -0
  319. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/portal_store.py +0 -0
  320. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/portal_sync.py +0 -0
  321. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/pr_body_lint.py +0 -0
  322. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/prereqs.py +0 -0
  323. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/progress.py +0 -0
  324. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/providers/__init__.py +0 -0
  325. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/providers/base.py +0 -0
  326. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/providers/claude.py +0 -0
  327. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/providers/claude_pty.py +0 -0
  328. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/providers/opencode.py +0 -0
  329. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/queue_diagnose.py +0 -0
  330. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/reconcile.py +0 -0
  331. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/reconcile_tick.py +0 -0
  332. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/refine_chat.py +0 -0
  333. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/release_cordon.py +0 -0
  334. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/release_propagate.py +0 -0
  335. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/release_verify.py +0 -0
  336. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/release_window.py +0 -0
  337. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/repo_edit.py +0 -0
  338. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/repo_onboard.py +0 -0
  339. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/reports.py +0 -0
  340. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/revalidate.py +0 -0
  341. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/review.py +0 -0
  342. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/scorecard.py +0 -0
  343. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/serve_app.py +0 -0
  344. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  345. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  346. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  347. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  348. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  349. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/skills/portal-followup/SKILL.md +0 -0
  350. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  351. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  352. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/skills/update-issue/SKILL.md +0 -0
  353. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/smoke.py +0 -0
  354. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/spend_ceiling.py +0 -0
  355. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/split_work.py +0 -0
  356. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/stage_projection.py +0 -0
  357. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/state.py +0 -0
  358. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/test_author.py +0 -0
  359. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/test_chat.py +0 -0
  360. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/test_orchestrator.py +0 -0
  361. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/test_report.py +0 -0
  362. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/tui_release.py +0 -0
  363. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/usage.py +0 -0
  364. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/usage_limits.py +0 -0
  365. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/usage_rollup.py +0 -0
  366. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coord/worker_events.py +0 -0
  367. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/coordinator.example.yml +0 -0
  368. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/deploy/coord-agent.service +0 -0
  369. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/deploy/coord-db-backup.service +0 -0
  370. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/deploy/coord-db-backup.sh +0 -0
  371. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/deploy/coord-db-backup.timer +0 -0
  372. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/deploy/coord-drive-queue.service +0 -0
  373. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/deploy/coord-drive-queue.timer +0 -0
  374. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/deploy/coord-notify.service +0 -0
  375. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/deploy/coord-notify.timer +0 -0
  376. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/deploy/coord-release-propagate.service +0 -0
  377. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/deploy/coord-release-propagate.timer +0 -0
  378. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/deploy/coord-release-window.service +0 -0
  379. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/deploy/coord-release-window.timer +0 -0
  380. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/deploy/coord-serve.service +0 -0
  381. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/deploy/coord-web-dist-build.service +0 -0
  382. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/deploy/coord-web-dist-build.sh +0 -0
  383. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/deploy/coord-web-dist-build.timer +0 -0
  384. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/deploy/coord-web-rollback.sh +0 -0
  385. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/deploy/coord-web.service +0 -0
  386. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/deploy/node-shim.sh +0 -0
  387. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/docs/ADR_COORD_WEB_DIST.md +0 -0
  388. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/docs/AGENT_OPERATIONS.md +0 -0
  389. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/docs/ARCHITECTURE.md +0 -0
  390. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/docs/ARCH_SECURITY_GATES.md +0 -0
  391. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/docs/COCKPIT.md +0 -0
  392. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/docs/CONTROL_CENTER.md +0 -0
  393. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/docs/COST_DISCIPLINE.md +0 -0
  394. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/docs/CROSS_PLATFORM.md +0 -0
  395. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/docs/CUSTOMER_PORTAL.md +0 -0
  396. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/docs/DRIVE_QUEUE.md +0 -0
  397. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/docs/EPHEMERAL_WORKERS.md +0 -0
  398. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/docs/FORGE_MIGRATION.md +0 -0
  399. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/docs/GRAPHIFY_SETUP.md +0 -0
  400. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/docs/ISSUE_GUIDANCE.md +0 -0
  401. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/docs/MAC_MINI.md +0 -0
  402. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  403. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/docs/NOTIFIER.md +0 -0
  404. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/docs/OPENCODE_VERIFICATION.md +0 -0
  405. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/docs/ORACLE_LOOP.md +0 -0
  406. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/docs/PHONE_WEBAPP.md +0 -0
  407. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/docs/PIPELINE_V2.md +0 -0
  408. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/docs/PLATFORM_EVOLUTION.md +0 -0
  409. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/docs/SECOND_BACKEND.md +0 -0
  410. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/docs/STORE_SERVICE.md +0 -0
  411. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  412. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/docs/WEB_CONTROL_CENTER.md +0 -0
  413. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/docs/WSL_WINDOWS_WORKER.md +0 -0
  414. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/docs/mocks/web/README.md +0 -0
  415. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/docs/mocks/web/_tokens.css +0 -0
  416. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/docs/mocks/web/issue-detail.html +0 -0
  417. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/docs/mocks/web/pipeline-narrow.html +0 -0
  418. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/docs/mocks/web/pipeline-wide.html +0 -0
  419. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/graphify-out/.gitignore +0 -0
  420. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/install-agent.sh +0 -0
  421. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/pyproject.toml +0 -0
  422. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/scripts/audit_review_verdict_overrides.py +0 -0
  423. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  424. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/scripts/azure-workers/build-worker-image.sh +0 -0
  425. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/scripts/azure-workers/coordinator-machine.py +0 -0
  426. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/scripts/azure-workers/epic-down.sh +0 -0
  427. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/scripts/azure-workers/epic-up.sh +0 -0
  428. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/scripts/azure-workers/preflight.sh +0 -0
  429. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/scripts/azure-workers/provision-worker.sh +0 -0
  430. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  431. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  432. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/scripts/azure-workers/verify-github-token.sh +0 -0
  433. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/scripts/codegen.py +0 -0
  434. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/scripts/coord-test-runner.sh +0 -0
  435. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/scripts/drive-batch.sh +0 -0
  436. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/scripts/gen_board_fixture.py +0 -0
  437. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/scripts/next_release_tag.py +0 -0
  438. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/scripts/run_tests_in_populated_home.sh +0 -0
  439. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/scripts/run_tests_without_gh.sh +0 -0
  440. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/scripts/smoke_437_interactive.py +0 -0
  441. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/scripts/verify_878_review_capture.py +0 -0
  442. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/scripts/verify_release_published.py +0 -0
  443. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/scripts/verify_release_wheel.py +0 -0
  444. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/setup.cfg +0 -0
  445. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/SMOKE_SET.md +0 -0
  446. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/__init__.py +0 -0
  447. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  448. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/acceptance/ms-33/contract.md +0 -0
  449. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/acceptance/ms-33/manifest.yml +0 -0
  450. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  451. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  452. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  453. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  454. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/acceptance/ms-37/conftest.py +0 -0
  455. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/acceptance/ms-37/contract.md +0 -0
  456. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/acceptance/ms-37/manifest.yml +0 -0
  457. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  458. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  459. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/acceptance/ms-38/contract.md +0 -0
  460. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/acceptance/ms-38/manifest.yml +0 -0
  461. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  462. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  463. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  464. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  465. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  466. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  467. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  468. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  469. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  470. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  471. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/acceptance/ms-51/contract.md +0 -0
  472. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  473. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  474. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/acceptance/ms-51/manifest.yml +0 -0
  475. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  476. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/acceptance/ms-51/tsconfig.json +0 -0
  477. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
  478. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
  479. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/acceptance/ms-65/contract.md +0 -0
  480. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
  481. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/acceptance/ms-65/manifest.yml +0 -0
  482. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
  483. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
  484. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
  485. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
  486. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
  487. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
  488. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
  489. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
  490. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
  491. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
  492. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  493. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/conftest.py +0 -0
  494. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/fixtures/board-pipeline-basic.json +0 -0
  495. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  496. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  497. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  498. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  499. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/fixtures/playwright/all_pass.json +0 -0
  500. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  501. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/fixtures/playwright/mixed_fail.json +0 -0
  502. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  503. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  504. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/fixtures/playwright/skip.json +0 -0
  505. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/fixtures/playwright/truncated.json +0 -0
  506. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  507. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  508. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  509. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  510. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  511. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  512. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  513. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  514. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_acceptance.py +0 -0
  515. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_acceptance_drivers.py +0 -0
  516. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_agent.py +0 -0
  517. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_agent_api_error.py +0 -0
  518. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_agent_app.py +0 -0
  519. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_agent_branch_base.py +0 -0
  520. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_agent_branch_capture.py +0 -0
  521. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_agent_config_free_1712.py +0 -0
  522. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_agent_deploy_units_endpoint.py +0 -0
  523. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_agent_dirty_worktree.py +0 -0
  524. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  525. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_agent_graph_self_heal.py +0 -0
  526. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_agent_health_h3.py +0 -0
  527. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_agent_idle_restart.py +0 -0
  528. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_agent_push_failure.py +0 -0
  529. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_agent_reap.py +0 -0
  530. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_agent_repos_and_pull.py +0 -0
  531. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_agent_restart_services_endpoint.py +0 -0
  532. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_agent_skills_self_heal.py +0 -0
  533. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_agent_startup_diagnostics.py +0 -0
  534. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_agent_update.py +0 -0
  535. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_agent_update_bluegreen.py +0 -0
  536. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_agent_usage_limit.py +0 -0
  537. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_agent_zero_commit.py +0 -0
  538. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_ambient_home_isolation.py +0 -0
  539. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_approve_reject_plan.py +0 -0
  540. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_approve_usage_gate.py +0 -0
  541. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_assignment_already_recorded_daemon.py +0 -0
  542. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_audit_log.py +0 -0
  543. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_audit_outcome.py +0 -0
  544. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_audit_query.py +0 -0
  545. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_auto_loop.py +0 -0
  546. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_auto_release_publish_2035.py +0 -0
  547. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_base_checkout_restore.py +0 -0
  548. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_block_log.py +0 -0
  549. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_board_cap_762.py +0 -0
  550. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_board_fixture.py +0 -0
  551. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_board_read_path.py +0 -0
  552. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_board_service.py +0 -0
  553. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_board_state.py +0 -0
  554. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_board_wire.py +0 -0
  555. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_brain.py +0 -0
  556. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_branch_model.py +0 -0
  557. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_bug_intake.py +0 -0
  558. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_build_worker_image_env_update.py +0 -0
  559. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_cargo_cache.py +0 -0
  560. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_ci_acceptance_gate_1950.py +0 -0
  561. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_ci_parity_2091.py +0 -0
  562. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_ci_store.py +0 -0
  563. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_claim.py +0 -0
  564. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_cli_acceptance.py +0 -0
  565. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_cli_assign.py +0 -0
  566. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  567. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_cli_assign_interactive_remote.py +0 -0
  568. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_cli_assign_provider.py +0 -0
  569. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  570. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_cli_audit.py +0 -0
  571. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_cli_chat_continue.py +0 -0
  572. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_cli_decide.py +0 -0
  573. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_cli_diagnose_config_provenance.py +0 -0
  574. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_cli_diagnose_graph.py +0 -0
  575. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_cli_doctor.py +0 -0
  576. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_cli_doctor_config_free_1801.py +0 -0
  577. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  578. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_cli_drive.py +0 -0
  579. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_cli_drive_queue.py +0 -0
  580. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_cli_escalate.py +0 -0
  581. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_cli_fix_headless_review.py +0 -0
  582. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_cli_gate_a.py +0 -0
  583. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_cli_install_drift.py +0 -0
  584. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_cli_install_skills.py +0 -0
  585. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_cli_issue_create_label.py +0 -0
  586. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_cli_issue_reopen.py +0 -0
  587. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_cli_merge.py +0 -0
  588. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_cli_milestone_assign.py +0 -0
  589. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_cli_milestone_capture.py +0 -0
  590. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_cli_milestone_chat_add_child.py +0 -0
  591. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_cli_milestone_dispatch.py +0 -0
  592. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_cli_milestone_gate_b.py +0 -0
  593. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_cli_milestone_gate_c.py +0 -0
  594. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_cli_milestone_order.py +0 -0
  595. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  596. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_cli_milestone_ship.py +0 -0
  597. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_cli_network.py +0 -0
  598. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_cli_new_issue_chat.py +0 -0
  599. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_cli_plans.py +0 -0
  600. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_cli_portal.py +0 -0
  601. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_cli_pull_artifact.py +0 -0
  602. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_cli_queue.py +0 -0
  603. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_cli_reattach_sessions.py +0 -0
  604. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_cli_refine_board.py +0 -0
  605. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_cli_release_preflight.py +0 -0
  606. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_cli_release_propagate.py +0 -0
  607. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_cli_release_window.py +0 -0
  608. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_cli_repo_2220.py +0 -0
  609. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_cli_scorecard.py +0 -0
  610. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_cli_set_review_findings.py +0 -0
  611. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_cli_status_advisory_terminal.py +0 -0
  612. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_cli_status_merge_queue.py +0 -0
  613. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_cli_status_provider.py +0 -0
  614. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_cli_status_review_finalizing.py +0 -0
  615. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_cli_status_test_failed_tag.py +0 -0
  616. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_cli_status_usage_limit.py +0 -0
  617. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_cli_sync_comments_873.py +0 -0
  618. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_cli_test_plan.py +0 -0
  619. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_cli_track.py +0 -0
  620. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_cli_tui_update.py +0 -0
  621. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_cli_wait.py +0 -0
  622. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_client_base_install.py +0 -0
  623. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_comments.py +0 -0
  624. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_completion_summary.py +0 -0
  625. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_config.py +0 -0
  626. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_config_acceptance.py +0 -0
  627. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_config_audit.py +0 -0
  628. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_config_pricing.py +0 -0
  629. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  630. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_config_usage_gate.py +0 -0
  631. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_conflict_fix.py +0 -0
  632. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_conflict_fix_semantic.py +0 -0
  633. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_coord_test.py +0 -0
  634. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_coord_test_runner_baseline.py +0 -0
  635. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_coord_test_runner_populated_home.py +0 -0
  636. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_coord_test_runner_routing.py +0 -0
  637. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_coord_test_runner_toolchain.py +0 -0
  638. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_coord_web_sse_restart_live.py +0 -0
  639. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_coordinator_machine.py +0 -0
  640. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_cross_platform_imports.py +0 -0
  641. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_dashboard.py +0 -0
  642. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_dashboard_fixture.py +0 -0
  643. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_dashboard_terminal.py +0 -0
  644. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_dashboard_terminal_live.py +0 -0
  645. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_db.py +0 -0
  646. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_dead_end.py +0 -0
  647. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_deploy_coord_db_backup.py +0 -0
  648. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_deploy_coord_web_dist.py +0 -0
  649. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_deploy_coord_web_rollback.py +0 -0
  650. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_deploy_drive_queue_unit.py +0 -0
  651. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_deploy_manifest.py +0 -0
  652. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_deploy_units_lane.py +0 -0
  653. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_deploy_web_unit.py +0 -0
  654. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_deps.py +0 -0
  655. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_diagnose.py +0 -0
  656. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_dispatch.py +0 -0
  657. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_dispatch_target_validation.py +0 -0
  658. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_dist_name.py +0 -0
  659. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_done_housekeeping.py +0 -0
  660. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_drive_queue.py +0 -0
  661. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_drive_state.py +0 -0
  662. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_drive_tmux.py +0 -0
  663. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_epic_up_capability_detection.py +0 -0
  664. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  665. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_epic_up_image_provenance.py +0 -0
  666. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_errors.py +0 -0
  667. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_events.py +0 -0
  668. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_failure_class.py +0 -0
  669. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_filelock.py +0 -0
  670. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  671. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_fix_of_force_override.py +0 -0
  672. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_fleet_config_health.py +0 -0
  673. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_fleet_health_probes.py +0 -0
  674. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_fleet_health_snapshot.py +0 -0
  675. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_freshness.py +0 -0
  676. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_gate_a.py +0 -0
  677. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_gate_b.py +0 -0
  678. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_gate_snapshot_staleness.py +0 -0
  679. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_gates.py +0 -0
  680. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  681. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_generated_types_fixture.py +0 -0
  682. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_github_ops.py +0 -0
  683. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_goal.py +0 -0
  684. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_graph_health.py +0 -0
  685. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_graph_selfheal_absent_2237.py +0 -0
  686. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_handoff.py +0 -0
  687. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_health_checks.py +0 -0
  688. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_health_cli.py +0 -0
  689. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_health_cli_graph.py +0 -0
  690. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_health_config.py +0 -0
  691. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_health_context.py +0 -0
  692. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_health_deploy_lane_facts.py +0 -0
  693. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_health_incident_regression.py +0 -0
  694. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_health_pypi.py +0 -0
  695. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_health_registry.py +0 -0
  696. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_health_timer_active.py +0 -0
  697. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_health_toolchain.py +0 -0
  698. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_health_unit_drift.py +0 -0
  699. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_health_unit_enablement.py +0 -0
  700. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_hooks.py +0 -0
  701. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_human_attended_437.py +0 -0
  702. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_init.py +0 -0
  703. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_integration.py +0 -0
  704. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_interactive_briefing_echo.py +0 -0
  705. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_interactive_prefill_state.py +0 -0
  706. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_interactive_session_relaunch.py +0 -0
  707. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_interactive_test_verdict_backstop.py +0 -0
  708. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_interactive_token_attribution.py +0 -0
  709. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_interactive_worktree.py +0 -0
  710. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_issue_store_seam.py +0 -0
  711. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_liveness_auditor.py +0 -0
  712. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_liveness_notify.py +0 -0
  713. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_machine_pause.py +0 -0
  714. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_merge_queue.py +0 -0
  715. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_merge_verify.py +0 -0
  716. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_milestone_chat.py +0 -0
  717. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_milestone_dispatch.py +0 -0
  718. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_milestone_gate.py +0 -0
  719. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_milestone_order.py +0 -0
  720. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_milestone_seam.py +0 -0
  721. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_mock_author.py +0 -0
  722. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_model_tiering.py +0 -0
  723. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_models.py +0 -0
  724. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_models_config_labels.py +0 -0
  725. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_needs_attention.py +0 -0
  726. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_network.py +0 -0
  727. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_new_issue_chat.py +0 -0
  728. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_next_release_tag.py +0 -0
  729. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_no_direct_gh_calls.py +0 -0
  730. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_node_shim.py +0 -0
  731. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_notifier_baseline.py +0 -0
  732. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_notifier_cli.py +0 -0
  733. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_notifier_collect.py +0 -0
  734. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_notifier_config.py +0 -0
  735. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_notifier_drive_seam.py +0 -0
  736. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_notifier_isolation.py +0 -0
  737. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_notifier_predicate.py +0 -0
  738. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_notifier_quiet_hours.py +0 -0
  739. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_notifier_service.py +0 -0
  740. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_notify.py +0 -0
  741. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_notify_drain.py +0 -0
  742. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_openapi.py +0 -0
  743. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_operational_defaults.py +0 -0
  744. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_overlap_fence.py +0 -0
  745. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_overlap_predict.py +0 -0
  746. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_packaged_deploy_units.py +0 -0
  747. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_parentage.py +0 -0
  748. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_paste_landed.py +0 -0
  749. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_pipeline.py +0 -0
  750. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_plan_followup_approve_plan_command.py +0 -0
  751. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_plan_followup_pr_command.py +0 -0
  752. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_plan_followup_review_command.py +0 -0
  753. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_plan_only.py +0 -0
  754. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_plan_parser.py +0 -0
  755. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_platform_paths.py +0 -0
  756. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_portal_bridge.py +0 -0
  757. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_portal_config.py +0 -0
  758. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_portal_sync.py +0 -0
  759. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_pr_body_lint.py +0 -0
  760. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_prereqs.py +0 -0
  761. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_production_db_guard.py +0 -0
  762. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_progress.py +0 -0
  763. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_provider_seam.py +0 -0
  764. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_providers.py +0 -0
  765. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_providers_config_labels.py +0 -0
  766. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_providers_pty.py +0 -0
  767. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_quiet_hours.py +0 -0
  768. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_quiet_hours_store_2146.py +0 -0
  769. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_reap_merged_sessions.py +0 -0
  770. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_reap_stale_interactive_tick.py +0 -0
  771. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_reconcile.py +0 -0
  772. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_reconcile_branch.py +0 -0
  773. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_reconcile_completions.py +0 -0
  774. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_reconcile_merges.py +0 -0
  775. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_reconcile_no_agent_record.py +0 -0
  776. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_reconcile_tick.py +0 -0
  777. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_reconcile_usage_limit_done.py +0 -0
  778. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_refine_chat.py +0 -0
  779. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_release_cordon_2101.py +0 -0
  780. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  781. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_release_cordon_deadlock_2240.py +0 -0
  782. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_release_propagate.py +0 -0
  783. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_release_unified_1242.py +0 -0
  784. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_release_verify.py +0 -0
  785. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_release_window.py +0 -0
  786. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_remote_auto_prune.py +0 -0
  787. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_remote_interactive_reaper.py +0 -0
  788. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_repo_edit_2220.py +0 -0
  789. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_repo_graph_fleet_2237.py +0 -0
  790. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_repo_onboard_2220.py +0 -0
  791. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_report_result_push.py +0 -0
  792. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_reports.py +0 -0
  793. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_retry.py +0 -0
  794. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_retry_advisory_1606.py +0 -0
  795. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_retry_type_1636.py +0 -0
  796. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_revalidate.py +0 -0
  797. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_review.py +0 -0
  798. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_review_end_review_without_verdict.py +0 -0
  799. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_review_parse_failure_diagnostic.py +0 -0
  800. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_review_reaffirm.py +0 -0
  801. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_review_state.py +0 -0
  802. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_review_verdict_backstop.py +0 -0
  803. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_review_verdict_override_audit.py +0 -0
  804. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_review_verdict_relay.py +0 -0
  805. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_review_zero_commits.py +0 -0
  806. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_scoped_review_wiring.py +0 -0
  807. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_scorecard.py +0 -0
  808. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_serve.py +0 -0
  809. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_serve_app_board_trim.py +0 -0
  810. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_session.py +0 -0
  811. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_slice_issue_attribution.py +0 -0
  812. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_smoke.py +0 -0
  813. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_smoke_live_checkout_restore.py +0 -0
  814. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_smoke_workflow.py +0 -0
  815. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_spend_ceiling.py +0 -0
  816. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_spend_ceiling_coordinator.py +0 -0
  817. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_split.py +0 -0
  818. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_split_work.py +0 -0
  819. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_stage_projection.py +0 -0
  820. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_stalled_pipeline.py +0 -0
  821. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_state.py +0 -0
  822. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_state_review_findings_daemon.py +0 -0
  823. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_status_fleet_footer.py +0 -0
  824. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_stop_1567.py +0 -0
  825. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_stuck.py +0 -0
  826. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_terminal_command.py +0 -0
  827. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_test_author.py +0 -0
  828. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_test_chat.py +0 -0
  829. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_test_orchestrator.py +0 -0
  830. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_test_report.py +0 -0
  831. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_test_verdict_parsing.py +0 -0
  832. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_test_verdict_transcript_floor.py +0 -0
  833. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_thin_client_board_audit.py +0 -0
  834. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_thin_client_config_load_1080.py +0 -0
  835. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_thin_client_daemon_routing_906.py +0 -0
  836. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_tmux_host.py +0 -0
  837. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_tmux_session.py +0 -0
  838. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_transcript_floor.py +0 -0
  839. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_usage.py +0 -0
  840. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_usage_limits.py +0 -0
  841. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_usage_rollup.py +0 -0
  842. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_venv_live_install_2121.py +0 -0
  843. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_version_single_source.py +0 -0
  844. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_watch.py +0 -0
  845. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  846. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_worker_events.py +0 -0
  847. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_worker_image_pin_sync.py +0 -0
  848. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_worker_safety.py +0 -0
  849. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_worker_test_scoping.py +0 -0
  850. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_worktree.py +0 -0
  851. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  852. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tui/Cargo.lock +0 -0
  853. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tui/Cargo.toml +0 -0
  854. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tui/cargo-config-local-quadraui.toml.example +0 -0
  855. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tui/src/app/audit.rs +0 -0
  856. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tui/src/app/chat.rs +0 -0
  857. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tui/src/app/data.rs +0 -0
  858. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tui/src/app/dialogs.rs +0 -0
  859. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tui/src/app/doc_tabs.rs +0 -0
  860. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tui/src/app/drive.rs +0 -0
  861. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tui/src/app/drive_queue.rs +0 -0
  862. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tui/src/app/escalation.rs +0 -0
  863. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tui/src/app/fleet_health.rs +0 -0
  864. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tui/src/app/fleet_sessions.rs +0 -0
  865. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tui/src/app/fleet_terminals.rs +0 -0
  866. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tui/src/app/format.rs +0 -0
  867. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tui/src/app/milestone_dag.rs +0 -0
  868. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tui/src/app/msv.rs +0 -0
  869. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tui/src/app/plans.rs +0 -0
  870. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tui/src/app/sessions.rs +0 -0
  871. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tui/src/app/settings_ui.rs +0 -0
  872. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tui/src/app/sidebar.rs +0 -0
  873. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tui/src/app/terminal.rs +0 -0
  874. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tui/src/app/workspace.rs +0 -0
  875. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tui/src/bin/gtk.rs +0 -0
  876. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tui/src/commands.rs +0 -0
  877. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tui/src/lib.rs +0 -0
  878. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tui/src/main.rs +0 -0
  879. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tui/src/settings.rs +0 -0
  880. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tui/tests/acceptance.rs +0 -0
  881. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tui/tests/cli.rs +0 -0
  882. {code_coordinator-0.5.167 → code_coordinator-0.5.170}/tui/tests/fixtures/board_sample.json +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-coordinator
3
- Version: 0.5.167
3
+ Version: 0.5.170
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.167
3
+ Version: 0.5.170
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
@@ -125,6 +125,7 @@ coord/reports.py
125
125
  coord/revalidate.py
126
126
  coord/review.py
127
127
  coord/scorecard.py
128
+ coord/self_health.py
128
129
  coord/serve_app.py
129
130
  coord/smoke.py
130
131
  coord/spend_ceiling.py
@@ -492,6 +493,7 @@ tests/test_cli_chat_continue.py
492
493
  tests/test_cli_decide.py
493
494
  tests/test_cli_diagnose_config_provenance.py
494
495
  tests/test_cli_diagnose_graph.py
496
+ tests/test_cli_diagnose_self.py
495
497
  tests/test_cli_doctor.py
496
498
  tests/test_cli_doctor_config_free_1801.py
497
499
  tests/test_cli_doctor_config_mismatch_1712.py
@@ -726,6 +728,7 @@ tests/test_review_verdict_relay.py
726
728
  tests/test_review_zero_commits.py
727
729
  tests/test_scoped_review_wiring.py
728
730
  tests/test_scorecard.py
731
+ tests/test_self_health.py
729
732
  tests/test_serve.py
730
733
  tests/test_serve_app_board_trim.py
731
734
  tests/test_session.py
@@ -306,6 +306,7 @@
306
306
  "coord/revalidate.py",
307
307
  "coord/review.py",
308
308
  "coord/scorecard.py",
309
+ "coord/self_health.py",
309
310
  "coord/serve_app.py",
310
311
  "coord/skills/coord-dispatch-verbs/SKILL.md",
311
312
  "coord/skills/drive-queue-preflight/SKILL.md",
@@ -538,6 +539,7 @@
538
539
  "tests/test_cli_decide.py",
539
540
  "tests/test_cli_diagnose_config_provenance.py",
540
541
  "tests/test_cli_diagnose_graph.py",
542
+ "tests/test_cli_diagnose_self.py",
541
543
  "tests/test_cli_doctor.py",
542
544
  "tests/test_cli_doctor_config_free_1801.py",
543
545
  "tests/test_cli_doctor_config_mismatch_1712.py",
@@ -772,6 +774,7 @@
772
774
  "tests/test_review_zero_commits.py",
773
775
  "tests/test_scoped_review_wiring.py",
774
776
  "tests/test_scorecard.py",
777
+ "tests/test_self_health.py",
775
778
  "tests/test_serve.py",
776
779
  "tests/test_serve_app_board_trim.py",
777
780
  "tests/test_session.py",
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "0.5.167",
2
+ "tag": "0.5.170",
3
3
  "distance": 0,
4
- "node": "g9016461101b4920502a7937e28cfdc70410ffc2f",
4
+ "node": "g8abd90cf35709226356d93ec35209ccca9e9ee6c",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-19"
@@ -1561,6 +1561,30 @@ def _diagnose_via_daemon(svc, params: dict) -> None:
1561
1561
  "daemon host / operator box. Read-only, no network required."
1562
1562
  ),
1563
1563
  )
1564
+ @click.option(
1565
+ "--self",
1566
+ "self_check",
1567
+ is_flag=True,
1568
+ help=(
1569
+ "#2436: report whether THIS coordinator process's own editable "
1570
+ "`coord` install — wherever `coord.__file__` actually resolves, "
1571
+ "never an assumed ~/src/<name> path — is behind "
1572
+ "origin/<default_branch>. A merged coord/** fix (other than "
1573
+ "agent.py/serve_app.py) is silently inert here until this checkout "
1574
+ "is pulled (docs/OPERATING_GOTCHAS.md #1). Fetches from origin "
1575
+ "unless --no-fetch is passed."
1576
+ ),
1577
+ )
1578
+ @click.option(
1579
+ "--no-fetch",
1580
+ "self_no_fetch",
1581
+ is_flag=True,
1582
+ help=(
1583
+ "With --self, skip the `git fetch` and compare HEAD against "
1584
+ "whatever origin/<default_branch> the last fetch already left "
1585
+ "behind."
1586
+ ),
1587
+ )
1564
1588
 
1565
1589
 
1566
1590
  @_CONFIG_OPTION
@@ -1575,6 +1599,8 @@ def diagnose(
1575
1599
  orphan_worktrees: bool = False,
1576
1600
  graph_health: bool = False,
1577
1601
  config_provenance_check: bool = False,
1602
+ self_check: bool = False,
1603
+ self_no_fetch: bool = False,
1578
1604
  ) -> None:
1579
1605
  """Per-stage doctor — diagnose, best-effort recover, optional reset."""
1580
1606
  # ── graphify graph freshness sweep (read-only) ───────────────────────────
@@ -1587,6 +1613,11 @@ def diagnose(
1587
1613
  _diagnose_config_provenance()
1588
1614
  return
1589
1615
 
1616
+ # ── #2436: THIS process's own editable coord install freshness ──────────
1617
+ if self_check:
1618
+ _diagnose_self(fetch=not self_no_fetch)
1619
+ return
1620
+
1590
1621
  # ── #618: --orphan-worktrees fleet sweep ─────────────────────────────────
1591
1622
  if orphan_worktrees:
1592
1623
  _diagnose_orphan_worktrees(config_path, dry_run=dry_run)
@@ -1762,6 +1793,40 @@ def _diagnose_config_provenance() -> None:
1762
1793
  click.echo(summary_line(prov))
1763
1794
 
1764
1795
 
1796
+ def _diagnose_self(*, fetch: bool) -> None:
1797
+ """Report whether THIS process's own editable ``coord`` install is
1798
+ behind origin (#2436).
1799
+
1800
+ Read-only, local-machine only — same family as ``--graph``/
1801
+ ``--config-provenance``/``--orphan-worktrees``. Answers the question
1802
+ ``docs/OPERATING_GOTCHAS.md`` #1 names but nothing previously checked:
1803
+ "did the `git pull` this editable install depends on for `coord/**`
1804
+ fixes to go live actually happen?" A coordinator host running last
1805
+ week's code gives zero signal of it otherwise — every board row and
1806
+ escalation reads exactly as if a merged fix were still unfixed (the
1807
+ #2286/#2426 incident this closes).
1808
+
1809
+ Locates the install via ``coord.self_health.default_install_path()`` —
1810
+ ``Path(coord.__file__).resolve().parents[1]``, never an assumed
1811
+ ``~/src/<name>`` path (the doc's own assumption had drifted from reality
1812
+ on the host that hit this). Each coordinator/drive-queue host has its
1813
+ own independent editable checkout that can drift independently, so this
1814
+ is deliberately per-machine, run where it's invoked, exactly like
1815
+ ``--graph``.
1816
+ """
1817
+ from coord.self_health import ( # noqa: PLC0415
1818
+ default_install_path,
1819
+ format_status_lines,
1820
+ self_freshness,
1821
+ summary_line as self_summary_line,
1822
+ )
1823
+
1824
+ st = self_freshness(install_path=default_install_path(), fetch=fetch)
1825
+ for line in format_status_lines(st):
1826
+ click.echo(f" {line}")
1827
+ click.echo(self_summary_line(st))
1828
+
1829
+
1765
1830
  def _diagnose_orphan_worktrees(config_path: Path, *, dry_run: bool) -> None:
1766
1831
  """#618: local fleet sweep — find and prune orphaned coordinator worktrees.
1767
1832
 
@@ -1254,6 +1254,30 @@ class MergeVerifier(Protocol):
1254
1254
  def branch_head_sha(self, state: IssueState) -> str | None: ...
1255
1255
 
1256
1256
 
1257
+ def _remote_matches_repo(remote_url: str, repo_github: str) -> bool:
1258
+ """Loosely compare a ``git remote get-url origin`` URL against the
1259
+ ``owner/repo`` GitHub identifier it should point at (#2437).
1260
+
1261
+ Tolerant of the URL shapes git actually produces: ``https://github.com/
1262
+ owner/repo(.git)``, ``git@github.com:owner/repo(.git)``, and
1263
+ ``ssh://git@github.com/owner/repo(.git)``. Anything else (a bare path, a
1264
+ non-GitHub host) simply won't match — which is the correct, fail-closed
1265
+ outcome: this is a sanity check that the checkout points at the expected
1266
+ project, not a general-purpose git URL parser.
1267
+ """
1268
+ url = remote_url.strip()
1269
+ if url.endswith(".git"):
1270
+ url = url[:-4]
1271
+ if "://" in url:
1272
+ _scheme, _, rest = url.partition("://")
1273
+ _host, _, path = rest.partition("/")
1274
+ url = path
1275
+ elif "@" in url and ":" in url:
1276
+ _user_host, _, path = url.partition(":")
1277
+ url = path
1278
+ return url.strip("/").lower() == repo_github.strip("/").lower()
1279
+
1280
+
1257
1281
  @dataclass
1258
1282
  class GitMergeVerifier:
1259
1283
  """Real implementation: ``git`` for commits, ``gh`` for merge state.
@@ -1264,12 +1288,60 @@ class GitMergeVerifier:
1264
1288
 
1265
1289
  repo_path: str = ""
1266
1290
  warn: Callable[[str], None] = lambda msg: None
1291
+ # #2437: memoizes which (base, reason) pairs have already been warned
1292
+ # about, so a checkout that stays broken across many drive-loop polls
1293
+ # gets exactly one loud warning instead of one per poll. Keyed on the
1294
+ # reason text too, so a checkout that later fails a *different* check
1295
+ # (e.g. it grows a valid `.git` but the wrong `origin`) still warns once
1296
+ # for the new problem.
1297
+ _warned: set[tuple[str, str]] = field(default_factory=set, init=False, repr=False)
1267
1298
 
1268
1299
  def _base(self, state: IssueState) -> Path | None:
1269
1300
  base = Path(self.repo_path).expanduser() if self.repo_path else (
1270
1301
  Path.home() / "src" / state.repo
1271
1302
  )
1272
- return base if (base / ".git").exists() else None
1303
+ if not (base / ".git").exists():
1304
+ return None
1305
+ reason = self._unusable_reason(base, state)
1306
+ if reason is None:
1307
+ return base
1308
+ key = (str(base), reason)
1309
+ if key not in self._warned:
1310
+ self._warned.add(key)
1311
+ self.warn(
1312
+ f"local checkout {base} cannot be used for merge "
1313
+ f"verification of {state.repo} — {reason} (#2437). Merge "
1314
+ "verification will keep returning \"could not verify\" "
1315
+ "(never a false empty-branch) until this is fixed: replace "
1316
+ "it with a real clone of the repo, or point `coord drive` "
1317
+ "at one via --repo-path."
1318
+ )
1319
+ return None
1320
+
1321
+ def _unusable_reason(self, base: Path, state: IssueState) -> str | None:
1322
+ """Why *base* can't be trusted for merge verification, or ``None`` if
1323
+ it can.
1324
+
1325
+ A ``.git`` directory existing is necessary but not sufficient
1326
+ (claude-coordinator#2437): an interrupted/stub `git init` leaves a
1327
+ `.git` directory with no `HEAD`/`objects`/`refs`, and a checkout of
1328
+ the wrong project entirely leaves a perfectly valid `.git` that
1329
+ still can't answer questions about *this* repo. Both must be caught
1330
+ here rather than surfacing as an unexplained, indefinitely-retried
1331
+ ``None`` from :meth:`branch_has_commits`.
1332
+ """
1333
+ if self._git(base, "rev-parse", "--is-inside-work-tree").returncode != 0:
1334
+ return "not a usable git working tree (`git rev-parse --is-inside-work-tree` failed)"
1335
+ remote = self._git(base, "remote", "get-url", "origin")
1336
+ url = (remote.stdout or "").strip()
1337
+ if remote.returncode != 0 or not url:
1338
+ return "has no 'origin' remote configured"
1339
+ if state.repo_github and not _remote_matches_repo(url, state.repo_github):
1340
+ return (
1341
+ f"'origin' remote ({url!r}) does not match the expected "
1342
+ f"repo {state.repo_github!r}"
1343
+ )
1344
+ return None
1273
1345
 
1274
1346
  @staticmethod
1275
1347
  def _git(base: Path, *args: str) -> subprocess.CompletedProcess[str]:
@@ -0,0 +1,270 @@
1
+ """Freshness of THIS coordinator process's own editable ``coord`` install
2
+ (#2436).
3
+
4
+ ``docs/OPERATING_GOTCHAS.md`` #1 already names the risk: any fix to
5
+ ``coord/**`` (other than ``agent.py``/``serve_app.py``, which have their own
6
+ deploy steps) is live the instant ``git pull`` lands in whatever checkout
7
+ ``coord.__file__`` resolves into — no restart needed. But nothing has ever
8
+ checked whether that ``git pull`` happened. A coordinator host can keep
9
+ running last week's code indefinitely with zero signal: every board row,
10
+ every ``coord diagnose`` finding, every escalation reads exactly as if the
11
+ bug behind it were still unfixed, because the process producing them
12
+ genuinely does not have the fix.
13
+
14
+ This is the #2286 incident: a fix had already merged to ``origin/main``, but
15
+ this host's installed ``coord`` was one commit behind — nothing had pulled it
16
+ — so every symptom looked identical to "still broken", and the actual cause
17
+ took manual ``git log``/``ps aux``/``tmux capture-pane`` archaeology to find.
18
+
19
+ Mirrors :mod:`coord.graph_health` / :mod:`coord.fleet_config_health`'s shape:
20
+ one read-only, best-effort probe (:func:`self_freshness`) plus a renderer,
21
+ wired into ``coord diagnose --self``.
22
+
23
+ **Locates the ACTUAL running install, never an assumed path.** The #2436
24
+ incident's second half was exactly a doc/reality mismatch:
25
+ ``docs/OPERATING_GOTCHAS.md`` assumed the editable install lives at
26
+ ``~/src/claude-coordinator``; the real install on that host resolved to
27
+ ``~/src/code-coordinator``, a second, disconnected checkout. So this module
28
+ never guesses a ``~/src/<name>`` path — it asks the interpreter that is
29
+ actually running: ``Path(coord.__file__).resolve().parents[1]``.
30
+ """
31
+
32
+ from __future__ import annotations
33
+
34
+ import os
35
+ import subprocess
36
+ from dataclasses import dataclass
37
+ from pathlib import Path
38
+
39
+
40
+ def default_install_path() -> Path:
41
+ """Where THIS process's ``coord`` import resolves to.
42
+
43
+ ``$COORD_SELF_CHECKOUT`` overrides it (tests, and an operator who wants
44
+ to point this at a different checkout than the one currently running);
45
+ otherwise ``Path(coord.__file__).resolve().parents[1]`` — the package's
46
+ grandparent directory, i.e. the checkout/site-packages root, never an
47
+ assumed ``~/src/<name>`` path (see module docstring).
48
+
49
+ Computed fresh on every call, not a module-level constant, so a test can
50
+ override it via ``monkeypatch.setenv`` without fighting a value baked in
51
+ at import time — same convention as
52
+ :func:`coord.fleet_config_health.default_settings_dir`.
53
+ """
54
+ env = os.environ.get("COORD_SELF_CHECKOUT")
55
+ if env:
56
+ return Path(env).expanduser()
57
+ import coord as _coord # noqa: PLC0415 — avoid a self-import at module load
58
+
59
+ return Path(_coord.__file__).resolve().parents[1]
60
+
61
+
62
+ @dataclass
63
+ class SelfFreshness:
64
+ """Freshness of one checkout's ``coord`` install against its origin."""
65
+
66
+ install_path: Path
67
+ is_git_checkout: bool = False
68
+ default_branch: str | None = None
69
+ head_sha: str | None = None
70
+ origin_sha: str | None = None
71
+ commits_behind: int | None = None
72
+ # Whether a `git fetch` was attempted/succeeded before comparing. `None`
73
+ # means fetch was skipped (`fetch=False`); the comparison then reads
74
+ # whatever origin/<branch> the last fetch left behind — same
75
+ # never-fetch-by-default posture as coord.graph_health's origin check,
76
+ # available here as an opt-out for callers on a fast/tight budget.
77
+ fetch_ok: bool | None = None
78
+ fetch_error: str | None = None
79
+ # Set when freshness could not be determined at all (no report, no git,
80
+ # no origin ref) — never silently reported as "up to date".
81
+ unknown_reason: str | None = None
82
+
83
+ @property
84
+ def stale(self) -> bool:
85
+ """HEAD is behind ``origin/<default_branch>`` by at least one commit.
86
+
87
+ Deliberately False — not True — when this could not be proven
88
+ (``unknown_reason`` set): an unknown must never be counted as drift,
89
+ the same rule :func:`coord.graph_health.GraphStatus.stale` follows.
90
+ """
91
+ return bool(self.commits_behind)
92
+
93
+ @property
94
+ def healthy(self) -> bool:
95
+ return self.is_git_checkout and self.unknown_reason is None and not self.stale
96
+
97
+
98
+ def _git_out(repo_path: Path, *args: str) -> str | None:
99
+ try:
100
+ r = subprocess.run(
101
+ ["git", *args],
102
+ cwd=str(repo_path),
103
+ capture_output=True,
104
+ text=True,
105
+ timeout=10.0,
106
+ )
107
+ except (subprocess.SubprocessError, OSError):
108
+ return None
109
+ if r.returncode != 0:
110
+ return None
111
+ return r.stdout.strip() or None
112
+
113
+
114
+ def _fetch(repo_path: Path, branch: str, timeout: float) -> tuple[bool, str | None]:
115
+ try:
116
+ r = subprocess.run(
117
+ ["git", "fetch", "--quiet", "origin", branch],
118
+ cwd=str(repo_path),
119
+ capture_output=True,
120
+ text=True,
121
+ timeout=timeout,
122
+ )
123
+ except (subprocess.SubprocessError, OSError) as exc:
124
+ return False, f"{type(exc).__name__}: {exc}"
125
+ if r.returncode != 0:
126
+ return False, (r.stderr or r.stdout).strip() or f"git fetch exited {r.returncode}"
127
+ return True, None
128
+
129
+
130
+ def _commits_behind(repo_path: Path, head: str, origin: str) -> int | None:
131
+ """Count of commits reachable from *origin* that are not in *head*
132
+ (``git rev-list --count head..origin``). ``None`` (never raises) when
133
+ git can't answer — an unproven comparison must not be reported as drift.
134
+ """
135
+ out = _git_out(repo_path, "rev-list", "--count", f"{head}..{origin}")
136
+ if out is None:
137
+ return None
138
+ try:
139
+ return int(out)
140
+ except ValueError:
141
+ return None
142
+
143
+
144
+ def _detect_default_branch(repo_path: Path) -> str:
145
+ """``origin/HEAD``'s branch name, falling back to ``"main"``.
146
+
147
+ Read-only (``symbolic-ref``, not a network call) — relies on whatever a
148
+ prior ``git clone``/``git remote set-head`` already recorded.
149
+ """
150
+ ref = _git_out(repo_path, "symbolic-ref", "refs/remotes/origin/HEAD")
151
+ if ref and "/" in ref:
152
+ return ref.rsplit("/", 1)[-1]
153
+ return "main"
154
+
155
+
156
+ def self_freshness(
157
+ *,
158
+ install_path: Path | None = None,
159
+ default_branch: str | None = None,
160
+ fetch: bool = True,
161
+ timeout: float = 10.0,
162
+ ) -> SelfFreshness:
163
+ """Freshness of *install_path* (default: :func:`default_install_path`)
164
+ against ``origin/<default_branch>``.
165
+
166
+ Read-only w.r.t. the working tree and best-effort: a missing ``.git``, an
167
+ unreadable HEAD, or a git failure all return a populated
168
+ :class:`SelfFreshness` with ``unknown_reason`` set rather than raising.
169
+
170
+ *fetch* (default ``True``) runs a bounded ``git fetch --quiet origin
171
+ <branch>`` before comparing — unlike :mod:`coord.graph_health`'s
172
+ never-fetch origin check, this probe's entire purpose is answering "did
173
+ anyone actually pull", so reading a stale remote-tracking ref by default
174
+ would silently defeat the point. A failed fetch is reported (never
175
+ raised) and the comparison falls back to whatever ``origin/<branch>`` the
176
+ last successful fetch left behind. Pass ``fetch=False`` to skip it
177
+ entirely (e.g. a caller on a tight time budget, or offline).
178
+ """
179
+ install_path = install_path or default_install_path()
180
+ st = SelfFreshness(install_path=install_path)
181
+
182
+ if not (install_path / ".git").exists():
183
+ st.unknown_reason = (
184
+ f"{install_path} is not a git checkout (release install, or no "
185
+ ".git directory found here) — nothing to compare against origin"
186
+ )
187
+ return st
188
+ st.is_git_checkout = True
189
+
190
+ st.head_sha = _git_out(install_path, "rev-parse", "HEAD")
191
+ if not st.head_sha:
192
+ st.unknown_reason = f"could not read HEAD of {install_path}"
193
+ return st
194
+
195
+ branch = default_branch or _detect_default_branch(install_path)
196
+ st.default_branch = branch
197
+
198
+ if fetch:
199
+ st.fetch_ok, st.fetch_error = _fetch(install_path, branch, timeout)
200
+
201
+ origin_sha = _git_out(install_path, "rev-parse", f"origin/{branch}")
202
+ if not origin_sha:
203
+ st.unknown_reason = (
204
+ f"no origin/{branch} ref for {install_path} — never fetched, no "
205
+ f"'origin' remote, or {branch!r} is not this checkout's default branch"
206
+ )
207
+ return st
208
+ st.origin_sha = origin_sha
209
+ st.commits_behind = _commits_behind(install_path, st.head_sha, origin_sha)
210
+ if st.commits_behind is None:
211
+ st.unknown_reason = (
212
+ f"could not compare HEAD ({st.head_sha[:8]}) against "
213
+ f"origin/{branch} ({origin_sha[:8]}) — git rev-list failed"
214
+ )
215
+ return st
216
+
217
+
218
+ def format_status_lines(st: SelfFreshness) -> list[str]:
219
+ """Human-readable report lines for *st* (used by ``coord diagnose
220
+ --self``)."""
221
+ lines: list[str] = []
222
+ where = str(st.install_path)
223
+
224
+ if not st.is_git_checkout:
225
+ lines.append(f"✓ {where}: {st.unknown_reason}")
226
+ return lines
227
+
228
+ if st.fetch_ok is False:
229
+ lines.append(
230
+ f" ⚠ git fetch failed ({st.fetch_error}) — comparing against "
231
+ "whatever origin ref the last successful fetch left behind"
232
+ )
233
+
234
+ if st.unknown_reason:
235
+ lines.append(f"? {where}: freshness unknown — {st.unknown_reason}")
236
+ return lines
237
+
238
+ if st.commits_behind:
239
+ n = st.commits_behind
240
+ lines.append(
241
+ f"✗ STALE: recorded HEAD {(st.head_sha or '')[:8]}, "
242
+ f"origin/{st.default_branch} is now {(st.origin_sha or '')[:8]} — "
243
+ f"{n} commit{'' if n == 1 else 's'} behind. This process is "
244
+ "running OLD coord/** code — a merged fix here is silently inert "
245
+ "until this checkout is pulled (docs/OPERATING_GOTCHAS.md #1). "
246
+ f"Fix: git -C {where} pull"
247
+ )
248
+ else:
249
+ lines.append(
250
+ f"✓ {where}: up to date with origin/{st.default_branch} "
251
+ f"({(st.head_sha or '')[:8]})"
252
+ )
253
+ return lines
254
+
255
+
256
+ def summary_line(st: SelfFreshness) -> str:
257
+ """The machine-readable trailer ``coord diagnose --self`` prints,
258
+ mirroring ``GRAPH_HEALTH:``/``CONFIG_PROVENANCE:``."""
259
+ if not st.is_git_checkout:
260
+ return f"SELF_FRESHNESS: git_checkout=false path={st.install_path}"
261
+ if st.unknown_reason:
262
+ return (
263
+ f"SELF_FRESHNESS: git_checkout=true unknown=true path={st.install_path}"
264
+ )
265
+ return (
266
+ "SELF_FRESHNESS: git_checkout=true "
267
+ f"stale={'true' if st.stale else 'false'} "
268
+ f"commits_behind={st.commits_behind if st.commits_behind is not None else '?'} "
269
+ f"path={st.install_path}"
270
+ )
@@ -30,6 +30,20 @@ against #1491's milestone-#50 exit gate — see
30
30
  [`MERGE_AUTO_DRAIN_TRUST_BAR.md`](MERGE_AUTO_DRAIN_TRUST_BAR.md) for the full
31
31
  deploy-status audit this produced.
32
32
 
33
+ **#2436: `~/src/claude-coordinator` is only an assumption — verify, don't
34
+ guess.** That path is where the "editable install" row above imagines the
35
+ checkout to be; it is not necessarily where a given host's `coord` import
36
+ actually resolves. One coordinator host's install turned out to live at
37
+ `~/src/code-coordinator` instead — a second, disconnected checkout nobody had
38
+ reconciled with this doc, discovered only via manual `git log`/`ps aux`/`tmux
39
+ capture-pane` archaeology while chasing a bug that had, in fact, already been
40
+ fixed on `origin/main`. Don't assume the path and don't assume the pull
41
+ happened: run `coord diagnose --self` on the host in question. It resolves the
42
+ *actual* running install (`Path(coord.__file__).resolve().parents[1]`, not this
43
+ doc's guess) and reports STALE with a commit count when it hasn't been pulled
44
+ since a `coord/**` fix merged — the checkable gate for this row, the same way
45
+ `coord diagnose --graph` is the checkable gate for graphify freshness.
46
+
33
47
  Not academic. #1394 (worker strands uncommitted work, then cleanup destroys it)
34
48
  sat merged-but-undeployed, and the very next dispatch — #1402 — hit the
35
49
  identical bug: **$3.44 and 10 minutes lost to something already fixed on
@@ -0,0 +1,115 @@
1
+ """End-to-end tests for `coord diagnose --self` — driven through the real
2
+ Click command against real git checkouts, asserting on rendered output
3
+ (CLAUDE.md black-box coverage bar).
4
+
5
+ #2436: nothing previously checked whether the coordinator's own editable
6
+ `coord/**` install had actually been `git pull`ed since a fix merged — a
7
+ coordinator host could run stale code indefinitely with zero signal, because
8
+ every symptom (board rows, `coord diagnose` findings, escalations) reads
9
+ exactly as if the bug were still unfixed. This drives `coord diagnose --self`
10
+ hermetically via $COORD_SELF_CHECKOUT, never touching the real running
11
+ install.
12
+ """
13
+
14
+ from __future__ import annotations
15
+
16
+ import shutil
17
+ import subprocess
18
+ from pathlib import Path
19
+
20
+ import pytest
21
+ from click.testing import CliRunner
22
+
23
+ from coord.commands.status import diagnose
24
+
25
+ pytestmark = pytest.mark.skipif(shutil.which("git") is None, reason="git not available")
26
+
27
+
28
+ def _git(*args: str, cwd: Path) -> subprocess.CompletedProcess:
29
+ return subprocess.run(
30
+ ["git", "-c", "user.email=t@t", "-c", "user.name=t", *args],
31
+ cwd=str(cwd),
32
+ capture_output=True,
33
+ text=True,
34
+ timeout=30.0,
35
+ )
36
+
37
+
38
+ def _make_checkout(root: Path) -> Path:
39
+ checkout = root / "coord"
40
+ checkout.mkdir(parents=True)
41
+ _git("init", "-q", "-b", "main", ".", cwd=checkout)
42
+ (checkout / "marker.txt").write_text("v1\n", encoding="utf-8")
43
+ _git("add", "-A", cwd=checkout)
44
+ _git("commit", "-q", "-m", "init", cwd=checkout)
45
+ remote = root / "coord-remote.git"
46
+ _git("init", "-q", "-b", "main", "--bare", str(remote), cwd=root)
47
+ _git("remote", "add", "origin", str(remote), cwd=checkout)
48
+ _git("push", "-q", "-u", "origin", "HEAD:main", cwd=checkout)
49
+ return checkout
50
+
51
+
52
+ def _run(monkeypatch, checkout: Path, *extra_args: str) -> str:
53
+ monkeypatch.setenv("COORD_SELF_CHECKOUT", str(checkout))
54
+ result = CliRunner().invoke(
55
+ diagnose, ["--self", *extra_args], catch_exceptions=False
56
+ )
57
+ assert result.exit_code == 0, result.output
58
+ return result.output
59
+
60
+
61
+ def test_reports_up_to_date_install(tmp_path: Path, monkeypatch) -> None:
62
+ checkout = _make_checkout(tmp_path)
63
+ out = _run(monkeypatch, checkout)
64
+
65
+ assert "up to date with origin/main" in out
66
+ assert "SELF_FRESHNESS: git_checkout=true stale=false commits_behind=0" in out
67
+
68
+
69
+ def test_reports_stale_with_commit_count_behind(tmp_path: Path, monkeypatch) -> None:
70
+ """The core #2436/#2286 acceptance: a merged fix nobody pulled shows up
71
+ as STALE with a commit count, not silently as healthy."""
72
+ checkout = _make_checkout(tmp_path)
73
+
74
+ clone = tmp_path / "other-clone"
75
+ _git("clone", "-q", str(tmp_path / "coord-remote.git"), str(clone), cwd=tmp_path)
76
+ (clone / "marker.txt").write_text("v2 - the fix\n", encoding="utf-8")
77
+ _git("add", "-A", cwd=clone)
78
+ _git("commit", "-q", "-m", "the fix", cwd=clone)
79
+ _git("push", "-q", "origin", "HEAD:main", cwd=clone)
80
+
81
+ out = _run(monkeypatch, checkout)
82
+
83
+ assert "STALE" in out
84
+ assert "1 commit behind" in out
85
+ assert f"git -C {checkout} pull" in out
86
+ assert "SELF_FRESHNESS: git_checkout=true stale=true commits_behind=1" in out
87
+
88
+
89
+ def test_no_fetch_flag_skips_the_network_call(tmp_path: Path, monkeypatch) -> None:
90
+ """--no-fetch must compare against the last known ref without ever
91
+ running `git fetch` — a stale-but-unfetched checkout reads as caught up
92
+ on the axis it can actually see (still not silently 'stale')."""
93
+ checkout = _make_checkout(tmp_path)
94
+
95
+ clone = tmp_path / "other-clone"
96
+ _git("clone", "-q", str(tmp_path / "coord-remote.git"), str(clone), cwd=tmp_path)
97
+ (clone / "marker.txt").write_text("v2\n", encoding="utf-8")
98
+ _git("add", "-A", cwd=clone)
99
+ _git("commit", "-q", "-m", "v2", cwd=clone)
100
+ _git("push", "-q", "origin", "HEAD:main", cwd=clone)
101
+
102
+ out = _run(monkeypatch, checkout, "--no-fetch")
103
+
104
+ assert "STALE" not in out
105
+ assert "SELF_FRESHNESS: git_checkout=true stale=false commits_behind=0" in out
106
+
107
+
108
+ def test_reports_a_non_git_install_neutrally(tmp_path: Path, monkeypatch) -> None:
109
+ install = tmp_path / "site-packages" / "coord"
110
+ install.mkdir(parents=True)
111
+
112
+ out = _run(monkeypatch, install)
113
+
114
+ assert "not a git checkout" in out
115
+ assert f"SELF_FRESHNESS: git_checkout=false path={install}" in out