code-coordinator 0.5.68__tar.gz → 0.5.70__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 (817) hide show
  1. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/code_coordinator.egg-info/scm_version.json +2 -2
  4. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/agent.py +77 -3
  5. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_agent.py +124 -0
  6. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_operational_defaults.py +111 -1
  7. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/.claude/commands/board.md +0 -0
  8. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/.claude/commands/complete-session.md +0 -0
  9. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/.claude/commands/coordinator.md +0 -0
  10. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/.githooks/_lib.sh +0 -0
  11. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/.githooks/post-checkout +0 -0
  12. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/.githooks/post-commit +0 -0
  13. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/.githooks/post-merge +0 -0
  14. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  15. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/.github/coord-ci-acceptance.yml +0 -0
  16. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/.github/workflows/auto-release.yml +0 -0
  17. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/.github/workflows/cargo-test.yml +0 -0
  18. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/.github/workflows/publish.yml +0 -0
  19. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/.github/workflows/release-tui.yml +0 -0
  20. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/.github/workflows/test.yml +0 -0
  21. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/.gitignore +0 -0
  22. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/CLAUDE.md +0 -0
  23. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/GOAL.md +0 -0
  24. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/LICENSE +0 -0
  25. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/MANIFEST.in +0 -0
  26. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/README.md +0 -0
  27. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/code_coordinator.egg-info/SOURCES.txt +0 -0
  28. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/code_coordinator.egg-info/dependency_links.txt +0 -0
  29. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/code_coordinator.egg-info/entry_points.txt +0 -0
  30. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/code_coordinator.egg-info/requires.txt +0 -0
  31. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/code_coordinator.egg-info/scm_file_list.json +0 -0
  32. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/code_coordinator.egg-info/top_level.txt +0 -0
  33. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/__init__.py +0 -0
  34. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/_board_mapping.py +0 -0
  35. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/acceptance.py +0 -0
  36. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/acceptance_drivers.py +0 -0
  37. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/agent_app.py +0 -0
  38. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/agent_update.py +0 -0
  39. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/agents/opencode/.gitignore +0 -0
  40. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/agents/opencode/agents/work.md +0 -0
  41. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/agents/opencode/routing.jsonc +0 -0
  42. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/audit.py +0 -0
  43. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/auto_loop.py +0 -0
  44. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/board_bool_guard.py +0 -0
  45. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/board_service.py +0 -0
  46. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/board_wire.py +0 -0
  47. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/brain.py +0 -0
  48. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/branch_model.py +0 -0
  49. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/bug_intake.py +0 -0
  50. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/cargo_cache.py +0 -0
  51. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/ci_github.py +0 -0
  52. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/ci_store.py +0 -0
  53. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/claim.py +0 -0
  54. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/cli.py +0 -0
  55. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/client.py +0 -0
  56. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/commands/__init__.py +0 -0
  57. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/commands/_common.py +0 -0
  58. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/commands/acceptance.py +0 -0
  59. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/commands/agent_ops.py +0 -0
  60. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/commands/audit.py +0 -0
  61. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/commands/chat.py +0 -0
  62. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/commands/dispatch.py +0 -0
  63. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/commands/dispatch_workers.py +0 -0
  64. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/commands/drive.py +0 -0
  65. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/commands/drive_queue.py +0 -0
  66. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/commands/gate_a.py +0 -0
  67. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/commands/gates.py +0 -0
  68. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/commands/issues.py +0 -0
  69. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/commands/lifecycle.py +0 -0
  70. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/commands/merge.py +0 -0
  71. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/commands/milestone.py +0 -0
  72. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/commands/plan_followup.py +0 -0
  73. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/commands/plans.py +0 -0
  74. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/commands/portal.py +0 -0
  75. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/commands/release.py +0 -0
  76. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/commands/report.py +0 -0
  77. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/commands/review.py +0 -0
  78. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/commands/scorecard.py +0 -0
  79. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/commands/sessions.py +0 -0
  80. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/commands/setup.py +0 -0
  81. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/commands/status.py +0 -0
  82. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/commands/terminal.py +0 -0
  83. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/commands/test_gate.py +0 -0
  84. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/commands/tui.py +0 -0
  85. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/comments.py +0 -0
  86. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/config.py +0 -0
  87. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/conflict_fix.py +0 -0
  88. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dao.py +0 -0
  89. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/__init__.py +0 -0
  90. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/fixture.py +0 -0
  91. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/index.html +0 -0
  92. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/server.py +0 -0
  93. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/terminal.py +0 -0
  94. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/.gitignore +0 -0
  95. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/components.json +0 -0
  96. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/dist/assets/Gallery-da3qNiIw.js +0 -0
  97. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
  98. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/dist/assets/Terminal-skVFCxPU.js +0 -0
  99. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/dist/assets/index-DltfZR5f.js +0 -0
  100. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
  101. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
  102. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
  103. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
  104. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
  105. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/dist/index.html +0 -0
  106. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
  107. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/dist/sw.js +0 -0
  108. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
  109. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
  110. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
  111. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
  112. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
  113. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
  114. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
  115. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
  116. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
  117. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
  118. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/eslint.config.js +0 -0
  119. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/index.html +0 -0
  120. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
  121. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/package-lock.json +0 -0
  122. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/package.json +0 -0
  123. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
  124. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/playwright.config.ts +0 -0
  125. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/postcss.config.js +0 -0
  126. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
  127. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
  128. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
  129. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/src/App.tsx +0 -0
  130. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/src/api/client.ts +0 -0
  131. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/src/api/generated.ts +0 -0
  132. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
  133. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
  134. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
  135. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
  136. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
  137. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
  138. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
  139. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
  140. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
  141. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
  142. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
  143. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
  144. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
  145. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
  146. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
  147. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
  148. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
  149. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
  150. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
  151. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
  152. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
  153. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
  154. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
  155. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
  156. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
  157. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
  158. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
  159. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
  160. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
  161. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
  162. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
  163. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
  164. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
  165. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
  166. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/src/index.css +0 -0
  167. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
  168. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
  169. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/src/main.tsx +0 -0
  170. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
  171. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
  172. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
  173. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
  174. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
  175. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
  176. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
  177. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
  178. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
  179. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
  180. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
  181. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
  182. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
  183. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
  184. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
  185. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
  186. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
  187. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
  188. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
  189. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
  190. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
  191. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/src/test-setup.ts +0 -0
  192. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
  193. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/tailwind.config.js +0 -0
  194. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/tsconfig.json +0 -0
  195. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/tsconfig.node.json +0 -0
  196. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dashboard/webapp/vite.config.ts +0 -0
  197. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/db.py +0 -0
  198. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dead_end.py +0 -0
  199. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/deploy/README.md +0 -0
  200. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/deploy/coord-agent.service +0 -0
  201. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/deploy/coord-db-backup.service +0 -0
  202. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/deploy/coord-db-backup.sh +0 -0
  203. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/deploy/coord-db-backup.timer +0 -0
  204. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/deploy/coord-drive-queue.service +0 -0
  205. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/deploy/coord-drive-queue.timer +0 -0
  206. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/deploy/coord-notify.service +0 -0
  207. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/deploy/coord-notify.timer +0 -0
  208. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/deploy/coord-release-propagate.service +0 -0
  209. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/deploy/coord-release-propagate.timer +0 -0
  210. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/deploy/coord-release-window.service +0 -0
  211. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/deploy/coord-release-window.timer +0 -0
  212. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/deploy/coord-serve.service +0 -0
  213. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/deploy/coord-web-dist-build.service +0 -0
  214. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/deploy/coord-web-dist-build.timer +0 -0
  215. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/deploy/coord-web.service +0 -0
  216. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/deploy_manifest.py +0 -0
  217. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/deploy_units.py +0 -0
  218. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/deps.py +0 -0
  219. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/diagnose.py +0 -0
  220. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dispatch.py +0 -0
  221. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/dist_name.py +0 -0
  222. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/drive.py +0 -0
  223. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/drive_queue.py +0 -0
  224. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/drive_state.py +0 -0
  225. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/events.py +0 -0
  226. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/failure_class.py +0 -0
  227. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/filelock.py +0 -0
  228. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/fleet_config_health.py +0 -0
  229. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/freshness.py +0 -0
  230. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/gate_a.py +0 -0
  231. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/gate_b.py +0 -0
  232. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/gate_snapshot.py +0 -0
  233. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/gates.py +0 -0
  234. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/github_ops.py +0 -0
  235. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/goal.py +0 -0
  236. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/graph_health.py +0 -0
  237. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/health/__init__.py +0 -0
  238. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/health/aggregate.py +0 -0
  239. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/health/checks/__init__.py +0 -0
  240. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/health/checks/agent_install.py +0 -0
  241. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/health/checks/cargo_targets.py +0 -0
  242. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/health/checks/claude_binary.py +0 -0
  243. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/health/checks/deploy_lane_facts.py +0 -0
  244. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/health/checks/disk.py +0 -0
  245. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/health/checks/fleet_board.py +0 -0
  246. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  247. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/health/checks/fleet_phantom.py +0 -0
  248. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/health/checks/fleet_unit_drift.py +0 -0
  249. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/health/checks/graph.py +0 -0
  250. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/health/checks/plan_usage.py +0 -0
  251. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/health/checks/repo_state.py +0 -0
  252. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/health/checks/spawned_coord.py +0 -0
  253. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/health/checks/timer_active.py +0 -0
  254. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/health/checks/toolchain.py +0 -0
  255. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/health/checks/unit_drift.py +0 -0
  256. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/health/checks/unit_enablement.py +0 -0
  257. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/health/checks/worktrees.py +0 -0
  258. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/health/cli.py +0 -0
  259. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/health/context.py +0 -0
  260. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/health/fleet_snapshot.py +0 -0
  261. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/health/models.py +0 -0
  262. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/health/pypi.py +0 -0
  263. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/health/registry.py +0 -0
  264. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/health/render.py +0 -0
  265. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/health/units.py +0 -0
  266. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/hooks.py +0 -0
  267. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/housekeeping.py +0 -0
  268. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/interactive.py +0 -0
  269. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/issue_store.py +0 -0
  270. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/liveness_auditor.py +0 -0
  271. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/machine_pause.py +0 -0
  272. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/merge_queue.py +0 -0
  273. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/milestone_chat.py +0 -0
  274. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/milestone_dispatch.py +0 -0
  275. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/milestone_gate.py +0 -0
  276. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/milestone_order.py +0 -0
  277. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/mock_author.py +0 -0
  278. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/models.py +0 -0
  279. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/network.py +0 -0
  280. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/new_issue_chat.py +0 -0
  281. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/notifier/__init__.py +0 -0
  282. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/notifier/baseline.py +0 -0
  283. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/notifier/cli.py +0 -0
  284. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/notifier/collect.py +0 -0
  285. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/notifier/digest.py +0 -0
  286. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/notifier/models.py +0 -0
  287. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/notifier/predicate.py +0 -0
  288. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/notifier/service.py +0 -0
  289. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/notifier/store.py +0 -0
  290. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/notifier/transport.py +0 -0
  291. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/notify.py +0 -0
  292. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/openapi.py +0 -0
  293. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/overlap_fence.py +0 -0
  294. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/parentage.py +0 -0
  295. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/parentage_github.py +0 -0
  296. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/pipeline.py +0 -0
  297. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/plan_parser.py +0 -0
  298. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/plans.py +0 -0
  299. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/platform_paths.py +0 -0
  300. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/portal_bridge.py +0 -0
  301. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/pr_body_lint.py +0 -0
  302. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/prereqs.py +0 -0
  303. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/progress.py +0 -0
  304. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/providers/__init__.py +0 -0
  305. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/providers/base.py +0 -0
  306. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/providers/claude.py +0 -0
  307. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/providers/claude_pty.py +0 -0
  308. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/providers/opencode.py +0 -0
  309. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/reconcile.py +0 -0
  310. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/refine_chat.py +0 -0
  311. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/release_cordon.py +0 -0
  312. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/release_propagate.py +0 -0
  313. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/release_verify.py +0 -0
  314. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/release_window.py +0 -0
  315. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/reports.py +0 -0
  316. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/revalidate.py +0 -0
  317. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/review.py +0 -0
  318. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/scorecard.py +0 -0
  319. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/serve_app.py +0 -0
  320. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/skills/update-issue/SKILL.md +0 -0
  321. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/smoke.py +0 -0
  322. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/spend_ceiling.py +0 -0
  323. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/split_work.py +0 -0
  324. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/stage_projection.py +0 -0
  325. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/state.py +0 -0
  326. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/test_author.py +0 -0
  327. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/test_chat.py +0 -0
  328. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/test_orchestrator.py +0 -0
  329. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/test_report.py +0 -0
  330. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/tui_release.py +0 -0
  331. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/usage.py +0 -0
  332. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/usage_limits.py +0 -0
  333. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/usage_rollup.py +0 -0
  334. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coord/worker_events.py +0 -0
  335. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/coordinator.example.yml +0 -0
  336. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/deploy/coord-agent.service +0 -0
  337. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/deploy/coord-db-backup.service +0 -0
  338. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/deploy/coord-db-backup.sh +0 -0
  339. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/deploy/coord-db-backup.timer +0 -0
  340. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/deploy/coord-drive-queue.service +0 -0
  341. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/deploy/coord-drive-queue.timer +0 -0
  342. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/deploy/coord-notify.service +0 -0
  343. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/deploy/coord-notify.timer +0 -0
  344. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/deploy/coord-release-propagate.service +0 -0
  345. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/deploy/coord-release-propagate.timer +0 -0
  346. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/deploy/coord-release-window.service +0 -0
  347. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/deploy/coord-release-window.timer +0 -0
  348. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/deploy/coord-serve.service +0 -0
  349. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/deploy/coord-web-dist-build.service +0 -0
  350. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/deploy/coord-web-dist-build.sh +0 -0
  351. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/deploy/coord-web-dist-build.timer +0 -0
  352. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/deploy/coord-web-rollback.sh +0 -0
  353. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/deploy/coord-web.service +0 -0
  354. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/deploy/node-shim.sh +0 -0
  355. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/docs/AGENT_OPERATIONS.md +0 -0
  356. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/docs/ARCHITECTURE.md +0 -0
  357. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/docs/ARCH_SECURITY_GATES.md +0 -0
  358. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/docs/COCKPIT.md +0 -0
  359. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/docs/CONTROL_CENTER.md +0 -0
  360. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/docs/CROSS_PLATFORM.md +0 -0
  361. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/docs/CUSTOMER_PORTAL.md +0 -0
  362. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/docs/DRIVE_QUEUE.md +0 -0
  363. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/docs/EPHEMERAL_WORKERS.md +0 -0
  364. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/docs/FORGE_MIGRATION.md +0 -0
  365. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/docs/GRAPHIFY_SETUP.md +0 -0
  366. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/docs/ISSUE_GUIDANCE.md +0 -0
  367. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/docs/MAC_MINI.md +0 -0
  368. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  369. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/docs/NOTIFIER.md +0 -0
  370. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/docs/OPENCODE_VERIFICATION.md +0 -0
  371. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/docs/OPERATING_GOTCHAS.md +0 -0
  372. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/docs/ORACLE_LOOP.md +0 -0
  373. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/docs/PHONE_WEBAPP.md +0 -0
  374. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/docs/PIPELINE_V2.md +0 -0
  375. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/docs/PLATFORM_EVOLUTION.md +0 -0
  376. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/docs/SECOND_BACKEND.md +0 -0
  377. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/docs/STORE_SERVICE.md +0 -0
  378. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  379. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/docs/WEB_CONTROL_CENTER.md +0 -0
  380. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/docs/mocks/web/README.md +0 -0
  381. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/docs/mocks/web/_tokens.css +0 -0
  382. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/docs/mocks/web/issue-detail.html +0 -0
  383. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/docs/mocks/web/pipeline-narrow.html +0 -0
  384. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/docs/mocks/web/pipeline-wide.html +0 -0
  385. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/graphify-out/.gitignore +0 -0
  386. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/install-agent.sh +0 -0
  387. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/pyproject.toml +0 -0
  388. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/scripts/audit_review_verdict_overrides.py +0 -0
  389. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  390. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/scripts/azure-workers/build-worker-image.sh +0 -0
  391. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/scripts/azure-workers/coordinator-machine.py +0 -0
  392. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/scripts/azure-workers/epic-down.sh +0 -0
  393. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/scripts/azure-workers/epic-up.sh +0 -0
  394. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/scripts/azure-workers/preflight.sh +0 -0
  395. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/scripts/azure-workers/provision-worker.sh +0 -0
  396. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  397. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  398. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/scripts/azure-workers/verify-github-token.sh +0 -0
  399. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/scripts/codegen.py +0 -0
  400. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/scripts/coord-test-runner.sh +0 -0
  401. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/scripts/drive-batch.sh +0 -0
  402. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/scripts/gen_board_fixture.py +0 -0
  403. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/scripts/next_release_tag.py +0 -0
  404. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/scripts/run_tests_in_populated_home.sh +0 -0
  405. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/scripts/run_tests_without_gh.sh +0 -0
  406. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/scripts/smoke_437_interactive.py +0 -0
  407. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/scripts/verify_878_review_capture.py +0 -0
  408. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/scripts/verify_release_published.py +0 -0
  409. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/scripts/verify_release_wheel.py +0 -0
  410. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/setup.cfg +0 -0
  411. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/SMOKE_SET.md +0 -0
  412. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/__init__.py +0 -0
  413. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  414. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/acceptance/ms-33/contract.md +0 -0
  415. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/acceptance/ms-33/manifest.yml +0 -0
  416. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  417. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  418. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  419. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  420. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/acceptance/ms-37/conftest.py +0 -0
  421. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/acceptance/ms-37/contract.md +0 -0
  422. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/acceptance/ms-37/manifest.yml +0 -0
  423. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  424. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  425. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/acceptance/ms-38/contract.md +0 -0
  426. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/acceptance/ms-38/manifest.yml +0 -0
  427. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  428. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  429. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  430. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  431. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  432. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  433. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  434. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  435. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  436. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  437. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/acceptance/ms-51/contract.md +0 -0
  438. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  439. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  440. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/acceptance/ms-51/manifest.yml +0 -0
  441. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  442. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/acceptance/ms-51/tsconfig.json +0 -0
  443. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  444. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/conftest.py +0 -0
  445. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/fixtures/board-pipeline-basic.json +0 -0
  446. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  447. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  448. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  449. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/fixtures/playwright/all_pass.json +0 -0
  450. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  451. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/fixtures/playwright/mixed_fail.json +0 -0
  452. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  453. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  454. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/fixtures/playwright/skip.json +0 -0
  455. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/fixtures/playwright/truncated.json +0 -0
  456. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  457. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  458. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  459. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  460. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  461. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  462. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  463. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  464. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_acceptance.py +0 -0
  465. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_acceptance_drivers.py +0 -0
  466. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_agent_api_error.py +0 -0
  467. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_agent_app.py +0 -0
  468. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_agent_branch_base.py +0 -0
  469. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_agent_branch_capture.py +0 -0
  470. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_agent_config_free_1712.py +0 -0
  471. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_agent_deploy_units_endpoint.py +0 -0
  472. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_agent_dirty_worktree.py +0 -0
  473. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_agent_graph_self_heal.py +0 -0
  474. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_agent_health_h3.py +0 -0
  475. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_agent_idle_restart.py +0 -0
  476. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_agent_push_failure.py +0 -0
  477. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_agent_reap.py +0 -0
  478. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_agent_repos_and_pull.py +0 -0
  479. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_agent_restart_services_endpoint.py +0 -0
  480. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_agent_startup_diagnostics.py +0 -0
  481. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_agent_update.py +0 -0
  482. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_agent_update_bluegreen.py +0 -0
  483. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_agent_usage_limit.py +0 -0
  484. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_agent_zero_commit.py +0 -0
  485. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_ambient_home_isolation.py +0 -0
  486. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_approve_reject_plan.py +0 -0
  487. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_approve_usage_gate.py +0 -0
  488. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_assignment_already_recorded_daemon.py +0 -0
  489. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_audit_log.py +0 -0
  490. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_audit_outcome.py +0 -0
  491. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_audit_query.py +0 -0
  492. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_auto_loop.py +0 -0
  493. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_auto_release_publish_2035.py +0 -0
  494. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_base_checkout_restore.py +0 -0
  495. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_board_cap_762.py +0 -0
  496. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_board_fixture.py +0 -0
  497. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_board_read_path.py +0 -0
  498. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_board_service.py +0 -0
  499. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_board_state.py +0 -0
  500. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_board_wire.py +0 -0
  501. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_brain.py +0 -0
  502. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_branch_model.py +0 -0
  503. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_bug_intake.py +0 -0
  504. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_build_worker_image_env_update.py +0 -0
  505. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_cargo_cache.py +0 -0
  506. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_ci_acceptance_gate_1950.py +0 -0
  507. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_ci_parity_2091.py +0 -0
  508. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_ci_store.py +0 -0
  509. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_claim.py +0 -0
  510. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_cli_acceptance.py +0 -0
  511. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_cli_assign.py +0 -0
  512. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  513. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_cli_assign_interactive_remote.py +0 -0
  514. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_cli_assign_provider.py +0 -0
  515. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_cli_audit.py +0 -0
  516. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_cli_chat_continue.py +0 -0
  517. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_cli_diagnose_config_provenance.py +0 -0
  518. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_cli_diagnose_graph.py +0 -0
  519. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_cli_doctor.py +0 -0
  520. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_cli_doctor_config_free_1801.py +0 -0
  521. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  522. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_cli_drive.py +0 -0
  523. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_cli_drive_queue.py +0 -0
  524. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_cli_escalate.py +0 -0
  525. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_cli_fix_headless_review.py +0 -0
  526. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_cli_gate_a.py +0 -0
  527. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_cli_install_drift.py +0 -0
  528. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_cli_install_skills.py +0 -0
  529. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_cli_issue_create_label.py +0 -0
  530. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_cli_issue_reopen.py +0 -0
  531. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_cli_merge.py +0 -0
  532. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_cli_milestone_assign.py +0 -0
  533. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_cli_milestone_capture.py +0 -0
  534. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_cli_milestone_chat_add_child.py +0 -0
  535. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_cli_milestone_dispatch.py +0 -0
  536. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_cli_milestone_gate_b.py +0 -0
  537. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_cli_milestone_gate_c.py +0 -0
  538. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_cli_milestone_order.py +0 -0
  539. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  540. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_cli_milestone_ship.py +0 -0
  541. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_cli_network.py +0 -0
  542. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_cli_new_issue_chat.py +0 -0
  543. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_cli_plans.py +0 -0
  544. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_cli_portal.py +0 -0
  545. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_cli_pull_artifact.py +0 -0
  546. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_cli_queue.py +0 -0
  547. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_cli_reattach_sessions.py +0 -0
  548. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_cli_refine_board.py +0 -0
  549. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_cli_release_preflight.py +0 -0
  550. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_cli_release_propagate.py +0 -0
  551. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_cli_release_window.py +0 -0
  552. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_cli_scorecard.py +0 -0
  553. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_cli_set_review_findings.py +0 -0
  554. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_cli_status_advisory_terminal.py +0 -0
  555. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_cli_status_merge_queue.py +0 -0
  556. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_cli_status_provider.py +0 -0
  557. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_cli_status_review_finalizing.py +0 -0
  558. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_cli_status_test_failed_tag.py +0 -0
  559. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_cli_status_usage_limit.py +0 -0
  560. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_cli_sync_comments_873.py +0 -0
  561. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_cli_test_plan.py +0 -0
  562. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_cli_track.py +0 -0
  563. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_cli_tui_update.py +0 -0
  564. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_cli_wait.py +0 -0
  565. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_client_base_install.py +0 -0
  566. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_comments.py +0 -0
  567. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_completion_summary.py +0 -0
  568. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_config.py +0 -0
  569. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_config_acceptance.py +0 -0
  570. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_config_audit.py +0 -0
  571. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_config_pricing.py +0 -0
  572. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_config_usage_gate.py +0 -0
  573. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_conflict_fix.py +0 -0
  574. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_conflict_fix_semantic.py +0 -0
  575. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_coord_test.py +0 -0
  576. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_coord_test_runner_baseline.py +0 -0
  577. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_coord_test_runner_routing.py +0 -0
  578. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_coord_test_runner_toolchain.py +0 -0
  579. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_coord_web_sse_restart_live.py +0 -0
  580. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_coordinator_machine.py +0 -0
  581. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_cross_platform_imports.py +0 -0
  582. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_dashboard.py +0 -0
  583. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_dashboard_fixture.py +0 -0
  584. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_dashboard_terminal.py +0 -0
  585. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_dashboard_terminal_live.py +0 -0
  586. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_db.py +0 -0
  587. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_dead_end.py +0 -0
  588. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_deploy_coord_db_backup.py +0 -0
  589. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_deploy_coord_web_dist.py +0 -0
  590. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_deploy_coord_web_rollback.py +0 -0
  591. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_deploy_drive_queue_unit.py +0 -0
  592. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_deploy_manifest.py +0 -0
  593. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_deploy_units_lane.py +0 -0
  594. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_deploy_web_unit.py +0 -0
  595. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_deps.py +0 -0
  596. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_diagnose.py +0 -0
  597. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_dispatch.py +0 -0
  598. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_dispatch_target_validation.py +0 -0
  599. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_dist_name.py +0 -0
  600. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_done_housekeeping.py +0 -0
  601. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_drive.py +0 -0
  602. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_drive_queue.py +0 -0
  603. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_drive_state.py +0 -0
  604. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_drive_tmux.py +0 -0
  605. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_epic_up_capability_detection.py +0 -0
  606. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  607. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_epic_up_image_provenance.py +0 -0
  608. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_errors.py +0 -0
  609. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_events.py +0 -0
  610. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_failure_class.py +0 -0
  611. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_filelock.py +0 -0
  612. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  613. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_fix_of_force_override.py +0 -0
  614. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_fleet_config_health.py +0 -0
  615. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_fleet_health_probes.py +0 -0
  616. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_fleet_health_snapshot.py +0 -0
  617. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_freshness.py +0 -0
  618. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_gate_a.py +0 -0
  619. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_gate_b.py +0 -0
  620. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_gate_snapshot_staleness.py +0 -0
  621. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_gates.py +0 -0
  622. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_generated_types_fixture.py +0 -0
  623. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_github_ops.py +0 -0
  624. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_goal.py +0 -0
  625. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_graph_health.py +0 -0
  626. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_handoff.py +0 -0
  627. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_health_checks.py +0 -0
  628. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_health_cli.py +0 -0
  629. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_health_cli_graph.py +0 -0
  630. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_health_config.py +0 -0
  631. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_health_context.py +0 -0
  632. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_health_deploy_lane_facts.py +0 -0
  633. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_health_incident_regression.py +0 -0
  634. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_health_pypi.py +0 -0
  635. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_health_registry.py +0 -0
  636. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_health_timer_active.py +0 -0
  637. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_health_toolchain.py +0 -0
  638. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_health_unit_drift.py +0 -0
  639. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_health_unit_enablement.py +0 -0
  640. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_hooks.py +0 -0
  641. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_human_attended_437.py +0 -0
  642. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_init.py +0 -0
  643. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_integration.py +0 -0
  644. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_interactive_briefing_echo.py +0 -0
  645. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_interactive_prefill_state.py +0 -0
  646. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_interactive_session_relaunch.py +0 -0
  647. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_interactive_test_verdict_backstop.py +0 -0
  648. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_interactive_token_attribution.py +0 -0
  649. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_interactive_worktree.py +0 -0
  650. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_issue_store_seam.py +0 -0
  651. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_liveness_auditor.py +0 -0
  652. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_liveness_notify.py +0 -0
  653. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_machine_pause.py +0 -0
  654. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_merge_queue.py +0 -0
  655. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_merge_verify.py +0 -0
  656. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_milestone_chat.py +0 -0
  657. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_milestone_dispatch.py +0 -0
  658. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_milestone_gate.py +0 -0
  659. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_milestone_order.py +0 -0
  660. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_milestone_seam.py +0 -0
  661. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_mock_author.py +0 -0
  662. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_model_tiering.py +0 -0
  663. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_models.py +0 -0
  664. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_models_config_labels.py +0 -0
  665. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_needs_attention.py +0 -0
  666. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_network.py +0 -0
  667. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_new_issue_chat.py +0 -0
  668. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_next_release_tag.py +0 -0
  669. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_no_direct_gh_calls.py +0 -0
  670. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_node_shim.py +0 -0
  671. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_notifier_baseline.py +0 -0
  672. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_notifier_cli.py +0 -0
  673. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_notifier_collect.py +0 -0
  674. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_notifier_config.py +0 -0
  675. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_notifier_drive_seam.py +0 -0
  676. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_notifier_isolation.py +0 -0
  677. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_notifier_predicate.py +0 -0
  678. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_notifier_quiet_hours.py +0 -0
  679. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_notifier_service.py +0 -0
  680. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_notify.py +0 -0
  681. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_notify_drain.py +0 -0
  682. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_openapi.py +0 -0
  683. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_overlap_fence.py +0 -0
  684. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_packaged_deploy_units.py +0 -0
  685. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_parentage.py +0 -0
  686. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_paste_landed.py +0 -0
  687. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_pipeline.py +0 -0
  688. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_plan_followup_approve_plan_command.py +0 -0
  689. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_plan_followup_pr_command.py +0 -0
  690. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_plan_followup_review_command.py +0 -0
  691. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_plan_only.py +0 -0
  692. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_plan_parser.py +0 -0
  693. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_platform_paths.py +0 -0
  694. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_portal_bridge.py +0 -0
  695. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_portal_config.py +0 -0
  696. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_pr_body_lint.py +0 -0
  697. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_prereqs.py +0 -0
  698. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_production_db_guard.py +0 -0
  699. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_progress.py +0 -0
  700. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_provider_seam.py +0 -0
  701. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_providers.py +0 -0
  702. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_providers_config_labels.py +0 -0
  703. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_providers_pty.py +0 -0
  704. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_quiet_hours.py +0 -0
  705. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_quiet_hours_store_2146.py +0 -0
  706. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_reap_merged_sessions.py +0 -0
  707. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_reap_stale_interactive_tick.py +0 -0
  708. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_reconcile_branch.py +0 -0
  709. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_reconcile_completions.py +0 -0
  710. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_reconcile_merges.py +0 -0
  711. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_reconcile_usage_limit_done.py +0 -0
  712. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_refine_chat.py +0 -0
  713. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_release_cordon_2101.py +0 -0
  714. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_release_propagate.py +0 -0
  715. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_release_unified_1242.py +0 -0
  716. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_release_verify.py +0 -0
  717. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_release_window.py +0 -0
  718. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_remote_auto_prune.py +0 -0
  719. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_remote_interactive_reaper.py +0 -0
  720. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_report_result_push.py +0 -0
  721. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_reports.py +0 -0
  722. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_retry.py +0 -0
  723. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_retry_advisory_1606.py +0 -0
  724. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_retry_type_1636.py +0 -0
  725. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_revalidate.py +0 -0
  726. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_review.py +0 -0
  727. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_review_end_review_without_verdict.py +0 -0
  728. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_review_parse_failure_diagnostic.py +0 -0
  729. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_review_reaffirm.py +0 -0
  730. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_review_state.py +0 -0
  731. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_review_verdict_backstop.py +0 -0
  732. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_review_verdict_override_audit.py +0 -0
  733. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_review_verdict_relay.py +0 -0
  734. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_review_zero_commits.py +0 -0
  735. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_scoped_review_wiring.py +0 -0
  736. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_scorecard.py +0 -0
  737. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_serve.py +0 -0
  738. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_serve_app_board_trim.py +0 -0
  739. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_session.py +0 -0
  740. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_slice_issue_attribution.py +0 -0
  741. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_smoke.py +0 -0
  742. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_smoke_live_checkout_restore.py +0 -0
  743. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_smoke_workflow.py +0 -0
  744. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_spend_ceiling.py +0 -0
  745. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_spend_ceiling_coordinator.py +0 -0
  746. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_split.py +0 -0
  747. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_split_work.py +0 -0
  748. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_stage_projection.py +0 -0
  749. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_stalled_pipeline.py +0 -0
  750. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_state.py +0 -0
  751. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_state_review_findings_daemon.py +0 -0
  752. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_status_fleet_footer.py +0 -0
  753. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_stop_1567.py +0 -0
  754. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_stuck.py +0 -0
  755. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_terminal_command.py +0 -0
  756. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_test_author.py +0 -0
  757. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_test_chat.py +0 -0
  758. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_test_orchestrator.py +0 -0
  759. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_test_report.py +0 -0
  760. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_test_verdict_parsing.py +0 -0
  761. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_test_verdict_transcript_floor.py +0 -0
  762. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_thin_client_board_audit.py +0 -0
  763. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_thin_client_config_load_1080.py +0 -0
  764. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_thin_client_daemon_routing_906.py +0 -0
  765. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_tmux_host.py +0 -0
  766. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_tmux_session.py +0 -0
  767. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_transcript_floor.py +0 -0
  768. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_usage.py +0 -0
  769. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_usage_limits.py +0 -0
  770. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_usage_rollup.py +0 -0
  771. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_venv_live_install_2121.py +0 -0
  772. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_version_single_source.py +0 -0
  773. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_watch.py +0 -0
  774. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_worker_events.py +0 -0
  775. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_worker_image_pin_sync.py +0 -0
  776. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_worker_safety.py +0 -0
  777. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_worker_test_scoping.py +0 -0
  778. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_worktree.py +0 -0
  779. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  780. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tui/Cargo.lock +0 -0
  781. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tui/Cargo.toml +0 -0
  782. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tui/cargo-config-local-quadraui.toml.example +0 -0
  783. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tui/src/app/audit.rs +0 -0
  784. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tui/src/app/chat.rs +0 -0
  785. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tui/src/app/data.rs +0 -0
  786. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tui/src/app/dialogs.rs +0 -0
  787. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tui/src/app/drive.rs +0 -0
  788. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tui/src/app/drive_queue.rs +0 -0
  789. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tui/src/app/escalation.rs +0 -0
  790. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tui/src/app/events.rs +0 -0
  791. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tui/src/app/fixtures.rs +0 -0
  792. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tui/src/app/fleet_health.rs +0 -0
  793. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tui/src/app/fleet_sessions.rs +0 -0
  794. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tui/src/app/fleet_terminals.rs +0 -0
  795. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tui/src/app/format.rs +0 -0
  796. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tui/src/app/milestone_dag.rs +0 -0
  797. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tui/src/app/mod.rs +0 -0
  798. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tui/src/app/msv.rs +0 -0
  799. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tui/src/app/pipeline.rs +0 -0
  800. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tui/src/app/plans.rs +0 -0
  801. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tui/src/app/render.rs +0 -0
  802. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tui/src/app/reports.rs +0 -0
  803. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tui/src/app/sessions.rs +0 -0
  804. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tui/src/app/settings_ui.rs +0 -0
  805. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tui/src/app/sidebar.rs +0 -0
  806. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tui/src/app/terminal.rs +0 -0
  807. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tui/src/app/tests.rs +0 -0
  808. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tui/src/app/types.rs +0 -0
  809. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tui/src/app/workspace.rs +0 -0
  810. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tui/src/bin/gtk.rs +0 -0
  811. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tui/src/commands.rs +0 -0
  812. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tui/src/lib.rs +0 -0
  813. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tui/src/main.rs +0 -0
  814. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tui/src/settings.rs +0 -0
  815. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tui/tests/acceptance.rs +0 -0
  816. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/tui/tests/cli.rs +0 -0
  817. {code_coordinator-0.5.68 → code_coordinator-0.5.70}/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.68
