code-coordinator 0.5.129__tar.gz → 0.5.131__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 (861) hide show
  1. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/code_coordinator.egg-info/SOURCES.txt +1 -0
  4. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/code_coordinator.egg-info/scm_file_list.json +1 -0
  5. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/code_coordinator.egg-info/scm_version.json +2 -2
  6. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/agent.py +90 -3
  7. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/scripts/coord-test-runner.sh +189 -4
  8. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_agent_push_failure.py +186 -0
  9. code_coordinator-0.5.131/tests/test_coord_test_runner_populated_home.py +665 -0
  10. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_coord_test_runner_routing.py +9 -3
  11. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/.claude/commands/board.md +0 -0
  12. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/.claude/commands/complete-session.md +0 -0
  13. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/.claude/commands/coordinator.md +0 -0
  14. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/.githooks/_lib.sh +0 -0
  15. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/.githooks/post-checkout +0 -0
  16. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/.githooks/post-commit +0 -0
  17. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/.githooks/post-merge +0 -0
  18. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  19. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/.github/coord-ci-acceptance.yml +0 -0
  20. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/.github/workflows/auto-release.yml +0 -0
  21. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/.github/workflows/cargo-test.yml +0 -0
  22. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/.github/workflows/publish.yml +0 -0
  23. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/.github/workflows/release-tui.yml +0 -0
  24. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/.github/workflows/test.yml +0 -0
  25. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/.gitignore +0 -0
  26. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/CLAUDE.md +0 -0
  27. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/GOAL.md +0 -0
  28. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/LICENSE +0 -0
  29. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/MANIFEST.in +0 -0
  30. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/README.md +0 -0
  31. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/code_coordinator.egg-info/dependency_links.txt +0 -0
  32. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/code_coordinator.egg-info/entry_points.txt +0 -0
  33. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/code_coordinator.egg-info/requires.txt +0 -0
  34. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/code_coordinator.egg-info/top_level.txt +0 -0
  35. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/__init__.py +0 -0
  36. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/_board_mapping.py +0 -0
  37. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/acceptance.py +0 -0
  38. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/acceptance_drivers.py +0 -0
  39. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/agent_app.py +0 -0
  40. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/agent_update.py +0 -0
  41. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/agents/opencode/.gitignore +0 -0
  42. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/agents/opencode/agents/work.md +0 -0
  43. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/agents/opencode/routing.jsonc +0 -0
  44. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/audit.py +0 -0
  45. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/auto_loop.py +0 -0
  46. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/block_log.py +0 -0
  47. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/board_bool_guard.py +0 -0
  48. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/board_service.py +0 -0
  49. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/board_wire.py +0 -0
  50. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/brain.py +0 -0
  51. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/branch_model.py +0 -0
  52. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/bug_intake.py +0 -0
  53. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/cargo_cache.py +0 -0
  54. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/ci_github.py +0 -0
  55. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/ci_store.py +0 -0
  56. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/claim.py +0 -0
  57. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/cli.py +0 -0
  58. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/client.py +0 -0
  59. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/commands/__init__.py +0 -0
  60. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/commands/_common.py +0 -0
  61. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/commands/acceptance.py +0 -0
  62. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/commands/agent_ops.py +0 -0
  63. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/commands/audit.py +0 -0
  64. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/commands/chat.py +0 -0
  65. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/commands/dispatch.py +0 -0
  66. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/commands/dispatch_workers.py +0 -0
  67. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/commands/drive.py +0 -0
  68. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/commands/drive_queue.py +0 -0
  69. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/commands/gate_a.py +0 -0
  70. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/commands/gates.py +0 -0
  71. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/commands/issues.py +0 -0
  72. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/commands/lifecycle.py +0 -0
  73. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/commands/merge.py +0 -0
  74. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/commands/milestone.py +0 -0
  75. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/commands/plan_followup.py +0 -0
  76. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/commands/plans.py +0 -0
  77. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/commands/portal.py +0 -0
  78. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/commands/release.py +0 -0
  79. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/commands/repo.py +0 -0
  80. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/commands/report.py +0 -0
  81. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/commands/review.py +0 -0
  82. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/commands/scorecard.py +0 -0
  83. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/commands/sessions.py +0 -0
  84. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/commands/setup.py +0 -0
  85. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/commands/status.py +0 -0
  86. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/commands/terminal.py +0 -0
  87. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/commands/test_gate.py +0 -0
  88. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/commands/tui.py +0 -0
  89. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/comments.py +0 -0
  90. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/config.py +0 -0
  91. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/config_reload.py +0 -0
  92. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/conflict_fix.py +0 -0
  93. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dao.py +0 -0
  94. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/__init__.py +0 -0
  95. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/fixture.py +0 -0
  96. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/index.html +0 -0
  97. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/server.py +0 -0
  98. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/terminal.py +0 -0
  99. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/.gitignore +0 -0
  100. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/components.json +0 -0
  101. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/dist/assets/Gallery-BoKs3mpY.js +0 -0
  102. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
  103. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/dist/assets/Terminal-CEsP08iX.js +0 -0
  104. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/dist/assets/index-CDHPlB6k.js +0 -0
  105. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
  106. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
  107. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
  108. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
  109. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
  110. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/dist/index.html +0 -0
  111. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
  112. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/dist/sw.js +0 -0
  113. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
  114. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
  115. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
  116. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
  117. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
  118. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
  119. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
  120. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
  121. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
  122. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
  123. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/eslint.config.js +0 -0
  124. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/index.html +0 -0
  125. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
  126. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/package-lock.json +0 -0
  127. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/package.json +0 -0
  128. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
  129. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/playwright.config.ts +0 -0
  130. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/postcss.config.js +0 -0
  131. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
  132. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
  133. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
  134. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/App.tsx +0 -0
  135. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/api/client.ts +0 -0
  136. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/api/generated.ts +0 -0
  137. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
  138. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
  139. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
  140. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
  141. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
  142. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
  143. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
  144. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
  145. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
  146. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
  147. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
  148. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
  149. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
  150. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
  151. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
  152. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
  153. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
  154. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
  155. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
  156. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
  157. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
  158. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
  159. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
  160. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
  161. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
  162. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
  163. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
  164. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
  165. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
  166. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
  167. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
  168. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
  169. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
  170. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
  171. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/index.css +0 -0
  172. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
  173. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
  174. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/main.tsx +0 -0
  175. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
  176. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
  177. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
  178. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
  179. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
  180. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
  181. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
  182. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
  183. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
  184. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
  185. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
  186. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
  187. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
  188. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
  189. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
  190. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
  191. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
  192. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
  193. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
  194. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
  195. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
  196. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/test-setup.ts +0 -0
  197. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
  198. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/tailwind.config.js +0 -0
  199. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/tsconfig.json +0 -0
  200. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/tsconfig.node.json +0 -0
  201. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/vite.config.ts +0 -0
  202. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/db.py +0 -0
  203. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dead_end.py +0 -0
  204. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/deploy/README.md +0 -0
  205. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/deploy/coord-agent.service +0 -0
  206. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/deploy/coord-db-backup.service +0 -0
  207. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/deploy/coord-db-backup.sh +0 -0
  208. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/deploy/coord-db-backup.timer +0 -0
  209. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/deploy/coord-drive-queue.service +0 -0
  210. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/deploy/coord-drive-queue.timer +0 -0
  211. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/deploy/coord-notify.service +0 -0
  212. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/deploy/coord-notify.timer +0 -0
  213. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/deploy/coord-release-propagate.service +0 -0
  214. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/deploy/coord-release-propagate.timer +0 -0
  215. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/deploy/coord-release-window.service +0 -0
  216. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/deploy/coord-release-window.timer +0 -0
  217. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/deploy/coord-serve.service +0 -0
  218. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/deploy/coord-web-dist-build.service +0 -0
  219. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/deploy/coord-web-dist-build.timer +0 -0
  220. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/deploy/coord-web.service +0 -0
  221. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/deploy_manifest.py +0 -0
  222. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/deploy_units.py +0 -0
  223. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/deps.py +0 -0
  224. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/diagnose.py +0 -0
  225. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dispatch.py +0 -0
  226. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dist_name.py +0 -0
  227. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/drive.py +0 -0
  228. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/drive_queue.py +0 -0
  229. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/drive_state.py +0 -0
  230. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/events.py +0 -0
  231. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/failure_class.py +0 -0
  232. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/filelock.py +0 -0
  233. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/fleet_config_health.py +0 -0
  234. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/freshness.py +0 -0
  235. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/gate_a.py +0 -0
  236. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/gate_b.py +0 -0
  237. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/gate_snapshot.py +0 -0
  238. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/gates.py +0 -0
  239. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/github_ops.py +0 -0
  240. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/goal.py +0 -0
  241. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/graph_health.py +0 -0
  242. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/health/__init__.py +0 -0
  243. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/health/aggregate.py +0 -0
  244. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/health/checks/__init__.py +0 -0
  245. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/health/checks/agent_install.py +0 -0
  246. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/health/checks/cargo_targets.py +0 -0
  247. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/health/checks/claude_binary.py +0 -0
  248. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/health/checks/deploy_lane_facts.py +0 -0
  249. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/health/checks/disk.py +0 -0
  250. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/health/checks/fleet_board.py +0 -0
  251. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  252. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/health/checks/fleet_phantom.py +0 -0
  253. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/health/checks/fleet_unit_drift.py +0 -0
  254. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/health/checks/graph.py +0 -0
  255. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/health/checks/graphify_cli.py +0 -0
  256. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/health/checks/index_lock.py +0 -0
  257. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/health/checks/plan_usage.py +0 -0
  258. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/health/checks/repo_state.py +0 -0
  259. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/health/checks/spawned_coord.py +0 -0
  260. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/health/checks/timer_active.py +0 -0
  261. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/health/checks/toolchain.py +0 -0
  262. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/health/checks/unit_drift.py +0 -0
  263. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/health/checks/unit_enablement.py +0 -0
  264. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/health/checks/worktrees.py +0 -0
  265. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/health/cli.py +0 -0
  266. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/health/context.py +0 -0
  267. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/health/fleet_snapshot.py +0 -0
  268. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/health/models.py +0 -0
  269. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/health/pypi.py +0 -0
  270. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/health/registry.py +0 -0
  271. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/health/render.py +0 -0
  272. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/health/units.py +0 -0
  273. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/hooks.py +0 -0
  274. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/housekeeping.py +0 -0
  275. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/interactive.py +0 -0
  276. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/issue_store.py +0 -0
  277. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/liveness_auditor.py +0 -0
  278. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/machine_pause.py +0 -0
  279. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/merge_queue.py +0 -0
  280. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/milestone_chat.py +0 -0
  281. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/milestone_dispatch.py +0 -0
  282. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/milestone_gate.py +0 -0
  283. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/milestone_order.py +0 -0
  284. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/mock_author.py +0 -0
  285. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/models.py +0 -0
  286. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/network.py +0 -0
  287. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/new_issue_chat.py +0 -0
  288. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/notifier/__init__.py +0 -0
  289. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/notifier/baseline.py +0 -0
  290. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/notifier/cli.py +0 -0
  291. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/notifier/collect.py +0 -0
  292. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/notifier/digest.py +0 -0
  293. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/notifier/models.py +0 -0
  294. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/notifier/predicate.py +0 -0
  295. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/notifier/service.py +0 -0
  296. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/notifier/store.py +0 -0
  297. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/notifier/transport.py +0 -0
  298. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/notify.py +0 -0
  299. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/openapi.py +0 -0
  300. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/overlap_fence.py +0 -0
  301. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/overlap_predict.py +0 -0
  302. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/parentage.py +0 -0
  303. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/parentage_github.py +0 -0
  304. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/pipeline.py +0 -0
  305. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/plan_parser.py +0 -0
  306. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/plans.py +0 -0
  307. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/platform_paths.py +0 -0
  308. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/portal_bridge.py +0 -0
  309. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/portal_store.py +0 -0
  310. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/portal_sync.py +0 -0
  311. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/pr_body_lint.py +0 -0
  312. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/prereqs.py +0 -0
  313. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/progress.py +0 -0
  314. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/providers/__init__.py +0 -0
  315. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/providers/base.py +0 -0
  316. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/providers/claude.py +0 -0
  317. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/providers/claude_pty.py +0 -0
  318. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/providers/opencode.py +0 -0
  319. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/queue_diagnose.py +0 -0
  320. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/reconcile.py +0 -0
  321. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/refine_chat.py +0 -0
  322. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/release_cordon.py +0 -0
  323. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/release_propagate.py +0 -0
  324. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/release_verify.py +0 -0
  325. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/release_window.py +0 -0
  326. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/repo_edit.py +0 -0
  327. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/repo_onboard.py +0 -0
  328. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/reports.py +0 -0
  329. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/revalidate.py +0 -0
  330. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/review.py +0 -0
  331. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/scorecard.py +0 -0
  332. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/serve_app.py +0 -0
  333. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/skills/portal-followup/SKILL.md +0 -0
  334. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/skills/update-issue/SKILL.md +0 -0
  335. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/smoke.py +0 -0
  336. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/spend_ceiling.py +0 -0
  337. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/split_work.py +0 -0
  338. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/stage_projection.py +0 -0
  339. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/state.py +0 -0
  340. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/test_author.py +0 -0
  341. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/test_chat.py +0 -0
  342. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/test_orchestrator.py +0 -0
  343. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/test_report.py +0 -0
  344. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/tui_release.py +0 -0
  345. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/usage.py +0 -0
  346. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/usage_limits.py +0 -0
  347. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/usage_rollup.py +0 -0
  348. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/worker_events.py +0 -0
  349. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coordinator.example.yml +0 -0
  350. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/deploy/coord-agent.service +0 -0
  351. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/deploy/coord-db-backup.service +0 -0
  352. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/deploy/coord-db-backup.sh +0 -0
  353. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/deploy/coord-db-backup.timer +0 -0
  354. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/deploy/coord-drive-queue.service +0 -0
  355. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/deploy/coord-drive-queue.timer +0 -0
  356. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/deploy/coord-notify.service +0 -0
  357. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/deploy/coord-notify.timer +0 -0
  358. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/deploy/coord-release-propagate.service +0 -0
  359. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/deploy/coord-release-propagate.timer +0 -0
  360. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/deploy/coord-release-window.service +0 -0
  361. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/deploy/coord-release-window.timer +0 -0
  362. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/deploy/coord-serve.service +0 -0
  363. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/deploy/coord-web-dist-build.service +0 -0
  364. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/deploy/coord-web-dist-build.sh +0 -0
  365. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/deploy/coord-web-dist-build.timer +0 -0
  366. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/deploy/coord-web-rollback.sh +0 -0
  367. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/deploy/coord-web.service +0 -0
  368. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/deploy/node-shim.sh +0 -0
  369. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/docs/AGENT_OPERATIONS.md +0 -0
  370. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/docs/ARCHITECTURE.md +0 -0
  371. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/docs/ARCH_SECURITY_GATES.md +0 -0
  372. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/docs/COCKPIT.md +0 -0
  373. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/docs/CONTROL_CENTER.md +0 -0
  374. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/docs/COST_DISCIPLINE.md +0 -0
  375. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/docs/CROSS_PLATFORM.md +0 -0
  376. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/docs/CUSTOMER_PORTAL.md +0 -0
  377. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/docs/DRIVE_QUEUE.md +0 -0
  378. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/docs/EPHEMERAL_WORKERS.md +0 -0
  379. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/docs/FORGE_MIGRATION.md +0 -0
  380. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/docs/GRAPHIFY_SETUP.md +0 -0
  381. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/docs/ISSUE_GUIDANCE.md +0 -0
  382. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/docs/MAC_MINI.md +0 -0
  383. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  384. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/docs/NOTIFIER.md +0 -0
  385. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/docs/OPENCODE_VERIFICATION.md +0 -0
  386. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/docs/OPERATING_GOTCHAS.md +0 -0
  387. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/docs/ORACLE_LOOP.md +0 -0
  388. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/docs/PHONE_WEBAPP.md +0 -0
  389. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/docs/PIPELINE_V2.md +0 -0
  390. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/docs/PLATFORM_EVOLUTION.md +0 -0
  391. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/docs/SECOND_BACKEND.md +0 -0
  392. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/docs/STORE_SERVICE.md +0 -0
  393. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  394. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/docs/WEB_CONTROL_CENTER.md +0 -0
  395. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/docs/WSL_WINDOWS_WORKER.md +0 -0
  396. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/docs/mocks/web/README.md +0 -0
  397. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/docs/mocks/web/_tokens.css +0 -0
  398. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/docs/mocks/web/issue-detail.html +0 -0
  399. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/docs/mocks/web/pipeline-narrow.html +0 -0
  400. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/docs/mocks/web/pipeline-wide.html +0 -0
  401. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/graphify-out/.gitignore +0 -0
  402. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/install-agent.sh +0 -0
  403. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/pyproject.toml +0 -0
  404. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/scripts/audit_review_verdict_overrides.py +0 -0
  405. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  406. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/scripts/azure-workers/build-worker-image.sh +0 -0
  407. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/scripts/azure-workers/coordinator-machine.py +0 -0
  408. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/scripts/azure-workers/epic-down.sh +0 -0
  409. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/scripts/azure-workers/epic-up.sh +0 -0
  410. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/scripts/azure-workers/preflight.sh +0 -0
  411. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/scripts/azure-workers/provision-worker.sh +0 -0
  412. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  413. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  414. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/scripts/azure-workers/verify-github-token.sh +0 -0
  415. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/scripts/codegen.py +0 -0
  416. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/scripts/drive-batch.sh +0 -0
  417. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/scripts/gen_board_fixture.py +0 -0
  418. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/scripts/next_release_tag.py +0 -0
  419. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/scripts/run_tests_in_populated_home.sh +0 -0
  420. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/scripts/run_tests_without_gh.sh +0 -0
  421. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/scripts/smoke_437_interactive.py +0 -0
  422. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/scripts/verify_878_review_capture.py +0 -0
  423. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/scripts/verify_release_published.py +0 -0
  424. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/scripts/verify_release_wheel.py +0 -0
  425. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/setup.cfg +0 -0
  426. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/SMOKE_SET.md +0 -0
  427. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/__init__.py +0 -0
  428. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  429. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-33/contract.md +0 -0
  430. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-33/manifest.yml +0 -0
  431. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  432. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  433. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  434. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  435. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-37/conftest.py +0 -0
  436. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-37/contract.md +0 -0
  437. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-37/manifest.yml +0 -0
  438. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  439. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  440. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-38/contract.md +0 -0
  441. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-38/manifest.yml +0 -0
  442. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  443. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  444. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  445. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  446. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  447. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  448. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  449. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  450. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  451. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  452. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-51/contract.md +0 -0
  453. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  454. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  455. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-51/manifest.yml +0 -0
  456. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  457. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-51/tsconfig.json +0 -0
  458. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
  459. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-65/contract.md +0 -0
  460. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-65/manifest.yml +0 -0
  461. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
  462. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
  463. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
  464. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
  465. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
  466. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
  467. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
  468. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
  469. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  470. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/conftest.py +0 -0
  471. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/fixtures/board-pipeline-basic.json +0 -0
  472. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  473. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  474. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  475. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  476. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/fixtures/playwright/all_pass.json +0 -0
  477. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  478. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/fixtures/playwright/mixed_fail.json +0 -0
  479. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  480. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  481. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/fixtures/playwright/skip.json +0 -0
  482. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/fixtures/playwright/truncated.json +0 -0
  483. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  484. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  485. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  486. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  487. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  488. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  489. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  490. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  491. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_acceptance.py +0 -0
  492. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_acceptance_drivers.py +0 -0
  493. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_agent.py +0 -0
  494. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_agent_api_error.py +0 -0
  495. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_agent_app.py +0 -0
  496. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_agent_branch_base.py +0 -0
  497. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_agent_branch_capture.py +0 -0
  498. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_agent_config_free_1712.py +0 -0
  499. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_agent_deploy_units_endpoint.py +0 -0
  500. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_agent_dirty_worktree.py +0 -0
  501. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_agent_graph_self_heal.py +0 -0
  502. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_agent_health_h3.py +0 -0
  503. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_agent_idle_restart.py +0 -0
  504. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_agent_reap.py +0 -0
  505. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_agent_repos_and_pull.py +0 -0
  506. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_agent_restart_services_endpoint.py +0 -0
  507. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_agent_startup_diagnostics.py +0 -0
  508. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_agent_update.py +0 -0
  509. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_agent_update_bluegreen.py +0 -0
  510. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_agent_usage_limit.py +0 -0
  511. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_agent_zero_commit.py +0 -0
  512. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_ambient_home_isolation.py +0 -0
  513. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_approve_reject_plan.py +0 -0
  514. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_approve_usage_gate.py +0 -0
  515. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_assignment_already_recorded_daemon.py +0 -0
  516. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_audit_log.py +0 -0
  517. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_audit_outcome.py +0 -0
  518. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_audit_query.py +0 -0
  519. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_auto_loop.py +0 -0
  520. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_auto_release_publish_2035.py +0 -0
  521. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_base_checkout_restore.py +0 -0
  522. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_block_log.py +0 -0
  523. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_board_cap_762.py +0 -0
  524. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_board_fixture.py +0 -0
  525. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_board_read_path.py +0 -0
  526. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_board_service.py +0 -0
  527. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_board_state.py +0 -0
  528. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_board_wire.py +0 -0
  529. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_brain.py +0 -0
  530. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_branch_model.py +0 -0
  531. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_bug_intake.py +0 -0
  532. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_build_worker_image_env_update.py +0 -0
  533. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cargo_cache.py +0 -0
  534. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_ci_acceptance_gate_1950.py +0 -0
  535. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_ci_parity_2091.py +0 -0
  536. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_ci_store.py +0 -0
  537. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_claim.py +0 -0
  538. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_acceptance.py +0 -0
  539. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_assign.py +0 -0
  540. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  541. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_assign_interactive_remote.py +0 -0
  542. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_assign_provider.py +0 -0
  543. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  544. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_audit.py +0 -0
  545. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_chat_continue.py +0 -0
  546. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_diagnose_config_provenance.py +0 -0
  547. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_diagnose_graph.py +0 -0
  548. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_doctor.py +0 -0
  549. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_doctor_config_free_1801.py +0 -0
  550. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  551. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_drive.py +0 -0
  552. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_drive_queue.py +0 -0
  553. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_escalate.py +0 -0
  554. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_fix_headless_review.py +0 -0
  555. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_gate_a.py +0 -0
  556. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_install_drift.py +0 -0
  557. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_install_skills.py +0 -0
  558. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_issue_create_label.py +0 -0
  559. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_issue_reopen.py +0 -0
  560. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_merge.py +0 -0
  561. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_milestone_assign.py +0 -0
  562. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_milestone_capture.py +0 -0
  563. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_milestone_chat_add_child.py +0 -0
  564. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_milestone_dispatch.py +0 -0
  565. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_milestone_gate_b.py +0 -0
  566. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_milestone_gate_c.py +0 -0
  567. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_milestone_order.py +0 -0
  568. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  569. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_milestone_ship.py +0 -0
  570. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_network.py +0 -0
  571. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_new_issue_chat.py +0 -0
  572. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_plans.py +0 -0
  573. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_portal.py +0 -0
  574. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_pull_artifact.py +0 -0
  575. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_queue.py +0 -0
  576. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_reattach_sessions.py +0 -0
  577. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_refine_board.py +0 -0
  578. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_release_preflight.py +0 -0
  579. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_release_propagate.py +0 -0
  580. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_release_window.py +0 -0
  581. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_repo_2220.py +0 -0
  582. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_scorecard.py +0 -0
  583. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_set_review_findings.py +0 -0
  584. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_status_advisory_terminal.py +0 -0
  585. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_status_merge_queue.py +0 -0
  586. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_status_provider.py +0 -0
  587. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_status_review_finalizing.py +0 -0
  588. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_status_test_failed_tag.py +0 -0
  589. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_status_usage_limit.py +0 -0
  590. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_sync_comments_873.py +0 -0
  591. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_test_plan.py +0 -0
  592. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_track.py +0 -0
  593. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_tui_update.py +0 -0
  594. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_wait.py +0 -0
  595. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_client_base_install.py +0 -0
  596. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_comments.py +0 -0
  597. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_completion_summary.py +0 -0
  598. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_config.py +0 -0
  599. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_config_acceptance.py +0 -0
  600. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_config_audit.py +0 -0
  601. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_config_pricing.py +0 -0
  602. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  603. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_config_usage_gate.py +0 -0
  604. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_conflict_fix.py +0 -0
  605. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_conflict_fix_semantic.py +0 -0
  606. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_coord_test.py +0 -0
  607. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_coord_test_runner_baseline.py +0 -0
  608. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_coord_test_runner_toolchain.py +0 -0
  609. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_coord_web_sse_restart_live.py +0 -0
  610. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_coordinator_machine.py +0 -0
  611. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cross_platform_imports.py +0 -0
  612. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_dashboard.py +0 -0
  613. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_dashboard_fixture.py +0 -0
  614. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_dashboard_terminal.py +0 -0
  615. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_dashboard_terminal_live.py +0 -0
  616. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_db.py +0 -0
  617. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_dead_end.py +0 -0
  618. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_deploy_coord_db_backup.py +0 -0
  619. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_deploy_coord_web_dist.py +0 -0
  620. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_deploy_coord_web_rollback.py +0 -0
  621. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_deploy_drive_queue_unit.py +0 -0
  622. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_deploy_manifest.py +0 -0
  623. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_deploy_units_lane.py +0 -0
  624. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_deploy_web_unit.py +0 -0
  625. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_deps.py +0 -0
  626. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_diagnose.py +0 -0
  627. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_dispatch.py +0 -0
  628. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_dispatch_target_validation.py +0 -0
  629. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_dist_name.py +0 -0
  630. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_done_housekeeping.py +0 -0
  631. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_drive.py +0 -0
  632. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_drive_queue.py +0 -0
  633. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_drive_state.py +0 -0
  634. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_drive_tmux.py +0 -0
  635. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_epic_up_capability_detection.py +0 -0
  636. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  637. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_epic_up_image_provenance.py +0 -0
  638. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_errors.py +0 -0
  639. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_events.py +0 -0
  640. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_failure_class.py +0 -0
  641. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_filelock.py +0 -0
  642. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  643. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_fix_of_force_override.py +0 -0
  644. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_fleet_config_health.py +0 -0
  645. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_fleet_health_probes.py +0 -0
  646. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_fleet_health_snapshot.py +0 -0
  647. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_freshness.py +0 -0
  648. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_gate_a.py +0 -0
  649. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_gate_b.py +0 -0
  650. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_gate_snapshot_staleness.py +0 -0
  651. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_gates.py +0 -0
  652. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  653. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_generated_types_fixture.py +0 -0
  654. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_github_ops.py +0 -0
  655. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_goal.py +0 -0
  656. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_graph_health.py +0 -0
  657. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_graph_selfheal_absent_2237.py +0 -0
  658. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_handoff.py +0 -0
  659. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_health_checks.py +0 -0
  660. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_health_cli.py +0 -0
  661. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_health_cli_graph.py +0 -0
  662. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_health_config.py +0 -0
  663. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_health_context.py +0 -0
  664. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_health_deploy_lane_facts.py +0 -0
  665. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_health_incident_regression.py +0 -0
  666. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_health_pypi.py +0 -0
  667. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_health_registry.py +0 -0
  668. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_health_timer_active.py +0 -0
  669. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_health_toolchain.py +0 -0
  670. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_health_unit_drift.py +0 -0
  671. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_health_unit_enablement.py +0 -0
  672. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_hooks.py +0 -0
  673. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_human_attended_437.py +0 -0
  674. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_init.py +0 -0
  675. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_integration.py +0 -0
  676. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_interactive_briefing_echo.py +0 -0
  677. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_interactive_prefill_state.py +0 -0
  678. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_interactive_session_relaunch.py +0 -0
  679. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_interactive_test_verdict_backstop.py +0 -0
  680. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_interactive_token_attribution.py +0 -0
  681. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_interactive_worktree.py +0 -0
  682. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_issue_store_seam.py +0 -0
  683. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_liveness_auditor.py +0 -0
  684. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_liveness_notify.py +0 -0
  685. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_machine_pause.py +0 -0
  686. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_merge_queue.py +0 -0
  687. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_merge_verify.py +0 -0
  688. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_milestone_chat.py +0 -0
  689. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_milestone_dispatch.py +0 -0
  690. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_milestone_gate.py +0 -0
  691. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_milestone_order.py +0 -0
  692. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_milestone_seam.py +0 -0
  693. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_mock_author.py +0 -0
  694. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_model_tiering.py +0 -0
  695. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_models.py +0 -0
  696. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_models_config_labels.py +0 -0
  697. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_needs_attention.py +0 -0
  698. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_network.py +0 -0
  699. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_new_issue_chat.py +0 -0
  700. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_next_release_tag.py +0 -0
  701. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_no_direct_gh_calls.py +0 -0
  702. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_node_shim.py +0 -0
  703. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_notifier_baseline.py +0 -0
  704. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_notifier_cli.py +0 -0
  705. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_notifier_collect.py +0 -0
  706. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_notifier_config.py +0 -0
  707. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_notifier_drive_seam.py +0 -0
  708. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_notifier_isolation.py +0 -0
  709. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_notifier_predicate.py +0 -0
  710. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_notifier_quiet_hours.py +0 -0
  711. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_notifier_service.py +0 -0
  712. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_notify.py +0 -0
  713. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_notify_drain.py +0 -0
  714. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_openapi.py +0 -0
  715. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_operational_defaults.py +0 -0
  716. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_overlap_fence.py +0 -0
  717. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_overlap_predict.py +0 -0
  718. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_packaged_deploy_units.py +0 -0
  719. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_parentage.py +0 -0
  720. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_paste_landed.py +0 -0
  721. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_pipeline.py +0 -0
  722. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_plan_followup_approve_plan_command.py +0 -0
  723. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_plan_followup_pr_command.py +0 -0
  724. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_plan_followup_review_command.py +0 -0
  725. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_plan_only.py +0 -0
  726. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_plan_parser.py +0 -0
  727. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_platform_paths.py +0 -0
  728. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_portal_bridge.py +0 -0
  729. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_portal_config.py +0 -0
  730. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_portal_sync.py +0 -0
  731. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_pr_body_lint.py +0 -0
  732. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_prereqs.py +0 -0
  733. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_production_db_guard.py +0 -0
  734. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_progress.py +0 -0
  735. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_provider_seam.py +0 -0
  736. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_providers.py +0 -0
  737. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_providers_config_labels.py +0 -0
  738. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_providers_pty.py +0 -0
  739. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_quiet_hours.py +0 -0
  740. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_quiet_hours_store_2146.py +0 -0
  741. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_reap_merged_sessions.py +0 -0
  742. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_reap_stale_interactive_tick.py +0 -0
  743. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_reconcile.py +0 -0
  744. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_reconcile_branch.py +0 -0
  745. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_reconcile_completions.py +0 -0
  746. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_reconcile_merges.py +0 -0
  747. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_reconcile_no_agent_record.py +0 -0
  748. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_reconcile_usage_limit_done.py +0 -0
  749. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_refine_chat.py +0 -0
  750. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_release_cordon_2101.py +0 -0
  751. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  752. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_release_cordon_deadlock_2240.py +0 -0
  753. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_release_propagate.py +0 -0
  754. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_release_unified_1242.py +0 -0
  755. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_release_verify.py +0 -0
  756. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_release_window.py +0 -0
  757. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_remote_auto_prune.py +0 -0
  758. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_remote_interactive_reaper.py +0 -0
  759. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_repo_edit_2220.py +0 -0
  760. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_repo_graph_fleet_2237.py +0 -0
  761. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_repo_onboard_2220.py +0 -0
  762. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_report_result_push.py +0 -0
  763. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_reports.py +0 -0
  764. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_retry.py +0 -0
  765. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_retry_advisory_1606.py +0 -0
  766. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_retry_type_1636.py +0 -0
  767. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_revalidate.py +0 -0
  768. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_review.py +0 -0
  769. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_review_end_review_without_verdict.py +0 -0
  770. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_review_parse_failure_diagnostic.py +0 -0
  771. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_review_reaffirm.py +0 -0
  772. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_review_state.py +0 -0
  773. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_review_verdict_backstop.py +0 -0
  774. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_review_verdict_override_audit.py +0 -0
  775. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_review_verdict_relay.py +0 -0
  776. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_review_zero_commits.py +0 -0
  777. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_scoped_review_wiring.py +0 -0
  778. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_scorecard.py +0 -0
  779. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_serve.py +0 -0
  780. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_serve_app_board_trim.py +0 -0
  781. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_session.py +0 -0
  782. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_slice_issue_attribution.py +0 -0
  783. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_smoke.py +0 -0
  784. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_smoke_live_checkout_restore.py +0 -0
  785. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_smoke_workflow.py +0 -0
  786. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_spend_ceiling.py +0 -0
  787. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_spend_ceiling_coordinator.py +0 -0
  788. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_split.py +0 -0
  789. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_split_work.py +0 -0
  790. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_stage_projection.py +0 -0
  791. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_stalled_pipeline.py +0 -0
  792. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_state.py +0 -0
  793. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_state_review_findings_daemon.py +0 -0
  794. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_status_fleet_footer.py +0 -0
  795. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_stop_1567.py +0 -0
  796. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_stuck.py +0 -0
  797. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_terminal_command.py +0 -0
  798. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_test_author.py +0 -0
  799. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_test_chat.py +0 -0
  800. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_test_orchestrator.py +0 -0
  801. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_test_report.py +0 -0
  802. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_test_verdict_parsing.py +0 -0
  803. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_test_verdict_transcript_floor.py +0 -0
  804. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_thin_client_board_audit.py +0 -0
  805. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_thin_client_config_load_1080.py +0 -0
  806. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_thin_client_daemon_routing_906.py +0 -0
  807. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_tmux_host.py +0 -0
  808. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_tmux_session.py +0 -0
  809. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_transcript_floor.py +0 -0
  810. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_usage.py +0 -0
  811. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_usage_limits.py +0 -0
  812. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_usage_rollup.py +0 -0
  813. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_venv_live_install_2121.py +0 -0
  814. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_version_single_source.py +0 -0
  815. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_watch.py +0 -0
  816. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  817. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_worker_events.py +0 -0
  818. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_worker_image_pin_sync.py +0 -0
  819. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_worker_safety.py +0 -0
  820. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_worker_test_scoping.py +0 -0
  821. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_worktree.py +0 -0
  822. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  823. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/Cargo.lock +0 -0
  824. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/Cargo.toml +0 -0
  825. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/cargo-config-local-quadraui.toml.example +0 -0
  826. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/src/app/audit.rs +0 -0
  827. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/src/app/chat.rs +0 -0
  828. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/src/app/data.rs +0 -0
  829. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/src/app/dialogs.rs +0 -0
  830. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/src/app/doc_tabs.rs +0 -0
  831. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/src/app/drive.rs +0 -0
  832. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/src/app/drive_queue.rs +0 -0
  833. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/src/app/escalation.rs +0 -0
  834. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/src/app/events.rs +0 -0
  835. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/src/app/fixtures.rs +0 -0
  836. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/src/app/fleet_health.rs +0 -0
  837. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/src/app/fleet_sessions.rs +0 -0
  838. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/src/app/fleet_terminals.rs +0 -0
  839. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/src/app/format.rs +0 -0
  840. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/src/app/milestone_dag.rs +0 -0
  841. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/src/app/mod.rs +0 -0
  842. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/src/app/msv.rs +0 -0
  843. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/src/app/pipeline.rs +0 -0
  844. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/src/app/plans.rs +0 -0
  845. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/src/app/render.rs +0 -0
  846. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/src/app/reports.rs +0 -0
  847. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/src/app/sessions.rs +0 -0
  848. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/src/app/settings_ui.rs +0 -0
  849. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/src/app/sidebar.rs +0 -0
  850. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/src/app/terminal.rs +0 -0
  851. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/src/app/tests.rs +0 -0
  852. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/src/app/types.rs +0 -0
  853. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/src/app/workspace.rs +0 -0
  854. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/src/bin/gtk.rs +0 -0
  855. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/src/commands.rs +0 -0
  856. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/src/lib.rs +0 -0
  857. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/src/main.rs +0 -0
  858. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/src/settings.rs +0 -0
  859. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/tests/acceptance.rs +0 -0
  860. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/tests/cli.rs +0 -0
  861. {code_coordinator-0.5.129 → code_coordinator-0.5.131}/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.129
3
+ Version: 0.5.131
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.129
3
+ Version: 0.5.131
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
@@ -539,6 +539,7 @@ tests/test_conflict_fix.py
539
539
  tests/test_conflict_fix_semantic.py
540
540
  tests/test_coord_test.py
541
541
  tests/test_coord_test_runner_baseline.py
542
+ tests/test_coord_test_runner_populated_home.py
542
543
  tests/test_coord_test_runner_routing.py
543
544
  tests/test_coord_test_runner_toolchain.py
544
545
  tests/test_coord_web_sse_restart_live.py
@@ -581,6 +581,7 @@
581
581
  "tests/test_conflict_fix_semantic.py",
582
582
  "tests/test_coord_test.py",
583
583
  "tests/test_coord_test_runner_baseline.py",
584
+ "tests/test_coord_test_runner_populated_home.py",
584
585
  "tests/test_coord_test_runner_routing.py",
585
586
  "tests/test_coord_test_runner_toolchain.py",
586
587
  "tests/test_coord_web_sse_restart_live.py",
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "0.5.129",
2
+ "tag": "0.5.131",
3
3
  "distance": 0,
4
- "node": "g35ed648ce7ee944d0c954c511918f971ef413bef",
4
+ "node": "g1b229fc47c746e85d1d360ebe7d49d415f544a8c",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-17"
@@ -785,6 +785,44 @@ def _git(cwd: Path, *args: str, timeout: float = 15.0) -> str:
785
785
  return result.stdout.strip()