3
+ Version: 0.5.70
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.68
3
+ Version: 0.5.70
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,7 +1,7 @@
1
1
  {
2
- "tag": "0.5.68",
2
+ "tag": "0.5.70",
3
3
  "distance": 0,
4
- "node": "g5c48dfa28457562839e0f3dc02d1de4a685b0a3d",
4
+ "node": "g522a9f215942bd8d54b0906c6f672934c636ad73",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-14"
@@ -747,6 +747,43 @@ def _graphify_update(repo_path: Path, *, timeout: float = 600.0) -> tuple[bool,
747
747
  return True, (result.stdout or "").strip()
748
748
 
749
749
 
750
+ # #2212: count how many Bash commands in a worker's leg invoked `graphify` —
751
+ # the measurable half of the graph-first navigation rule in
752
+ # WORKER_SYSTEM_PROMPT above. The rule has lapsed into disuse before (see
753
+ # #2212's issue body) because nothing tracked whether workers actually
754
+ # queried the graph; this is written into every reaped worker's log (see
755
+ # the "# reap: done" line in `_reap`) as a plain `grep`-able counter — zero
756
+ # across N consecutive legs means the prompt instruction isn't landing.
757
+ # Deliberately NOT a DB column: this is a cheap, best-effort signal, not a
758
+ # gate anything blocks on, so it stays out of the Assignment schema/migrations.
759
+ # Separators recognized before a command token: `;`, `&`, `|` (covers `&&`
760
+ # and `||` too, since `\s*` after the class soaks up the second char) and a
761
+ # bare newline — Claude Code's Bash tool very commonly emits multi-line
762
+ # command strings (e.g. `cd repo\ngraphify query "foo"`) that aren't joined
763
+ # with `;`/`&&`, so newline must count as a separator or those legs
764
+ # undercount to 0 (#2212 review).
765
+ _GRAPHIFY_INVOCATION_RE = re.compile(r"(?:^|[\n;&|]\s*)graphify(?:\s|$)")
766
+
767
+
768
+ def _count_graphify_invocations(bash_commands: list[str]) -> int:
769
+ """Count *bash_commands* entries that invoke the ``graphify`` CLI.
770
+
771
+ Matches ``graphify`` as a command token — at the start of the string,
772
+ after a shell separator (``;``, ``&&``, ``||``, ``|``), or after a bare
773
+ newline (multi-line Bash tool calls, e.g. ``cd repo\\ngraphify query
774
+ "..."``) — so ``graphify query "..."`` counts but a path or string that
775
+ merely contains the substring ``graphify`` (e.g. ``cat
776
+ graphify-out/graph.json``, where ``graphify`` is a path component rather
777
+ than a command) does not.
778
+
779
+ Note this counts matching *entries* in ``bash_commands``, not individual
780
+ invocations: a single command like ``"graphify query a && graphify query
781
+ b"`` counts once, not twice. Treat the result as an "at least one graph
782
+ query this leg" signal, not an exact invocation tally.
783
+ """
784
+ return sum(1 for cmd in bash_commands if cmd and _GRAPHIFY_INVOCATION_RE.search(cmd))
785
+
786
+
750
787
  def _infer_repo_github_slug(repo_path: str) -> str | None:
751
788
  """Best-effort ``owner/repo`` slug for *repo_path*'s ``origin`` remote (#1492).
752
789
 
@@ -1081,6 +1118,7 @@ def _worker_subprocess_env(
1081
1118
  prefix: str | None = None,
1082
1119
  base_prefix: str | None = None,
1083
1120
  cwd: "str | Path | None" = None,
1121
+ assignment_id: str | None = None,
1084
1122
  ) -> dict[str, str]:
1085
1123
  """Environment for worker `claude -p` subprocesses, with the agent's own
1086
1124
  venv removed (#402).
@@ -1113,6 +1151,21 @@ def _worker_subprocess_env(
1113
1151
  ``provider.env()`` on top of this result may still override ``PWD``
1114
1152
  deliberately; that ordering is preserved since we only set it here, not
1115
1153
  after.
1154
+
1155
+ #2217: ``assignment_id``, when given, is written to
1156
+ ``COORD_ASSIGNMENT_ID``. The headless worker prompt (built in
1157
+ ``review.py`` and elsewhere) tells every worker that if this variable is
1158
+ set it should call ``coord report-result --assignment
1159
+ "$COORD_ASSIGNMENT_ID" ...`` directly as the *authoritative* verdict
1160
+ path, with the transcript-parsed ``END_REVIEW`` block as a fallback only.
1161
+ Before this, nothing in the headless ``claude -p`` dispatch lane (this
1162
+ function is the only place that lane's subprocess environment is built)
1163
+ ever set the variable, so that "primary" path was dead on arrival for
1164
+ every headless review — the fragile transcript parse was silently the
1165
+ *only* path, not a backup. Both spawn call sites below pass
1166
+ ``assignment_id=assignment.id`` so it's set for every worker type (review,
1167
+ smoke, work), matching what ``coord/commands/review.py`` already reads as
1168
+ its ``--assignment`` default.
1116
1169
  """
1117
1170
  env = dict(os.environ if base_env is None else base_env)
1118
1171
  pfx = sys.prefix if prefix is None else prefix
@@ -1135,6 +1188,9 @@ def _worker_subprocess_env(
1135
1188
  if cwd is not None:
1136
1189
  env["PWD"] = str(cwd)
1137
1190
 
1191
+ if assignment_id is not None:
1192
+ env["COORD_ASSIGNMENT_ID"] = assignment_id
1193
+
1138
1194
  return env
1139
1195
 
1140
1196
 
@@ -2878,6 +2934,11 @@ absolute path outside your cwd). That shared checkout is not yours: edits \
2878
2934
  there are lost, or collide with other workers running at the same time. If \
2879
2935
  your worktree looks unexpectedly empty or unwritable, STOP and report it — \
2880
2936
  do not fall back to editing the base checkout and copying files over.
2937
+ - For "where is X handled" / "what calls this" / architecture questions, \
2938
+ query the codebase graph first: `graphify query "<question>"` via Bash. \
2939
+ Grep/Read are for confirming an exact string or line, not for discovering \
2940
+ structure. No `graphify-out/graph.json` in this worktree? Skip straight to \
2941
+ grep, silently — do not stop to build one (#2212).
2881
2942
 
2882
2943
  This session is ONE-SHOT and non-interactive (#1394):
2883
2944
  - There is no next turn and no human to reply to you. Background-task \
@@ -6452,7 +6513,7 @@ class AgentServer:
6452
6513
  # daemon happened to start in — worktree confinement for those
6453
6514
  # providers must not depend on `bash_wrap_spawn` recomputing PWD as
6454
6515
  # a side effect (see `_maybe_bash_wrap`).
6455
- _spawn_env = _worker_subprocess_env(cwd=repo_path)
6516
+ _spawn_env = _worker_subprocess_env(cwd=repo_path, assignment_id=assignment.id)
6456
6517
  # #1402: shared per-repo cargo target dir (see coord.cargo_cache).
6457
6518
  # Must stay in sync with the PTY path in ``_spawn_pty``.
6458
6519
  _spawn_env.update(
@@ -6626,7 +6687,7 @@ class AgentServer:
6626
6687
  # docstring above), so unlike the headless path it never got an
6627
6688
  # incidental PWD correction — confinement here must not depend
6628
6689
  # on a provider trusting $PWD over getcwd() by accident.
6629
- env = _worker_subprocess_env(cwd=repo_path)
6690
+ env = _worker_subprocess_env(cwd=repo_path, assignment_id=assignment.id)
6630
6691
  env.setdefault("TERM", "xterm-256color")
6631
6692
  # #1402: point cargo at this machine's shared per-repo target dir
6632
6693
  # so the build cache survives worktree cleanup and is reused by
@@ -7440,7 +7501,20 @@ class AgentServer:
7440
7501
  try:
7441
7502
  with open(assignment.log_path, "a") as reopen:
7442
7503
  final_status = assignment.status if assignment else "unknown"
7443
- reopen.write(f"# reap: done (exit_code={exit_code} status={final_status})\n")
7504
+ # #2212: log a plain `graphify_invocations=N` counter alongside
7505
+ # the existing reap line — this is the measurable half of the
7506
+ # graph-first navigation rule (see WORKER_SYSTEM_PROMPT and
7507
+ # `_count_graphify_invocations`). `_worker_summary` is `None`
7508
+ # for a non-stream-json log or a parse failure; counting 0 in
7509
+ # that case is the honest answer, not a lie — best-effort like
7510
+ # everything else in this function.
7511
+ _graphify_invocations = _count_graphify_invocations(
7512
+ _worker_summary.bash_commands if _worker_summary is not None else []
7513
+ )
7514
+ reopen.write(
7515
+ f"# reap: done (exit_code={exit_code} status={final_status} "
7516
+ f"graphify_invocations={_graphify_invocations})\n"
7517
+ )
7444
7518
  except (OSError, AttributeError):
7445
7519
  pass
7446
7520
 
@@ -146,6 +146,36 @@ def test_worker_env_no_cwd_leaves_pwd_untouched() -> None:
146
146
  assert env["PWD"] == "/whatever"
147
147
 
148
148
 
149
+ def test_worker_env_sets_coord_assignment_id() -> None:
150
+ """#2217: the headless worker prompt (review.py) tells every worker that
151
+ if $COORD_ASSIGNMENT_ID is set, it must report its verdict straight to
152
+ the coordinator board via `coord report-result` as the *authoritative*
153
+ path — with the transcript-parsed END_REVIEW block as a fallback only.
154
+ Nothing set the variable for the headless `claude -p` dispatch lane, so
155
+ that "primary" instruction was dead on arrival for every review and the
156
+ fragile transcript parse was silently the only path. Both `_spawn` call
157
+ sites must pass assignment_id= so this is set for every worker type."""
158
+ env = _worker_subprocess_env(
159
+ {"PATH": "/usr/bin"},
160
+ prefix="/usr",
161
+ base_prefix="/usr",
162
+ assignment_id="abc123",
163
+ )
164
+ assert env["COORD_ASSIGNMENT_ID"] == "abc123"
165
+
166
+
167
+ def test_worker_env_no_assignment_id_leaves_var_unset() -> None:
168
+ """When assignment_id isn't passed, COORD_ASSIGNMENT_ID must not appear
169
+ at all (not even empty) — callers that don't have an assignment yet
170
+ (e.g. standalone helper use) shouldn't leak a stale/empty value."""
171
+ env = _worker_subprocess_env(
172
+ {"PATH": "/usr/bin"},
173
+ prefix="/usr",
174
+ base_prefix="/usr",
175
+ )
176
+ assert "COORD_ASSIGNMENT_ID" not in env
177
+
178
+
149
179
  def test_health_reports_machine(tmp_path: Path) -> None:
150
180
  server = _server(tmp_path)
151
181
  h = server.health()
@@ -431,6 +461,40 @@ def test_spawn_sets_pwd_to_worktree_bash_wrap_enabled(tmp_path: Path) -> None:
431
461
  server.shutdown()
432
462
 
433
463
 
464
+ def test_spawn_sets_coord_assignment_id(tmp_path: Path) -> None:
465
+ """#2217: the headless `_spawn` path must set COORD_ASSIGNMENT_ID to the
466
+ assignment's own id — this is the variable the review prompt tells every
467
+ worker to use for `coord report-result --assignment "$COORD_ASSIGNMENT_ID"
468
+ ...`, the "authoritative" primary verdict path. Before #2217 nothing set
469
+ it anywhere in this dispatch lane, so that instruction was silently
470
+ unreachable for every headless review; only the fragile transcript-parsed
471
+ END_REVIEW fallback ever ran. This test must fail against pre-#2217 code.
472
+ """
473
+ import coord.agent as agent_mod
474
+
475
+ repo = _init_repo(tmp_path / "repo")
476
+ server = _server(tmp_path, repo_path=repo)
477
+
478
+ captured_env: list[dict[str, str]] = []
479
+ real_popen = agent_mod.subprocess.Popen
480
+
481
+ def recording_popen(spawn_argv, *args, **kwargs):
482
+ if kwargs.get("start_new_session"):
483
+ captured_env.append(dict(kwargs.get("env") or {}))
484
+ return real_popen(spawn_argv, *args, **kwargs)
485
+
486
+ agent_mod.subprocess.Popen = recording_popen # type: ignore[assignment]
487
+ try:
488
+ a = server.assign(_spec(repo, type="review"))
489
+ final = server.wait_for(a.id)
490
+ finally:
491
+ agent_mod.subprocess.Popen = real_popen # type: ignore[assignment]
492
+
493
+ assert captured_env, "Popen was not called"
494
+ assert captured_env[0]["COORD_ASSIGNMENT_ID"] == final.id == a.id
495
+ server.shutdown()
496
+
497
+
434
498
  def test_pty_spawn_sets_pwd_to_repo_path(tmp_path: Path) -> None:
435
499
  """#1783: the PTY spawn path (_spawn_pty) gets the same explicit-PWD
436
500
  treatment as the headless path.
@@ -1572,6 +1636,66 @@ def test_reap_captures_claude_session_id(tmp_path: Path) -> None:
1572
1636
  server.shutdown()
1573
1637
 
1574
1638
 
1639
+ def test_reap_logs_graphify_invocation_count(tmp_path: Path) -> None:
1640
+ """#2212: `_reap` writes a plain `graphify_invocations=N` counter into
1641
+ the worker's log alongside the existing "# reap: done" line — the
1642
+ measurable half of the graph-first navigation rule in
1643
+ WORKER_SYSTEM_PROMPT. A worker whose transcript shows one `graphify
1644
+ query ...` Bash call and one unrelated Bash call must be counted 1, not
1645
+ 2 or 0, end-to-end through the real reap path (not just the
1646
+ `_count_graphify_invocations` unit)."""
1647
+ repo = _init_repo(tmp_path / "repo")
1648
+
1649
+ graphify_call = json.dumps({
1650
+ "type": "assistant",
1651
+ "message": {
1652
+ "model": "claude-sonnet-4-6",
1653
+ "content": [{
1654
+ "type": "tool_use",
1655
+ "name": "Bash",
1656
+ "id": "tu_1",
1657
+ "input": {"command": 'graphify query "where is X handled"'},
1658
+ }],
1659
+ },
1660
+ })
1661
+ unrelated_call = json.dumps({
1662
+ "type": "assistant",
1663
+ "message": {
1664
+ "model": "claude-sonnet-4-6",
1665
+ "content": [{
1666
+ "type": "tool_use",
1667
+ "name": "Bash",
1668
+ "id": "tu_2",
1669
+ "input": {"command": "grep -rn foo ."},
1670
+ }],
1671
+ },
1672
+ })
1673
+ result_line = json.dumps({"type": "result", "subtype": "success", "is_error": False})
1674
+ worker_sh = (
1675
+ f"echo '{graphify_call}'; echo '{unrelated_call}'; echo '{result_line}'; exit 0"
1676
+ )
1677
+ server = AgentServer(
1678
+ machine_name="test",
1679
+ repos=["api"],
1680
+ repo_paths={"api": str(repo)},
1681
+ state_dir=tmp_path / "state",
1682
+ worker_command=lambda spec: ["/bin/sh", "-c", worker_sh],
1683
+ )
1684
+ spec = AssignmentSpec(
1685
+ repo_name="api",
1686
+ repo_path=str(repo),
1687
+ issue_number=2212,
1688
+ issue_title="t",
1689
+ briefing="b",
1690
+ )
1691
+ a = server.assign(spec)
1692
+ final = server.wait_for(a.id, timeout=10)
1693
+
1694
+ log_text = Path(final.log_path).read_text()
1695
+ assert "graphify_invocations=1" in log_text
1696
+ server.shutdown()
1697
+
1698
+
1575
1699
  def test_assignment_spec_accepts_resume_session_id() -> None:
1576
1700
  """AssignmentSpec round-trips resume_session_id through to_dict / from dict."""
1577
1701
  spec = AssignmentSpec(
@@ -13,7 +13,12 @@ from unittest.mock import MagicMock, patch
13
13
 
14
14
  import pytest
15
15
 
16
- from coord.agent import WORKER_SYSTEM_PROMPT, AssignmentSpec, default_worker_command
16
+ from coord.agent import (
17
+ WORKER_SYSTEM_PROMPT,
18
+ AssignmentSpec,
19
+ _count_graphify_invocations,
20
+ default_worker_command,
21
+ )
17
22
  from coord.config import ConfigError, ReviewsConfig, load
18
23
  from coord.models import Machine, Proposal, Repo
19
24
 
@@ -47,6 +52,111 @@ def test_worker_system_prompt_requires_clean_build_before_done() -> None:
47
52
  assert "explicitly call it out" in WORKER_SYSTEM_PROMPT
48
53
 
49
54
 
55
+ # ── #2212: graph-first navigation instruction ───────────────────────────────
56
+
57
+
58
+ def test_worker_system_prompt_contains_graph_first_instruction() -> None:
59
+ """#2212: the rule that workers should query the graphify graph before
60
+ grepping for structure lived only in CLAUDE.md (39.9KB, one paragraph)
61
+ and never survived contact with a real task — #2180's leg ran 48 greps
62
+ and 0 graph queries. The rule must live in the short, always-read
63
+ worker system prompt, name the concrete CLI entry point, and say what
64
+ grep/read ARE still for (exact-string/line confirmation) so this isn't
65
+ read as a blanket grep ban."""
66
+ assert 'graphify query "<question>"' in WORKER_SYSTEM_PROMPT
67
+ assert "query the codebase graph first" in WORKER_SYSTEM_PROMPT
68
+ assert "confirming an exact string or line" in WORKER_SYSTEM_PROMPT
69
+
70
+
71
+ def test_worker_system_prompt_states_no_graph_fallback() -> None:
72
+ """A repo/worktree with no built graph must not stall or STUCK a
73
+ worker — the instruction must say what to do when the graph is
74
+ absent: fall back to grep, silently."""
75
+ assert "graphify-out/graph.json" in WORKER_SYSTEM_PROMPT
76
+ assert "Skip straight to grep" in WORKER_SYSTEM_PROMPT
77
+
78
+
79
+ def test_worker_system_prompt_graph_instruction_present_regardless_of_repo() -> None:
80
+ """The instruction is baked into the static system prompt, not derived
81
+ per-repo — assert it survives `default_worker_command` for two
82
+ differently-named repos/specs, the same shape a real dispatch uses."""
83
+ for repo_name in ("api", "some-other-repo"):
84
+ spec = AssignmentSpec(
85
+ repo_name=repo_name,
86
+ repo_path=f"/tmp/{repo_name}",
87
+ issue_number=1,
88
+ issue_title="t",
89
+ briefing="b",
90
+ )
91
+ argv = default_worker_command(spec)
92
+ idx = argv.index("--system-prompt")
93
+ assert 'graphify query "<question>"' in argv[idx + 1]
94
+
95
+
96
+ def test_default_worker_command_allowed_tools_permits_graph_query_path() -> None:
97
+ """The graph is queried via `graphify query ...` over Bash — the
98
+ worker's --allowedTools must still include Bash so that path is
99
+ reachable (today's allowlist is Read,Edit,Write,Bash,Monitor)."""
100
+ spec = AssignmentSpec(
101
+ repo_name="api",
102
+ repo_path="/tmp/repo",
103
+ issue_number=1,
104
+ issue_title="t",
105
+ briefing="b",
106
+ )
107
+ argv = default_worker_command(spec)
108
+ idx = argv.index("--allowedTools")
109
+ assert "Bash" in argv[idx + 1].split(",")
110
+
111
+
112
+ def test_worker_system_prompt_hard_rules_unchanged_by_graph_instruction() -> None:
113
+ """The #2212 addition must not displace any of the existing hard
114
+ rules — assert each is still present so a future prompt edit can't
115
+ silently drop one of these while touching the nearby graph bullet."""
116
+ assert "Do NOT run gh commands" in WORKER_SYSTEM_PROMPT
117
+ assert "Work only inside your current working directory" in WORKER_SYSTEM_PROMPT
118
+ assert "NEVER commit or push to main or develop directly" in WORKER_SYSTEM_PROMPT
119
+ assert "This session is ONE-SHOT and non-interactive (#1394)" in WORKER_SYSTEM_PROMPT
120
+ assert (
121
+ "Background-task completion notifications will NEVER reach you"
122
+ in WORKER_SYSTEM_PROMPT
123
+ )
124
+ assert "ALWAYS `git add`, `git commit`, and `git push origin HEAD` BEFORE your" in (
125
+ WORKER_SYSTEM_PROMPT
126
+ )
127
+
128
+
129
+ # ── #2212: graphify-invocation counter (measurability) ──────────────────────
130
+
131
+
132
+ def test_count_graphify_invocations_counts_command_tokens() -> None:
133
+ assert _count_graphify_invocations(['graphify query "where is X handled"']) == 1
134
+ assert _count_graphify_invocations(["cd repo && graphify update ."]) == 1
135
+ assert _count_graphify_invocations(["grep -rn foo .", "rg bar ."]) == 0
136
+
137
+
138
+ def test_count_graphify_invocations_ignores_path_substring() -> None:
139
+ """A command that merely mentions `graphify-out/` as a path (not the
140
+ `graphify` binary as a command token) must not be counted — otherwise
141
+ the counter over-reports and the "0 across N legs" signal is unreliable."""
142
+ assert _count_graphify_invocations(["cat graphify-out/graph.json"]) == 0
143
+
144
+
145
+ def test_count_graphify_invocations_empty_list() -> None:
146
+ assert _count_graphify_invocations([]) == 0
147
+
148
+
149
+ def test_count_graphify_invocations_counts_newline_separated_commands() -> None:
150
+ """Claude Code's Bash tool very commonly issues multi-line command
151
+ strings (`cd` then a command on the next line, multi-step scripts) not
152
+ joined with `&&`/`;`. A bare newline must count as a separator, or a
153
+ worker that genuinely queried the graph gets silently undercounted to
154
+ 0 — undermining the "0 across N legs" landing signal (#2212 review)."""
155
+ assert _count_graphify_invocations(['cd repo\ngraphify query "foo"']) == 1
156
+ assert _count_graphify_invocations(["set -e\ngraphify update .\n"]) == 1
157
+ assert _count_graphify_invocations(["cd repo\n graphify query x"]) == 1
158
+
159
+
50
160
  # ── Default ReviewsConfig checklist ─────────────────────────────────────────
51
161
 
52
162