786
786
 
787
787
 
788
+ def _remote_already_has_head(
789
+ wt_path: Path, remote: str, branch: str, *, timeout: float = 30.0
790
+ ) -> bool:
791
+ """True when *remote*'s copy of *branch* already contains the worktree's
792
+ current ``HEAD`` as an ancestor (#2356).
793
+
794
+ Used by `_reap`'s belt-and-suspenders push-failure handling: an
795
+ auth-shaped failure pushing to *remote* does NOT necessarily mean the
796
+ worker's commits never reached it — a worker that hit the same broken
797
+ write-credential wall (e.g. an HTTPS credential helper with nothing to
798
+ expand in a non-interactive shell) may have already worked around it by
799
+ pushing the same commit over a different remote/protocol, most commonly
800
+ an explicit ``git@github.com:...`` SSH URL (the #2269 incident). That
801
+ push landed on the SAME GitHub-hosted branch this function now checks —
802
+ it never touches a second remote name in the worktree's own git config.
803
+
804
+ Fetching *branch* is a READ operation (``git fetch`` invokes
805
+ upload-pack, not receive-pack), which commonly still succeeds — via
806
+ anonymous access on a public repo, or a still-valid read-scoped
807
+ credential — even when the WRITE credential that just failed the push
808
+ is broken or missing entirely. So this is a meaningfully independent
809
+ signal from the push that just failed, not a re-run of the same failing
810
+ operation.
811
+
812
+ Returns ``False`` — never raises — on any git failure: the branch
813
+ missing on the remote, a network error, or `merge-base` reporting "not
814
+ an ancestor" all resolve to "unknown/genuinely behind", and an unknown
815
+ remote state must never suppress the real #1797 failure signal (nothing
816
+ ever reached the remote).
817
+ """
818
+ try:
819
+ _git(wt_path, "fetch", remote, branch, timeout=timeout)
820
+ _git(wt_path, "merge-base", "--is-ancestor", "HEAD", "FETCH_HEAD")
821
+ return True
822
+ except (_GitError, subprocess.TimeoutExpired):
823
+ return False
824
+
825
+
788
826
  def _is_linked_worktree(repo_path: Path) -> bool:
789
827
  """True when *repo_path* is a linked ``git worktree`` rather than the
790
828
  checkout that owns its ``.git`` directory (#1729, H-6's guard 2).
@@ -2988,7 +3026,14 @@ class AgentAssignment:
2988
3026
  # alongside `status == FAILED`; `None` on every other outcome —
2989
3027
  # including a push failure for an unrelated reason (no `origin`
2990
3028
  # configured, network blip), which stays non-fatal exactly as before
2991
- # this field was introduced.
3029
+ # this field was introduced, AND (#2356) including an auth-shaped
3030
+ # failure on THIS push that turns out to be superseded: when
3031
+ # `_remote_already_has_head` confirms the content already reached
3032
+ # `origin` via some other remote/protocol (e.g. the #2269 SSH-
3033
+ # workaround case), the push failure is logged but this field stays
3034
+ # `None` and the assignment keeps its normal (non-FAILED) outcome —
3035
+ # the work is where it needs to be, so the failed push here is a
3036
+ # non-event, not a signal.
2992
3037
  #
2993
3038
  # Exists to keep an auth break from being silently absorbed into either
2994
3039
  # DONE (worker had local commits that never reached origin) or the
@@ -8146,12 +8191,54 @@ class AgentServer:
8146
8191
  # against repos with no `origin` at all (every test
8147
8192
  # fixture, and any local-only deployment), and that
8148
8193
  # failure mode must stay non-fatal exactly as before.
8194
+ #
8195
+ # #2356: an auth-shaped failure on THIS push doesn't
8196
+ # necessarily mean the content never reached origin
8197
+ # — a worker that hit the same broken-credential
8198
+ # wall may have already landed the same commit via
8199
+ # an alternate remote/protocol (#2269: an explicit
8200
+ # SSH URL, worked around a missing HTTPS
8201
+ # credential). Before promoting to FAILED, check
8202
+ # whether origin already has local HEAD as an
8203
+ # ancestor (`_remote_already_has_head` fetches — a
8204
+ # read, which commonly still works even when the
8205
+ # write credential just failed). Only genuinely
8206
+ # missing content — origin behind local HEAD, or the
8207
+ # check itself failing — is promoted, so #1797's
8208
+ # original "nothing ever reached origin" case is
8209
+ # unaffected.
8149
8210
  _reason = str(e)
8211
+ _suppressed_as_already_pushed = False
8150
8212
  if _is_auth_push_failure(_reason):
8151
- _push_failure_reason = _reason
8213
+ _branch_for_check = (
8214
+ head if head and head != "HEAD" else None
8215
+ )
8216
+ if _branch_for_check and _remote_already_has_head(
8217
+ wt_path, "origin", _branch_for_check
8218
+ ):
8219
+ _suppressed_as_already_pushed = True
8220
+ else:
8221
+ _push_failure_reason = _reason
8152
8222
  try:
8153
8223
  with open(assignment.log_path, "a") as reopen:
8154
- reopen.write(f"# reap: push failed ({_reason})\n")
8224
+ if _suppressed_as_already_pushed:
8225
+ # Deliberately NOT the generic "push
8226
+ # failed" line below: that line reads as
8227
+ # a live failure signal, which this
8228
+ # isn't — origin already has HEAD, so
8229
+ # the failed push here is a non-event
8230
+ # (#2356).
8231
+ reopen.write(
8232
+ "# reap: push failed but origin "
8233
+ "already has HEAD as an ancestor "
8234
+ "(pushed via another remote/"
8235
+ "protocol?) — treating as success "
8236
+ f"({_reason}) (#2356)\n"
8237
+ )
8238
+ else:
8239
+ reopen.write(
8240
+ f"# reap: push failed ({_reason})\n"
8241
+ )
8155
8242
  except OSError:
8156
8243
  pass
8157
8244
 
@@ -91,6 +91,24 @@
91
91
  # see the long note above `ensure_baseline_worktree` for why the fallback
92
92
  # arm is excluded rather than "not done yet".
93
93
  #
94
+ # 7. THE POPULATED-$HOME ARM (#2269). A branch can be green here and red in
95
+ # CI's `populated-home` job, and until #2269 whether that was caught
96
+ # depended on WHICH MACHINE the Test stage landed on. That job's
97
+ # environment is SYNTHESIZED by scripts/run_tests_in_populated_home.sh (a
98
+ # thin-client ~/.coord with no coordinator.yml, no `sqlite3` on PATH, a
99
+ # $TMPDIR under an ancestor pytest config); this runner otherwise inherits
100
+ # whatever environment the assigned machine happens to have. dellserver —
101
+ # the daemon host — is structurally incapable of reproducing knob 1, so
102
+ # #2174 passed the Test gate, spent a full adversarial review, and was
103
+ # caught only when `coord fix` noticed CI disagreed. So once the ordinary
104
+ # python arm is green, the test files THE DIFF TOUCHED are re-run through
105
+ # that same harness. Diff-scoped because running the suite twice is not
106
+ # affordable (#2169). This arm can only ever FAIL, never downgrade: the
107
+ # harness's own `exit 2` ("a knob failed to take effect") is a
108
+ # FAIL-with-warning, never a skip. Python arm only, and it names itself
109
+ # (`python-populated-home`) in every verdict line it emits, so a red result
110
+ # is attributable rather than a mystery.
111
+ #
94
112
  # Exit codes: 0 pass (or skip — nothing to test), 1 genuine failure or refusal
95
113
  # (cannot determine what to test), 2 usage, 3 INFRASTRUCTURE — the suite could
96
114
  # not run at all (a required toolchain is missing); no verdict may be inferred
@@ -215,9 +233,77 @@ else
215
233
  log "routing: repo=$REPO_NAME — no path rule and no --fallback-command"
216
234
  fi
217
235
 
236
+ # ── populated-$HOME arm scoping (#2269) ─────────────────────────────────────
237
+ #
238
+ # WHICH FILES. Only the python test files THIS DIFF touched, and only ones that
239
+ # still exist in the worktree (a diff that DELETES a test file must not hand
240
+ # pytest a path that is not there). `tests/acceptance/**` is excluded for the
241
+ # same reason the ordinary arm passes `--ignore=tests/acceptance`: that sealed
242
+ # suite is gated separately through the #2164 `--ci` wrapper, and a
243
+ # red-by-design slice must not fail every concurrent branch.
244
+ #
245
+ # WHY DIFF-SCOPED AND NOT THE WHOLE SUITE. The full suite already exceeds
246
+ # Claude Code's 600s Bash ceiling (#2169); running it a second time under the
247
+ # harness is not on the table. Diff-scoping is what makes this arm affordable —
248
+ # it costs roughly one test FILE's runtime, paid only by branches that touch
249
+ # python tests at all. The always-on cover for the rest of the suite is
250
+ # tests/test_ambient_home_isolation.py (which runs everywhere, on every branch);
251
+ # this arm exists for the case that file cannot cover, a NEWLY WRITTEN test of
252
+ # this class (#2174 was exactly that).
253
+ #
254
+ # Computed HERE, beside the routing decision, rather than inside `run_python`,
255
+ # because `--print-routing` must be able to name the arm before a worker pushes.
256
+ POPULATED_TESTS=""
257
+ POPULATED_COUNT=0
258
+ POPULATED_ARM=0
259
+ POPULATED_SKIP_REASON=""
260
+
261
+ is_python_test_file() {
262
+ case "$1" in
263
+ tests/acceptance/*) return 1 ;;
264
+ tests/*) ;;
265
+ *) return 1 ;;
266
+ esac
267
+ case "${1##*/}" in
268
+ test_*.py) return 0 ;;
269
+ *) return 1 ;;
270
+ esac
271
+ }
272
+
273
+ if [[ "$ROUTE_MODE" == "coordinator" && "$RUN_PY" -eq 1 ]]; then
274
+ if [[ "$DIFF_FAILED" -eq 1 ]]; then
275
+ POPULATED_SKIP_REASON="the diff against $BASE_REF could not be computed, so the arm has no scope to run over"
276
+ else
277
+ while IFS= read -r f; do
278
+ [[ -z "$f" ]] && continue
279
+ is_python_test_file "$f" || continue
280
+ # Deleted-by-the-diff files are still listed by `git diff --name-only`.
281
+ [[ -f "$WT/$f" ]] || continue
282
+ POPULATED_TESTS="${POPULATED_TESTS:+$POPULATED_TESTS }$f"
283
+ POPULATED_COUNT=$((POPULATED_COUNT + 1))
284
+ done <<<"$CHANGED"
285
+ [[ "$POPULATED_COUNT" -gt 0 ]] && POPULATED_ARM=1
286
+ [[ "$POPULATED_ARM" -eq 0 ]] && \
287
+ POPULATED_SKIP_REASON="the diff touches no python test files under tests/ (outside the sealed tests/acceptance/)"
288
+ fi
289
+ elif [[ "$ROUTE_MODE" == "coordinator" ]]; then
290
+ POPULATED_SKIP_REASON="the python arm is not routed for this diff"
291
+ else
292
+ POPULATED_SKIP_REASON="the populated-\$HOME arm is this repo's python arm only"
293
+ fi
294
+
295
+ if [[ "$ROUTE_MODE" == "coordinator" ]]; then
296
+ if [[ "$POPULATED_ARM" -eq 1 ]]; then
297
+ log "routing: populated-\$HOME arm (#2269) will re-run $POPULATED_COUNT diff-scoped test file(s): $POPULATED_TESTS"
298
+ else
299
+ log "routing: populated-\$HOME arm (#2269) SKIPPED — $POPULATED_SKIP_REASON"
300
+ fi
301
+ fi
302
+
218
303
  if [[ "$PRINT_ROUTING" -eq 1 ]]; then
219
304
  case "$ROUTE_MODE" in
220
- coordinator) printf 'ROUTING mode=coordinator pytest=%s cargo=%s\n' "$RUN_PY" "$RUN_RS" ;;
305
+ coordinator) printf 'ROUTING mode=coordinator pytest=%s cargo=%s populated-home=%s\n' \
306
+ "$RUN_PY" "$RUN_RS" "$POPULATED_ARM" ;;
221
307
  fallback) printf 'ROUTING mode=fallback run=%s\n' "$RUN_FALLBACK" ;;
222
308
  unknown) printf 'ROUTING mode=unknown\n' ;;
223
309
  esac
@@ -245,6 +331,8 @@ EXIT_INFRA=3
245
331
  # baseline is red, so this is not a verdict on the branch either (#2170).
246
332
  BASELINE_RED_SUITES=()
247
333
  EXIT_BASELINE_RED=4
334
+ # See the note at the dispatch site below.
335
+ PY_FAIL_SUITE="python"
248
336
 
249
337
  # ── baseline comparison (#2170) ──────────────────────────────────────────────
250
338
  #
@@ -570,6 +658,98 @@ run_python_acceptance_ci() {
570
658
  return 1
571
659
  }
572
660
 
661
+ # ── the populated-$HOME arm (#2269) ─────────────────────────────────────────
662
+ #
663
+ # Re-run the diff's own python test files in the environment of a REAL FLEET
664
+ # MACHINE instead of this machine's, using the SAME harness CI's
665
+ # `populated-home` job uses (scripts/run_tests_in_populated_home.sh, from the
666
+ # BRANCH's tree — so a branch that changes the harness is tested against its own
667
+ # version, exactly like CI). See item 7 in the header for why this is not
668
+ # optional: without it, catching this failure class is a property of which
669
+ # machine the Test stage was routed to.
670
+ #
671
+ # THIS ARM ONLY EVER FAILS. It is the mirror image of #2170's baseline check,
672
+ # which only ever downgrades and is therefore deliberately hard to trigger. This
673
+ # one is the STRICT direction, so every ambiguity resolves the other way:
674
+ #
675
+ # * The harness's own `exit 2` — "a knob failed to take effect", i.e. the
676
+ # environment it claims to synthesize was not synthesized — is a FAIL with a
677
+ # warning, NOT a skip. A guard that cannot guard reporting green is the exact
678
+ # failure mode #2170 exists to prevent, and a Test gate that silently
679
+ # tolerates it is back to routing luck.
680
+ # * Any other non-zero exit is a FAIL naming this arm.
681
+ #
682
+ # There is no flake filter here on purpose: these same files went green in the
683
+ # ordinary arm moments ago, so a failure here is by construction environmental,
684
+ # and re-running would only launder it.
685
+ #
686
+ # The two SKIPs it can report (no python test files in the diff; the harness
687
+ # absent from this branch's tree) are announced in the verdict stream and by
688
+ # `--print-routing`, never silent.
689
+ run_python_populated_home() {
690
+ local venv="$1"
691
+ local rel="scripts/run_tests_in_populated_home.sh"
692
+ local script="$WT/$rel"
693
+
694
+ if [[ "$POPULATED_ARM" -eq 0 ]]; then
695
+ say "SKIP(python-populated-home): not run — $POPULATED_SKIP_REASON (#2269)"
696
+ return 0
697
+ fi
698
+ if [[ ! -f "$script" ]]; then
699
+ # A branch (or a checkout) predating the harness. Skipping is the only
700
+ # option that does not redden every such branch, but it is stated out
701
+ # loud rather than inferred from silence.
702
+ warn "populated-home: $rel is not present in this worktree — the arm cannot run"
703
+ say "SKIP(python-populated-home): not run — the harness $rel is absent from this branch's tree (#2269)"
704
+ return 0
705
+ fi
706
+
707
+ local out="$WT/.pytest-populated-home.out"
708
+ local started=$SECONDS
709
+ local rc=0
710
+ log "running: $rel over $POPULATED_COUNT diff-scoped test file(s): $POPULATED_TESTS"
711
+ # shellcheck disable=SC2086 # the file list is intentionally word-split
712
+ (cd "$WT" && bash "$script" "$venv/bin/python" -m pytest -q --tb=short $POPULATED_TESTS) \
713
+ >"$out" 2>&1 || rc=$?
714
+ local elapsed=$((SECONDS - started))
715
+
716
+ if [[ "$rc" -eq 0 ]]; then
717
+ say "PASS(python-populated-home): $POPULATED_COUNT diff-scoped test file(s) green in a synthesized fleet \$HOME (+${elapsed}s)"
718
+ return 0
719
+ fi
720
+
721
+ # The harness's own guard failures. `run_tests_in_populated_home.sh`
722
+ # reserves exit 2 for exactly this case, so check `rc` directly first —
723
+ # it can't drift out of sync with itself. The message grep is a second,
724
+ # belt-and-braces signal for a harness that fails this way but exits with
725
+ # some other code (or an older/forked copy of the script); if the exact
726
+ # wording ever changes, `rc -eq 2` alone still catches the exit-2 case.
727
+ # Distinguished from a test failure because the two need different fixes
728
+ # — but BOTH are a FAIL, so mis-classifying one as the other can only
729
+ # ever mis-word a red verdict, never hide one.
730
+ if [[ "$rc" -eq 2 ]] || grep -qE "the guard itself is broken|the guard is too broad|is not thin-client shaped" "$out"; then
731
+ say "FAIL(python-populated-home): the harness $rel exited $rc because A KNOB FAILED TO TAKE EFFECT — the environment it claims to synthesize (thin-client ~/.coord, no sqlite3, \$TMPDIR under an ancestor pytest config) was not the environment the tests ran in, so a green here would have meant nothing. This is reported as a FAILURE, not a skip, on purpose (#2269)."
732
+ tail -n 20 "$out" | sed 's/^/ /'
733
+ return 1
734
+ fi
735
+
736
+ say "FAIL(python-populated-home): $POPULATED_COUNT diff-scoped test file(s) PASS in this machine's ambient environment but FAIL in a synthesized fleet \$HOME (thin-client ~/.coord with no coordinator.yml, no sqlite3 on PATH, \$TMPDIR under an ancestor pytest config) — this is CI's populated-home job's failure class, caught here instead of at the merge gate (#2269). Reproduce with: $rel python -m pytest $POPULATED_TESTS"
737
+ printf '%s\n' "$POPULATED_TESTS" | tr ' ' '\n' | sed 's/^/ /'
738
+ tail -n 40 "$out" | sed 's/^/ /'
739
+ return 1
740
+ }
741
+
742
+ # The arms that run AFTER the ordinary pytest suite has gone green (or been
743
+ # judged a tolerated flake), in cost order. Short-circuiting on the first
744
+ # failure is deliberate: the verdict is already attributable to a named arm, and
745
+ # there is nothing to learn from paying for the next one.
746
+ run_python_post_arms() {
747
+ local venv="$1"
748
+ run_python_acceptance_ci "$venv" || return 1
749
+ run_python_populated_home "$venv" || { PY_FAIL_SUITE="python-populated-home"; return 1; }
750
+ return 0
751
+ }
752
+
573
753
  run_python() {
574
754
  local venv="$WT/.venv"
575
755
  if [[ ! -x "$venv/bin/python" ]]; then
@@ -618,7 +798,7 @@ run_python() {
618
798
  # `set -u` on older bash.
619
799
  if (cd "$WT" && "$venv/bin/python" -m pytest -q --tb=short --ignore=tests/acceptance ${par[@]+"${par[@]}"}) >"$out" 2>&1; then
620
800
  log "ordinary suite: $(grep -oE '[0-9]+ passed[^)]*' "$out" | tail -1)"
621
- run_python_acceptance_ci "$venv"
801
+ run_python_post_arms "$venv"
622
802
  return $?
623
803
  fi
624
804
 
@@ -645,7 +825,7 @@ run_python() {
645
825
  say "FLAKE(python): $count test(s) failed in the full run but PASS in isolation"
646
826
  printf '%s\n' "$failed" | sed 's/^/ /'
647
827
  FLAKES+=("python:$count")
648
- run_python_acceptance_ci "$venv"
828
+ run_python_post_arms "$venv"
649
829
  return $?
650
830
  fi
651
831
 
@@ -854,8 +1034,13 @@ mark_failed() {
854
1034
  FAILED_SUITES+=("$suite")
855
1035
  }
856
1036
 
1037
+ # Which name a failing python arm books itself under. "python" for every arm
1038
+ # that existed before #2269; the populated-$HOME arm overwrites it with its own
1039
+ # name so `RESULT: FAIL (python-populated-home)` says which environment went
1040
+ # red, not merely that pytest did (#2269's "a red result is attributable"
1041
+ # requirement). It is only ever read after `run_python` returns non-zero.
857
1042
  if [[ "$RUN_PY" -eq 1 ]]; then
858
- run_python || mark_failed python
1043
+ run_python || mark_failed "$PY_FAIL_SUITE"
859
1044
  fi
860
1045
  if [[ "$RUN_RS" -eq 1 ]]; then
861
1046
  run_rust || mark_failed rust
@@ -31,6 +31,7 @@ from coord.agent import (
31
31
  AgentServer,
32
32
  AssignmentSpec,
33
33
  _is_auth_push_failure,
34
+ _remote_already_has_head,
34
35
  )
35
36
 
36
37
 
@@ -40,6 +41,42 @@ def _git(cwd: Path, *args: str) -> str:
40
41
  ).stdout.strip()
41
42
 
42
43
 
44
+ def _write_always_failing_receive_pack(tmp_path: Path) -> Path:
45
+ """A `receive-pack` replacement that unconditionally fails every push
46
+ with an auth-shaped error, regardless of whether the push has anything
47
+ new to send (#2356 review).
48
+
49
+ A `pre-receive` hook is the WRONG tool for simulating "reap's own push
50
+ fails while the remote already has HEAD": git's client-side ref
51
+ negotiation short-circuits to `Everything up-to-date` (exit 0) whenever
52
+ local HEAD already matches what the remote advertises, and that
53
+ short-circuit happens BEFORE a pack is ever sent — so a `pre-receive`
54
+ hook, which only runs after `receive-pack` unpacks an incoming pack,
55
+ never gets invoked at all in that case. Verified independently: a
56
+ `pre-receive`-based rejecting remote lets a same-SHA `git push -u
57
+ origin HEAD` succeed silently, hook untouched.
58
+
59
+ Overriding `remote.<name>.receivepack` instead replaces the
60
+ `receive-pack` PROGRAM itself, which git invokes unconditionally at the
61
+ start of every `git push` (for ref advertisement) — before any
62
+ comparison against what the client already has. It fires every time,
63
+ including when there is nothing new to send, which is exactly the
64
+ shape this scenario needs. Deliberately leaves `uploadpack` untouched,
65
+ so `git fetch` (what `_remote_already_has_head` uses) keeps working
66
+ normally.
67
+ """
68
+ script = tmp_path / "fail_receive_pack.sh"
69
+ script.write_text(
70
+ "#!/bin/sh\n"
71
+ "echo 'remote: Invalid username or token.' >&2\n"
72
+ "echo 'remote: Password authentication is not supported for "
73
+ "Git operations.' >&2\n"
74
+ "exit 1\n"
75
+ )
76
+ script.chmod(script.stat().st_mode | stat.S_IEXEC)
77
+ return script
78
+
79
+
43
80
  class TestIsAuthPushFailure:
44
81
  """Direct unit tests for `_is_auth_push_failure` (#1797 review nit): the
45
82
  three FAILED-vs-non-fatal tests above only exercise it indirectly
@@ -98,6 +135,90 @@ class TestIsAuthPushFailure:
98
135
  assert _is_auth_push_failure(message) is False
99
136
 
100
137
 
138
+ def _init_repo(d: Path) -> None:
139
+ d.mkdir()
140
+ _git(d, "init", "-b", "main")
141
+ _git(d, "config", "user.email", "t@t.com")
142
+ _git(d, "config", "user.name", "Test")
143
+
144
+
145
+ def _commit_file(d: Path, name: str, contents: str, message: str) -> None:
146
+ (d / name).write_text(contents)
147
+ _git(d, "add", name)
148
+ _git(d, "commit", "-m", message)
149
+
150
+
151
+ class TestRemoteAlreadyHasHead:
152
+ """Direct unit tests for `_remote_already_has_head` (#2356 review nit):
153
+ the full-round-trip tests only exercise it indirectly through an entire
154
+ `AgentServer`/`_reap` cycle, which proves the wiring but not the
155
+ ancestor-check logic itself in isolation. These pin down the four cases
156
+ the function's docstring promises: caught up, genuinely behind, branch
157
+ missing on the remote, and the remote unreachable outright — mirroring
158
+ `TestIsAuthPushFailure`'s role for `_is_auth_push_failure`.
159
+ """
160
+
161
+ def test_true_when_remote_already_has_head_as_ancestor(
162
+ self, tmp_path: Path
163
+ ) -> None:
164
+ origin = tmp_path / "origin.git"
165
+ origin.mkdir()
166
+ _git(origin, "init", "--bare", "-b", "main")
167
+
168
+ clone = tmp_path / "clone"
169
+ _init_repo(clone)
170
+ _git(clone, "remote", "add", "origin", str(origin))
171
+ _commit_file(clone, "f", "x\n", "c1")
172
+ _git(clone, "push", "-u", "origin", "main")
173
+
174
+ assert _remote_already_has_head(clone, "origin", "main") is True
175
+
176
+ def test_false_when_local_head_is_ahead_of_remote(
177
+ self, tmp_path: Path
178
+ ) -> None:
179
+ """The genuine #1797 shape: local HEAD moved on past whatever the
180
+ remote has, so the remote does NOT already have this content —
181
+ must return False so the real failure signal is never suppressed.
182
+ """
183
+ origin = tmp_path / "origin.git"
184
+ origin.mkdir()
185
+ _git(origin, "init", "--bare", "-b", "main")
186
+
187
+ clone = tmp_path / "clone"
188
+ _init_repo(clone)
189
+ _git(clone, "remote", "add", "origin", str(origin))
190
+ _commit_file(clone, "f", "x\n", "c1")
191
+ _git(clone, "push", "-u", "origin", "main")
192
+
193
+ # A second local commit that never reaches origin.
194
+ _commit_file(clone, "f", "y\n", "c2 (never reaches origin)")
195
+
196
+ assert _remote_already_has_head(clone, "origin", "main") is False
197
+
198
+ def test_false_when_remote_branch_does_not_exist(
199
+ self, tmp_path: Path
200
+ ) -> None:
201
+ origin = tmp_path / "origin.git"
202
+ origin.mkdir()
203
+ _git(origin, "init", "--bare", "-b", "main")
204
+
205
+ clone = tmp_path / "clone"
206
+ _init_repo(clone)
207
+ _git(clone, "remote", "add", "origin", str(origin))
208
+ _commit_file(clone, "f", "x\n", "c1")
209
+ # Never pushed anywhere — "main" doesn't exist on origin at all.
210
+
211
+ assert _remote_already_has_head(clone, "origin", "main") is False
212
+
213
+ def test_false_when_remote_is_unreachable(self, tmp_path: Path) -> None:
214
+ clone = tmp_path / "clone"
215
+ _init_repo(clone)
216
+ _git(clone, "remote", "add", "origin", str(tmp_path / "does-not-exist"))
217
+ _commit_file(clone, "f", "x\n", "c1")
218
+
219
+ assert _remote_already_has_head(clone, "origin", "main") is False
220
+
221
+
101
222
  @pytest.fixture
102
223
  def repo_with_rejecting_remote(tmp_path: Path) -> tuple[Path, Path]:
103
224
  """A working clone whose `origin` rejects every push with a git
@@ -222,6 +343,71 @@ def test_push_failure_with_zero_commits_is_failed_not_advisory(
222
343
  server.shutdown()
223
344
 
224
345
 
346
+ def test_push_failure_when_already_on_origin_via_other_route_is_not_failed(
347
+ tmp_path: Path, repo_with_rejecting_remote: tuple[Path, Path]
348
+ ) -> None:
349
+ """#2356: a worker that hits the same broken-write-credential wall as
350
+ #1797 may work around it by landing the same commit on origin via some
351
+ other route (the #2269 incident: pushing over an explicit SSH URL when
352
+ the worktree's configured HTTPS remote had no usable credentials in a
353
+ non-interactive shell). Reap's own belt-and-suspenders push against
354
+ `origin` still fails with the exact same auth-shaped error in that case
355
+ — but the content is already on the remote branch.
356
+
357
+ The worker lands its own commit on `origin` first (hook briefly
358
+ lifted — standing in for "reached origin via another path"), THEN we
359
+ install `_write_always_failing_receive_pack`'s override so reap's own
360
+ subsequent push — which has nothing new to send, since the worker
361
+ already pushed this exact SHA — still fails with an auth-shaped error.
362
+ (A `pre-receive` hook cannot do this: see that helper's docstring for
363
+ why git's own "nothing to push" short-circuit bypasses it here.) The
364
+ assignment must land on DONE, not FAILED: the work is exactly where it
365
+ needs to be, however it got there.
366
+ """
367
+ clone, origin = repo_with_rejecting_remote
368
+ hook = origin / "hooks" / "pre-receive"
369
+ fail_receive_pack = _write_always_failing_receive_pack(tmp_path)
370
+
371
+ worker_sh = (
372
+ "git config user.email w@w.com && "
373
+ "git config user.name Worker && "
374
+ "echo change > change.txt && "
375
+ "git add change.txt && "
376
+ "git commit -m 'real work' && "
377
+ f"chmod -x {hook} && "
378
+ "git push origin HEAD && "
379
+ f"chmod +x {hook} && "
380
+ f"git config remote.origin.receivepack {fail_receive_pack}"
381
+ )
382
+ server = AgentServer(
383
+ machine_name="t",
384
+ repos=["api"],
385
+ repo_paths={"api": str(clone)},
386
+ state_dir=tmp_path / "state",
387
+ worker_command=lambda spec: ["/bin/sh", "-c", worker_sh],
388
+ )
389
+ spec = AssignmentSpec(
390
+ repo_name="api",
391
+ repo_path=str(clone),
392
+ issue_number=4,
393
+ issue_title="already pushed elsewhere, origin push still broken",
394
+ briefing="b",
395
+ branch="main",
396
+ )
397
+ a = server.assign(spec)
398
+ final = server.wait_for(a.id, timeout=15)
399
+
400
+ assert final.status == DONE, (
401
+ "origin already had HEAD (however it got there) — reap's own push "
402
+ f"failing on top of that must not be FAILED, got {final.status!r}"
403
+ )
404
+ assert final.push_failure_reason is None, (
405
+ "the auth-shaped failure must be suppressed once the fetch-based "
406
+ "check confirms origin already has HEAD as an ancestor"
407
+ )
408
+ server.shutdown()
409
+
410
+
225
411
  def test_successful_push_leaves_push_failure_reason_none(
226
412
  tmp_path: Path, repo_with_rejecting_remote: tuple[Path, Path]
227
413
  ) -> None: