code-coordinator 0.5.53__tar.gz → 0.5.55__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 (810) hide show
  1. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/.github/workflows/test.yml +49 -0
  2. {code_coordinator-0.5.53/code_coordinator.egg-info → code_coordinator-0.5.55}/PKG-INFO +1 -1
  3. {code_coordinator-0.5.53 → code_coordinator-0.5.55/code_coordinator.egg-info}/PKG-INFO +1 -1
  4. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/code_coordinator.egg-info/SOURCES.txt +3 -0
  5. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/code_coordinator.egg-info/scm_file_list.json +3 -0
  6. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/code_coordinator.egg-info/scm_version.json +2 -2
  7. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/commands/test_gate.py +33 -1
  8. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/notify.py +90 -11
  9. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/progress.py +117 -0
  10. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/revalidate.py +103 -2
  11. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/smoke.py +23 -4
  12. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/docs/OPERATING_GOTCHAS.md +85 -0
  13. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/scripts/coord-test-runner.sh +232 -2
  14. code_coordinator-0.5.55/scripts/run_tests_in_populated_home.sh +150 -0
  15. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_acceptance_drivers.py +34 -2
  16. code_coordinator-0.5.55/tests/test_ambient_home_isolation.py +392 -0
  17. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_coord_test.py +77 -0
  18. code_coordinator-0.5.55/tests/test_coord_test_runner_baseline.py +364 -0
  19. code_coordinator-0.5.55/tests/test_cross_platform_imports.py +267 -0
  20. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_deploy_coord_db_backup.py +42 -1
  21. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_notify.py +112 -0
  22. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_progress.py +73 -0
  23. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_revalidate.py +200 -0
  24. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_smoke.py +20 -0
  25. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/src/app/data.rs +67 -4
  26. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/src/app/dialogs.rs +262 -3
  27. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/src/app/events.rs +31 -0
  28. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/src/app/fixtures.rs +2 -0
  29. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/src/app/mod.rs +58 -1
  30. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/src/app/pipeline.rs +7 -0
  31. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/src/app/sidebar.rs +23 -0
  32. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/src/app/tests.rs +476 -0
  33. code_coordinator-0.5.53/tests/test_cross_platform_imports.py +0 -136
  34. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/.claude/commands/board.md +0 -0
  35. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/.claude/commands/complete-session.md +0 -0
  36. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/.claude/commands/coordinator.md +0 -0
  37. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/.githooks/_lib.sh +0 -0
  38. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/.githooks/post-checkout +0 -0
  39. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/.githooks/post-commit +0 -0
  40. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/.githooks/post-merge +0 -0
  41. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  42. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/.github/workflows/auto-release.yml +0 -0
  43. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/.github/workflows/cargo-test.yml +0 -0
  44. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/.github/workflows/publish.yml +0 -0
  45. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/.github/workflows/release-tui.yml +0 -0
  46. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/.gitignore +0 -0
  47. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/CLAUDE.md +0 -0
  48. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/GOAL.md +0 -0
  49. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/LICENSE +0 -0
  50. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/MANIFEST.in +0 -0
  51. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/README.md +0 -0
  52. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/code_coordinator.egg-info/dependency_links.txt +0 -0
  53. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/code_coordinator.egg-info/entry_points.txt +0 -0
  54. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/code_coordinator.egg-info/requires.txt +0 -0
  55. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/code_coordinator.egg-info/top_level.txt +0 -0
  56. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/__init__.py +0 -0
  57. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/_board_mapping.py +0 -0
  58. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/acceptance.py +0 -0
  59. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/acceptance_drivers.py +0 -0
  60. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/agent.py +0 -0
  61. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/agent_app.py +0 -0
  62. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/agent_update.py +0 -0
  63. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/agents/opencode/.gitignore +0 -0
  64. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/agents/opencode/agents/work.md +0 -0
  65. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/agents/opencode/routing.jsonc +0 -0
  66. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/audit.py +0 -0
  67. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/auto_loop.py +0 -0
  68. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/board_bool_guard.py +0 -0
  69. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/board_service.py +0 -0
  70. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/board_wire.py +0 -0
  71. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/brain.py +0 -0
  72. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/branch_model.py +0 -0
  73. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/bug_intake.py +0 -0
  74. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/cargo_cache.py +0 -0
  75. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/ci_github.py +0 -0
  76. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/ci_store.py +0 -0
  77. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/claim.py +0 -0
  78. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/cli.py +0 -0
  79. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/client.py +0 -0
  80. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/commands/__init__.py +0 -0
  81. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/commands/_common.py +0 -0
  82. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/commands/acceptance.py +0 -0
  83. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/commands/agent_ops.py +0 -0
  84. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/commands/audit.py +0 -0
  85. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/commands/chat.py +0 -0
  86. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/commands/dispatch.py +0 -0
  87. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/commands/dispatch_workers.py +0 -0
  88. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/commands/drive.py +0 -0
  89. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/commands/drive_queue.py +0 -0
  90. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/commands/gate_a.py +0 -0
  91. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/commands/gates.py +0 -0
  92. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/commands/issues.py +0 -0
  93. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/commands/lifecycle.py +0 -0
  94. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/commands/merge.py +0 -0
  95. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/commands/milestone.py +0 -0
  96. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/commands/plan_followup.py +0 -0
  97. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/commands/plans.py +0 -0
  98. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/commands/release.py +0 -0
  99. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/commands/report.py +0 -0
  100. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/commands/review.py +0 -0
  101. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/commands/scorecard.py +0 -0
  102. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/commands/sessions.py +0 -0
  103. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/commands/setup.py +0 -0
  104. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/commands/status.py +0 -0
  105. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/commands/terminal.py +0 -0
  106. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/commands/tui.py +0 -0
  107. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/comments.py +0 -0
  108. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/config.py +0 -0
  109. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/conflict_fix.py +0 -0
  110. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dao.py +0 -0
  111. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/__init__.py +0 -0
  112. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/fixture.py +0 -0
  113. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/index.html +0 -0
  114. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/server.py +0 -0
  115. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/terminal.py +0 -0
  116. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/.gitignore +0 -0
  117. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/components.json +0 -0
  118. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/dist/assets/Gallery-da3qNiIw.js +0 -0
  119. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
  120. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/dist/assets/Terminal-skVFCxPU.js +0 -0
  121. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/dist/assets/index-DltfZR5f.js +0 -0
  122. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
  123. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
  124. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
  125. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
  126. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
  127. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/dist/index.html +0 -0
  128. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
  129. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/dist/sw.js +0 -0
  130. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
  131. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
  132. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
  133. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
  134. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
  135. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
  136. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
  137. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
  138. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
  139. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
  140. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/eslint.config.js +0 -0
  141. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/index.html +0 -0
  142. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
  143. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/package-lock.json +0 -0
  144. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/package.json +0 -0
  145. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
  146. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/playwright.config.ts +0 -0
  147. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/postcss.config.js +0 -0
  148. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
  149. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
  150. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
  151. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/App.tsx +0 -0
  152. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/api/client.ts +0 -0
  153. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/api/generated.ts +0 -0
  154. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
  155. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
  156. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
  157. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
  158. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
  159. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
  160. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
  161. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
  162. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
  163. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
  164. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
  165. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
  166. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
  167. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
  168. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
  169. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
  170. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
  171. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
  172. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
  173. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
  174. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
  175. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
  176. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
  177. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
  178. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
  179. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
  180. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
  181. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
  182. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
  183. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
  184. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
  185. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
  186. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
  187. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
  188. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/index.css +0 -0
  189. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
  190. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
  191. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/main.tsx +0 -0
  192. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
  193. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
  194. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
  195. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
  196. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
  197. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
  198. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
  199. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
  200. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
  201. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
  202. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
  203. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
  204. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
  205. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
  206. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
  207. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
  208. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
  209. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
  210. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
  211. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
  212. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
  213. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/test-setup.ts +0 -0
  214. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
  215. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/tailwind.config.js +0 -0
  216. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/tsconfig.json +0 -0
  217. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/tsconfig.node.json +0 -0
  218. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/vite.config.ts +0 -0
  219. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/db.py +0 -0
  220. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dead_end.py +0 -0
  221. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/deploy/README.md +0 -0
  222. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/deploy/coord-agent.service +0 -0
  223. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/deploy/coord-db-backup.service +0 -0
  224. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/deploy/coord-db-backup.sh +0 -0
  225. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/deploy/coord-db-backup.timer +0 -0
  226. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/deploy/coord-drive-queue.service +0 -0
  227. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/deploy/coord-drive-queue.timer +0 -0
  228. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/deploy/coord-notify.service +0 -0
  229. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/deploy/coord-notify.timer +0 -0
  230. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/deploy/coord-release-propagate.service +0 -0
  231. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/deploy/coord-release-propagate.timer +0 -0
  232. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/deploy/coord-release-window.service +0 -0
  233. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/deploy/coord-release-window.timer +0 -0
  234. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/deploy/coord-serve.service +0 -0
  235. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/deploy/coord-web-dist-build.service +0 -0
  236. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/deploy/coord-web-dist-build.timer +0 -0
  237. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/deploy/coord-web.service +0 -0
  238. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/deploy_manifest.py +0 -0
  239. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/deploy_units.py +0 -0
  240. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/deps.py +0 -0
  241. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/diagnose.py +0 -0
  242. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dispatch.py +0 -0
  243. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dist_name.py +0 -0
  244. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/drive.py +0 -0
  245. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/drive_queue.py +0 -0
  246. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/drive_state.py +0 -0
  247. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/events.py +0 -0
  248. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/failure_class.py +0 -0
  249. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/filelock.py +0 -0
  250. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/fleet_config_health.py +0 -0
  251. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/freshness.py +0 -0
  252. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/gate_a.py +0 -0
  253. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/gate_b.py +0 -0
  254. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/gate_snapshot.py +0 -0
  255. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/gates.py +0 -0
  256. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/github_ops.py +0 -0
  257. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/goal.py +0 -0
  258. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/graph_health.py +0 -0
  259. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/health/__init__.py +0 -0
  260. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/health/aggregate.py +0 -0
  261. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/health/checks/__init__.py +0 -0
  262. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/health/checks/agent_install.py +0 -0
  263. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/health/checks/cargo_targets.py +0 -0
  264. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/health/checks/claude_binary.py +0 -0
  265. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/health/checks/deploy_lane_facts.py +0 -0
  266. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/health/checks/disk.py +0 -0
  267. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/health/checks/fleet_board.py +0 -0
  268. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  269. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/health/checks/fleet_phantom.py +0 -0
  270. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/health/checks/fleet_unit_drift.py +0 -0
  271. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/health/checks/graph.py +0 -0
  272. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/health/checks/plan_usage.py +0 -0
  273. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/health/checks/repo_state.py +0 -0
  274. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/health/checks/spawned_coord.py +0 -0
  275. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/health/checks/timer_active.py +0 -0
  276. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/health/checks/toolchain.py +0 -0
  277. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/health/checks/unit_drift.py +0 -0
  278. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/health/checks/unit_enablement.py +0 -0
  279. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/health/checks/worktrees.py +0 -0
  280. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/health/cli.py +0 -0
  281. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/health/context.py +0 -0
  282. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/health/fleet_snapshot.py +0 -0
  283. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/health/models.py +0 -0
  284. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/health/pypi.py +0 -0
  285. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/health/registry.py +0 -0
  286. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/health/render.py +0 -0
  287. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/health/units.py +0 -0
  288. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/hooks.py +0 -0
  289. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/housekeeping.py +0 -0
  290. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/interactive.py +0 -0
  291. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/issue_store.py +0 -0
  292. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/liveness_auditor.py +0 -0
  293. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/machine_pause.py +0 -0
  294. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/merge_queue.py +0 -0
  295. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/milestone_chat.py +0 -0
  296. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/milestone_dispatch.py +0 -0
  297. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/milestone_gate.py +0 -0
  298. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/milestone_order.py +0 -0
  299. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/mock_author.py +0 -0
  300. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/models.py +0 -0
  301. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/network.py +0 -0
  302. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/new_issue_chat.py +0 -0
  303. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/notifier/__init__.py +0 -0
  304. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/notifier/baseline.py +0 -0
  305. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/notifier/cli.py +0 -0
  306. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/notifier/collect.py +0 -0
  307. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/notifier/digest.py +0 -0
  308. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/notifier/models.py +0 -0
  309. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/notifier/predicate.py +0 -0
  310. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/notifier/service.py +0 -0
  311. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/notifier/store.py +0 -0
  312. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/notifier/transport.py +0 -0
  313. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/openapi.py +0 -0
  314. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/overlap_fence.py +0 -0
  315. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/parentage.py +0 -0
  316. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/parentage_github.py +0 -0
  317. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/pipeline.py +0 -0
  318. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/plan_parser.py +0 -0
  319. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/plans.py +0 -0
  320. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/platform_paths.py +0 -0
  321. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/pr_body_lint.py +0 -0
  322. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/prereqs.py +0 -0
  323. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/providers/__init__.py +0 -0
  324. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/providers/base.py +0 -0
  325. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/providers/claude.py +0 -0
  326. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/providers/claude_pty.py +0 -0
  327. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/providers/opencode.py +0 -0
  328. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/reconcile.py +0 -0
  329. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/refine_chat.py +0 -0
  330. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/release_cordon.py +0 -0
  331. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/release_propagate.py +0 -0
  332. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/release_verify.py +0 -0
  333. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/release_window.py +0 -0
  334. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/reports.py +0 -0
  335. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/review.py +0 -0
  336. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/scorecard.py +0 -0
  337. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/serve_app.py +0 -0
  338. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/skills/update-issue/SKILL.md +0 -0
  339. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/spend_ceiling.py +0 -0
  340. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/split_work.py +0 -0
  341. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/stage_projection.py +0 -0
  342. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/state.py +0 -0
  343. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/test_author.py +0 -0
  344. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/test_chat.py +0 -0
  345. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/test_orchestrator.py +0 -0
  346. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/test_report.py +0 -0
  347. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/tui_release.py +0 -0
  348. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/usage.py +0 -0
  349. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/usage_limits.py +0 -0
  350. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/usage_rollup.py +0 -0
  351. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/worker_events.py +0 -0
  352. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coordinator.example.yml +0 -0
  353. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/deploy/coord-agent.service +0 -0
  354. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/deploy/coord-db-backup.service +0 -0
  355. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/deploy/coord-db-backup.sh +0 -0
  356. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/deploy/coord-db-backup.timer +0 -0
  357. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/deploy/coord-drive-queue.service +0 -0
  358. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/deploy/coord-drive-queue.timer +0 -0
  359. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/deploy/coord-notify.service +0 -0
  360. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/deploy/coord-notify.timer +0 -0
  361. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/deploy/coord-release-propagate.service +0 -0
  362. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/deploy/coord-release-propagate.timer +0 -0
  363. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/deploy/coord-release-window.service +0 -0
  364. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/deploy/coord-release-window.timer +0 -0
  365. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/deploy/coord-serve.service +0 -0
  366. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/deploy/coord-web-dist-build.service +0 -0
  367. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/deploy/coord-web-dist-build.sh +0 -0
  368. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/deploy/coord-web-dist-build.timer +0 -0
  369. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/deploy/coord-web-rollback.sh +0 -0
  370. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/deploy/coord-web.service +0 -0
  371. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/deploy/node-shim.sh +0 -0
  372. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/docs/AGENT_OPERATIONS.md +0 -0
  373. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/docs/ARCHITECTURE.md +0 -0
  374. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/docs/ARCH_SECURITY_GATES.md +0 -0
  375. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/docs/COCKPIT.md +0 -0
  376. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/docs/CONTROL_CENTER.md +0 -0
  377. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/docs/CROSS_PLATFORM.md +0 -0
  378. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/docs/CUSTOMER_PORTAL.md +0 -0
  379. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/docs/DRIVE_QUEUE.md +0 -0
  380. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/docs/EPHEMERAL_WORKERS.md +0 -0
  381. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/docs/FORGE_MIGRATION.md +0 -0
  382. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/docs/GRAPHIFY_SETUP.md +0 -0
  383. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/docs/ISSUE_GUIDANCE.md +0 -0
  384. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/docs/MAC_MINI.md +0 -0
  385. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  386. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/docs/NOTIFIER.md +0 -0
  387. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/docs/OPENCODE_VERIFICATION.md +0 -0
  388. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/docs/ORACLE_LOOP.md +0 -0
  389. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/docs/PHONE_WEBAPP.md +0 -0
  390. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/docs/PIPELINE_V2.md +0 -0
  391. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/docs/PLATFORM_EVOLUTION.md +0 -0
  392. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/docs/SECOND_BACKEND.md +0 -0
  393. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/docs/STORE_SERVICE.md +0 -0
  394. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  395. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/docs/WEB_CONTROL_CENTER.md +0 -0
  396. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/docs/mocks/web/README.md +0 -0
  397. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/docs/mocks/web/_tokens.css +0 -0
  398. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/docs/mocks/web/issue-detail.html +0 -0
  399. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/docs/mocks/web/pipeline-narrow.html +0 -0
  400. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/docs/mocks/web/pipeline-wide.html +0 -0
  401. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/graphify-out/.gitignore +0 -0
  402. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/install-agent.sh +0 -0
  403. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/pyproject.toml +0 -0
  404. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/scripts/audit_review_verdict_overrides.py +0 -0
  405. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  406. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/scripts/azure-workers/build-worker-image.sh +0 -0
  407. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/scripts/azure-workers/coordinator-machine.py +0 -0
  408. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/scripts/azure-workers/epic-down.sh +0 -0
  409. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/scripts/azure-workers/epic-up.sh +0 -0
  410. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/scripts/azure-workers/preflight.sh +0 -0
  411. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/scripts/azure-workers/provision-worker.sh +0 -0
  412. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  413. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  414. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/scripts/azure-workers/verify-github-token.sh +0 -0
  415. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/scripts/codegen.py +0 -0
  416. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/scripts/drive-batch.sh +0 -0
  417. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/scripts/gen_board_fixture.py +0 -0
  418. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/scripts/next_release_tag.py +0 -0
  419. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/scripts/run_tests_without_gh.sh +0 -0
  420. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/scripts/smoke_437_interactive.py +0 -0
  421. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/scripts/verify_878_review_capture.py +0 -0
  422. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/scripts/verify_release_published.py +0 -0
  423. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/scripts/verify_release_wheel.py +0 -0
  424. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/setup.cfg +0 -0
  425. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/SMOKE_SET.md +0 -0
  426. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/__init__.py +0 -0
  427. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  428. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/acceptance/ms-33/contract.md +0 -0
  429. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/acceptance/ms-33/manifest.yml +0 -0
  430. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  431. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  432. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  433. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  434. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/acceptance/ms-37/conftest.py +0 -0
  435. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/acceptance/ms-37/contract.md +0 -0
  436. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/acceptance/ms-37/manifest.yml +0 -0
  437. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  438. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  439. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/acceptance/ms-38/contract.md +0 -0
  440. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/acceptance/ms-38/manifest.yml +0 -0
  441. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  442. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  443. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  444. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  445. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  446. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  447. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  448. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  449. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  450. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  451. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/acceptance/ms-51/contract.md +0 -0
  452. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  453. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  454. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/acceptance/ms-51/manifest.yml +0 -0
  455. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  456. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/acceptance/ms-51/tsconfig.json +0 -0
  457. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  458. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/conftest.py +0 -0
  459. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/fixtures/board-pipeline-basic.json +0 -0
  460. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  461. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  462. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  463. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/fixtures/playwright/all_pass.json +0 -0
  464. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  465. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/fixtures/playwright/mixed_fail.json +0 -0
  466. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  467. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  468. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/fixtures/playwright/skip.json +0 -0
  469. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/fixtures/playwright/truncated.json +0 -0
  470. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  471. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  472. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  473. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  474. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  475. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  476. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  477. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  478. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_acceptance.py +0 -0
  479. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_agent.py +0 -0
  480. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_agent_api_error.py +0 -0
  481. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_agent_app.py +0 -0
  482. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_agent_branch_base.py +0 -0
  483. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_agent_branch_capture.py +0 -0
  484. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_agent_config_free_1712.py +0 -0
  485. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_agent_deploy_units_endpoint.py +0 -0
  486. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_agent_dirty_worktree.py +0 -0
  487. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_agent_graph_self_heal.py +0 -0
  488. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_agent_health_h3.py +0 -0
  489. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_agent_idle_restart.py +0 -0
  490. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_agent_push_failure.py +0 -0
  491. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_agent_reap.py +0 -0
  492. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_agent_repos_and_pull.py +0 -0
  493. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_agent_restart_services_endpoint.py +0 -0
  494. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_agent_startup_diagnostics.py +0 -0
  495. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_agent_update.py +0 -0
  496. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_agent_update_bluegreen.py +0 -0
  497. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_agent_usage_limit.py +0 -0
  498. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_agent_zero_commit.py +0 -0
  499. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_approve_reject_plan.py +0 -0
  500. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_approve_usage_gate.py +0 -0
  501. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_assignment_already_recorded_daemon.py +0 -0
  502. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_audit_log.py +0 -0
  503. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_audit_outcome.py +0 -0
  504. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_audit_query.py +0 -0
  505. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_auto_loop.py +0 -0
  506. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_auto_release_publish_2035.py +0 -0
  507. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_base_checkout_restore.py +0 -0
  508. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_board_cap_762.py +0 -0
  509. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_board_fixture.py +0 -0
  510. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_board_read_path.py +0 -0
  511. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_board_service.py +0 -0
  512. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_board_state.py +0 -0
  513. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_board_wire.py +0 -0
  514. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_brain.py +0 -0
  515. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_branch_model.py +0 -0
  516. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_bug_intake.py +0 -0
  517. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_build_worker_image_env_update.py +0 -0
  518. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cargo_cache.py +0 -0
  519. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_ci_acceptance_gate_1950.py +0 -0
  520. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_ci_store.py +0 -0
  521. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_claim.py +0 -0
  522. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_acceptance.py +0 -0
  523. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_assign.py +0 -0
  524. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  525. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_assign_interactive_remote.py +0 -0
  526. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_assign_provider.py +0 -0
  527. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_audit.py +0 -0
  528. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_chat_continue.py +0 -0
  529. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_diagnose_config_provenance.py +0 -0
  530. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_diagnose_graph.py +0 -0
  531. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_doctor.py +0 -0
  532. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_doctor_config_free_1801.py +0 -0
  533. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  534. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_drive.py +0 -0
  535. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_drive_queue.py +0 -0
  536. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_escalate.py +0 -0
  537. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_fix_headless_review.py +0 -0
  538. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_gate_a.py +0 -0
  539. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_install_drift.py +0 -0
  540. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_install_skills.py +0 -0
  541. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_issue_create_label.py +0 -0
  542. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_issue_reopen.py +0 -0
  543. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_merge.py +0 -0
  544. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_milestone_assign.py +0 -0
  545. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_milestone_capture.py +0 -0
  546. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_milestone_chat_add_child.py +0 -0
  547. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_milestone_dispatch.py +0 -0
  548. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_milestone_gate_b.py +0 -0
  549. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_milestone_gate_c.py +0 -0
  550. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_milestone_order.py +0 -0
  551. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  552. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_milestone_ship.py +0 -0
  553. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_network.py +0 -0
  554. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_new_issue_chat.py +0 -0
  555. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_plans.py +0 -0
  556. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_pull_artifact.py +0 -0
  557. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_queue.py +0 -0
  558. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_reattach_sessions.py +0 -0
  559. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_refine_board.py +0 -0
  560. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_release_preflight.py +0 -0
  561. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_release_propagate.py +0 -0
  562. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_release_window.py +0 -0
  563. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_scorecard.py +0 -0
  564. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_set_review_findings.py +0 -0
  565. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_status_advisory_terminal.py +0 -0
  566. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_status_merge_queue.py +0 -0
  567. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_status_provider.py +0 -0
  568. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_status_review_finalizing.py +0 -0
  569. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_status_test_failed_tag.py +0 -0
  570. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_status_usage_limit.py +0 -0
  571. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_sync_comments_873.py +0 -0
  572. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_test_plan.py +0 -0
  573. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_track.py +0 -0
  574. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_tui_update.py +0 -0
  575. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_wait.py +0 -0
  576. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_client_base_install.py +0 -0
  577. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_comments.py +0 -0
  578. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_completion_summary.py +0 -0
  579. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_config.py +0 -0
  580. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_config_acceptance.py +0 -0
  581. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_config_audit.py +0 -0
  582. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_config_pricing.py +0 -0
  583. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_config_usage_gate.py +0 -0
  584. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_conflict_fix.py +0 -0
  585. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_conflict_fix_semantic.py +0 -0
  586. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_coord_test_runner_routing.py +0 -0
  587. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_coord_test_runner_toolchain.py +0 -0
  588. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_coord_web_sse_restart_live.py +0 -0
  589. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_coordinator_machine.py +0 -0
  590. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_dashboard.py +0 -0
  591. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_dashboard_fixture.py +0 -0
  592. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_dashboard_terminal.py +0 -0
  593. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_dashboard_terminal_live.py +0 -0
  594. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_db.py +0 -0
  595. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_dead_end.py +0 -0
  596. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_deploy_coord_web_dist.py +0 -0
  597. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_deploy_coord_web_rollback.py +0 -0
  598. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_deploy_drive_queue_unit.py +0 -0
  599. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_deploy_manifest.py +0 -0
  600. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_deploy_units_lane.py +0 -0
  601. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_deploy_web_unit.py +0 -0
  602. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_deps.py +0 -0
  603. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_diagnose.py +0 -0
  604. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_dispatch.py +0 -0
  605. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_dispatch_target_validation.py +0 -0
  606. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_dist_name.py +0 -0
  607. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_done_housekeeping.py +0 -0
  608. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_drive.py +0 -0
  609. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_drive_queue.py +0 -0
  610. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_drive_state.py +0 -0
  611. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_drive_tmux.py +0 -0
  612. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_epic_up_capability_detection.py +0 -0
  613. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  614. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_epic_up_image_provenance.py +0 -0
  615. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_errors.py +0 -0
  616. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_events.py +0 -0
  617. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_failure_class.py +0 -0
  618. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_filelock.py +0 -0
  619. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  620. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_fix_of_force_override.py +0 -0
  621. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_fleet_config_health.py +0 -0
  622. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_fleet_health_probes.py +0 -0
  623. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_fleet_health_snapshot.py +0 -0
  624. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_freshness.py +0 -0
  625. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_gate_a.py +0 -0
  626. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_gate_b.py +0 -0
  627. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_gate_snapshot_staleness.py +0 -0
  628. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_gates.py +0 -0
  629. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_generated_types_fixture.py +0 -0
  630. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_github_ops.py +0 -0
  631. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_goal.py +0 -0
  632. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_graph_health.py +0 -0
  633. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_handoff.py +0 -0
  634. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_health_checks.py +0 -0
  635. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_health_cli.py +0 -0
  636. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_health_cli_graph.py +0 -0
  637. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_health_config.py +0 -0
  638. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_health_context.py +0 -0
  639. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_health_deploy_lane_facts.py +0 -0
  640. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_health_incident_regression.py +0 -0
  641. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_health_pypi.py +0 -0
  642. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_health_registry.py +0 -0
  643. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_health_timer_active.py +0 -0
  644. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_health_toolchain.py +0 -0
  645. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_health_unit_drift.py +0 -0
  646. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_health_unit_enablement.py +0 -0
  647. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_hooks.py +0 -0
  648. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_human_attended_437.py +0 -0
  649. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_init.py +0 -0
  650. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_integration.py +0 -0
  651. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_interactive_briefing_echo.py +0 -0
  652. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_interactive_prefill_state.py +0 -0
  653. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_interactive_session_relaunch.py +0 -0
  654. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_interactive_test_verdict_backstop.py +0 -0
  655. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_interactive_token_attribution.py +0 -0
  656. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_interactive_worktree.py +0 -0
  657. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_issue_store_seam.py +0 -0
  658. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_liveness_auditor.py +0 -0
  659. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_liveness_notify.py +0 -0
  660. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_machine_pause.py +0 -0
  661. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_merge_queue.py +0 -0
  662. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_merge_verify.py +0 -0
  663. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_milestone_chat.py +0 -0
  664. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_milestone_dispatch.py +0 -0
  665. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_milestone_gate.py +0 -0
  666. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_milestone_order.py +0 -0
  667. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_milestone_seam.py +0 -0
  668. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_mock_author.py +0 -0
  669. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_model_tiering.py +0 -0
  670. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_models.py +0 -0
  671. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_models_config_labels.py +0 -0
  672. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_needs_attention.py +0 -0
  673. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_network.py +0 -0
  674. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_new_issue_chat.py +0 -0
  675. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_next_release_tag.py +0 -0
  676. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_no_direct_gh_calls.py +0 -0
  677. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_node_shim.py +0 -0
  678. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_notifier_baseline.py +0 -0
  679. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_notifier_cli.py +0 -0
  680. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_notifier_collect.py +0 -0
  681. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_notifier_config.py +0 -0
  682. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_notifier_drive_seam.py +0 -0
  683. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_notifier_isolation.py +0 -0
  684. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_notifier_predicate.py +0 -0
  685. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_notifier_quiet_hours.py +0 -0
  686. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_notifier_service.py +0 -0
  687. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_notify_drain.py +0 -0
  688. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_openapi.py +0 -0
  689. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_operational_defaults.py +0 -0
  690. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_overlap_fence.py +0 -0
  691. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_packaged_deploy_units.py +0 -0
  692. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_parentage.py +0 -0
  693. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_paste_landed.py +0 -0
  694. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_pipeline.py +0 -0
  695. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_plan_followup_approve_plan_command.py +0 -0
  696. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_plan_followup_pr_command.py +0 -0
  697. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_plan_followup_review_command.py +0 -0
  698. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_plan_only.py +0 -0
  699. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_plan_parser.py +0 -0
  700. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_platform_paths.py +0 -0
  701. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_pr_body_lint.py +0 -0
  702. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_prereqs.py +0 -0
  703. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_production_db_guard.py +0 -0
  704. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_provider_seam.py +0 -0
  705. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_providers.py +0 -0
  706. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_providers_config_labels.py +0 -0
  707. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_providers_pty.py +0 -0
  708. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_quiet_hours.py +0 -0
  709. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_quiet_hours_store_2146.py +0 -0
  710. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_reap_merged_sessions.py +0 -0
  711. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_reap_stale_interactive_tick.py +0 -0
  712. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_reconcile_branch.py +0 -0
  713. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_reconcile_completions.py +0 -0
  714. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_reconcile_merges.py +0 -0
  715. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_reconcile_usage_limit_done.py +0 -0
  716. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_refine_chat.py +0 -0
  717. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_release_cordon_2101.py +0 -0
  718. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_release_propagate.py +0 -0
  719. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_release_unified_1242.py +0 -0
  720. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_release_verify.py +0 -0
  721. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_release_window.py +0 -0
  722. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_remote_auto_prune.py +0 -0
  723. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_remote_interactive_reaper.py +0 -0
  724. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_report_result_push.py +0 -0
  725. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_reports.py +0 -0
  726. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_retry.py +0 -0
  727. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_retry_advisory_1606.py +0 -0
  728. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_retry_type_1636.py +0 -0
  729. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_review.py +0 -0
  730. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_review_end_review_without_verdict.py +0 -0
  731. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_review_parse_failure_diagnostic.py +0 -0
  732. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_review_reaffirm.py +0 -0
  733. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_review_state.py +0 -0
  734. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_review_verdict_backstop.py +0 -0
  735. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_review_verdict_override_audit.py +0 -0
  736. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_review_verdict_relay.py +0 -0
  737. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_review_zero_commits.py +0 -0
  738. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_scoped_review_wiring.py +0 -0
  739. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_scorecard.py +0 -0
  740. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_serve.py +0 -0
  741. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_serve_app_board_trim.py +0 -0
  742. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_session.py +0 -0
  743. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_slice_issue_attribution.py +0 -0
  744. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_smoke_live_checkout_restore.py +0 -0
  745. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_smoke_workflow.py +0 -0
  746. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_spend_ceiling.py +0 -0
  747. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_spend_ceiling_coordinator.py +0 -0
  748. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_split.py +0 -0
  749. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_split_work.py +0 -0
  750. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_stage_projection.py +0 -0
  751. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_stalled_pipeline.py +0 -0
  752. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_state.py +0 -0
  753. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_state_review_findings_daemon.py +0 -0
  754. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_status_fleet_footer.py +0 -0
  755. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_stop_1567.py +0 -0
  756. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_stuck.py +0 -0
  757. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_terminal_command.py +0 -0
  758. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_test_author.py +0 -0
  759. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_test_chat.py +0 -0
  760. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_test_orchestrator.py +0 -0
  761. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_test_report.py +0 -0
  762. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_test_verdict_parsing.py +0 -0
  763. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_test_verdict_transcript_floor.py +0 -0
  764. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_thin_client_board_audit.py +0 -0
  765. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_thin_client_config_load_1080.py +0 -0
  766. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_thin_client_daemon_routing_906.py +0 -0
  767. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_tmux_host.py +0 -0
  768. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_tmux_session.py +0 -0
  769. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_transcript_floor.py +0 -0
  770. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_usage.py +0 -0
  771. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_usage_limits.py +0 -0
  772. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_usage_rollup.py +0 -0
  773. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_venv_live_install_2121.py +0 -0
  774. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_version_single_source.py +0 -0
  775. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_watch.py +0 -0
  776. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_worker_events.py +0 -0
  777. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_worker_image_pin_sync.py +0 -0
  778. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_worker_safety.py +0 -0
  779. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_worktree.py +0 -0
  780. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  781. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/Cargo.lock +0 -0
  782. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/Cargo.toml +0 -0
  783. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/cargo-config-local-quadraui.toml.example +0 -0
  784. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/src/app/audit.rs +0 -0
  785. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/src/app/chat.rs +0 -0
  786. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/src/app/drive.rs +0 -0
  787. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/src/app/drive_queue.rs +0 -0
  788. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/src/app/escalation.rs +0 -0
  789. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/src/app/fleet_health.rs +0 -0
  790. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/src/app/fleet_sessions.rs +0 -0
  791. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/src/app/fleet_terminals.rs +0 -0
  792. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/src/app/format.rs +0 -0
  793. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/src/app/milestone_dag.rs +0 -0
  794. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/src/app/msv.rs +0 -0
  795. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/src/app/plans.rs +0 -0
  796. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/src/app/render.rs +0 -0
  797. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/src/app/reports.rs +0 -0
  798. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/src/app/sessions.rs +0 -0
  799. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/src/app/settings_ui.rs +0 -0
  800. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/src/app/terminal.rs +0 -0
  801. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/src/app/types.rs +0 -0
  802. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/src/app/workspace.rs +0 -0
  803. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/src/bin/gtk.rs +0 -0
  804. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/src/commands.rs +0 -0
  805. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/src/lib.rs +0 -0
  806. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/src/main.rs +0 -0
  807. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/src/settings.rs +0 -0
  808. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/tests/acceptance.rs +0 -0
  809. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/tests/cli.rs +0 -0
  810. {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/tests/fixtures/board_sample.json +0 -0
@@ -115,6 +115,55 @@ jobs:
115
115
  - run: pip install -e ".[dev]"
116
116
  - run: scripts/run_tests_without_gh.sh python -m pytest tests/ -q
117
117
 
118
+ # #2170: run the full suite in the environment of a REAL FLEET MACHINE — a
119
+ # populated `~/.coord/` (thin-client shaped), no `sqlite3` on PATH, and a
120
+ # `$TMPDIR` under an ancestor pytest config.
121
+ #
122
+ # This job exists because the `test` matrix above is structurally incapable
123
+ # of catching the class it covers. Six tests failed on `origin/main` on every
124
+ # fleet machine while `ubuntu-latest` stayed green on 3.12 AND 3.13 — the
125
+ # INVERSE of the familiar "passes locally, fails only in CI ⇒ ambient $HOME"
126
+ # pattern. They passed in CI *precisely because* CI's `$HOME` is empty, and a
127
+ # matrix whose only environment is the empty one can never see that.
128
+ #
129
+ # What it cost while invisible: the Test stage on `precision` could not
130
+ # produce a green verdict for this repo on ANY branch. Every dispatch there
131
+ # returned `SMOKE: fail`, the branch was blamed for breakage it did not
132
+ # cause, and a human read the log and adjudicated — 11m36s and $0.61 for zero
133
+ # signal about the branch, repeatedly, for months (claude-coordinator#2158).
134
+ #
135
+ # SAME SHAPE AS `no-gh-on-path` ABOVE, AND FOR THE SAME REASON. That job
136
+ # (#1484) exists because a host-dependent `gh` made the suite's result depend
137
+ # on the machine rather than the code; this one exists because a
138
+ # host-dependent `$HOME`/`$PATH`/`$TMPDIR` did the same thing in the opposite
139
+ # direction. Both mask by NAME rather than by dropping PATH directories — see
140
+ # `scripts/run_tests_in_populated_home.sh`'s header for why
141
+ # `PATH=/usr/bin:/bin` is the wrong recipe here.
142
+ #
143
+ # `tests/test_ambient_home_isolation.py` pins the specific affected targets
144
+ # on every run everywhere (including this job, and including a fleet
145
+ # machine's own Test leg) — that is the always-on gate, and it is what fails
146
+ # first if one of the three regresses. THIS job is the whole-suite sweep: it
147
+ # is what finds the NEXT test of this class before a fleet machine does.
148
+ # Verified at authoring time: 9590 passed, 13 skipped under these three knobs.
149
+ populated-home:
150
+ runs-on: ubuntu-latest
151
+ steps:
152
+ - uses: actions/checkout@v4
153
+ - uses: actions/setup-python@v5
154
+ with:
155
+ python-version: "3.12"
156
+ - run: pip install -e ".[dev]"
157
+ - run: scripts/run_tests_in_populated_home.sh python -m pytest tests/ -q
158
+ - name: What a red result here means
159
+ if: failure()
160
+ run: |
161
+ echo "::error::The suite is red under a POPULATED \$HOME (thin-client ~/.coord/, no sqlite3 on PATH, \$TMPDIR under an ancestor pytest config) while the plain 'test' job may well be green."
162
+ echo "That difference IS the finding, not noise: a test that needs an empty \$HOME cannot pass on any fleet machine, so the Test stage there can never go green and every dispatch costs a human adjudication (#2170)."
163
+ echo "Fix the TEST's isolation -- redirect \$HOME/XDG at tmp_path, drop COORD_SERVICE_URL/COORD_TOKEN/COORD_CONFIG, skip-guard an unprovisioned system binary, pin a nested pytest's --rootdir."
164
+ echo "Do NOT fix it by making the product trust an ambient path: 'coord config --config' is deliberately NOT authoritative on a thin client (CLAUDE.md, docs/EPHEMERAL_WORKERS.md)."
165
+ echo "Reproduce locally: scripts/run_tests_in_populated_home.sh python -m pytest tests/ -q"
166
+
118
167
  # #906: run the test suite in thin-client mode with COORD_STRICT_LOCAL_BOARD=1
119
168
  # so any board touch reachable from a thin-client path raises RuntimeError
120
169
  # instead of silently no-oping against an empty local DB. This job catches
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-coordinator
3
- Version: 0.5.53
3
+ Version: 0.5.55
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.53
3
+ Version: 0.5.55
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
@@ -385,6 +385,7 @@ scripts/coord-test-runner.sh
385
385
  scripts/drive-batch.sh
386
386
  scripts/gen_board_fixture.py
387
387
  scripts/next_release_tag.py
388
+ scripts/run_tests_in_populated_home.sh
388
389
  scripts/run_tests_without_gh.sh
389
390
  scripts/smoke_437_interactive.py
390
391
  scripts/verify_878_review_capture.py
@@ -425,6 +426,7 @@ tests/test_agent_update.py
425
426
  tests/test_agent_update_bluegreen.py
426
427
  tests/test_agent_usage_limit.py
427
428
  tests/test_agent_zero_commit.py
429
+ tests/test_ambient_home_isolation.py
428
430
  tests/test_approve_reject_plan.py
429
431
  tests/test_approve_usage_gate.py
430
432
  tests/test_assignment_already_recorded_daemon.py
@@ -513,6 +515,7 @@ tests/test_config_usage_gate.py
513
515
  tests/test_conflict_fix.py
514
516
  tests/test_conflict_fix_semantic.py
515
517
  tests/test_coord_test.py
518
+ tests/test_coord_test_runner_baseline.py
516
519
  tests/test_coord_test_runner_routing.py
517
520
  tests/test_coord_test_runner_toolchain.py
518
521
  tests/test_coord_web_sse_restart_live.py
@@ -375,6 +375,7 @@
375
375
  "scripts/drive-batch.sh",
376
376
  "scripts/gen_board_fixture.py",
377
377
  "scripts/next_release_tag.py",
378
+ "scripts/run_tests_in_populated_home.sh",
378
379
  "scripts/run_tests_without_gh.sh",
379
380
  "scripts/smoke_437_interactive.py",
380
381
  "scripts/verify_878_review_capture.py",
@@ -455,6 +456,7 @@
455
456
  "tests/test_agent_update_bluegreen.py",
456
457
  "tests/test_agent_usage_limit.py",
457
458
  "tests/test_agent_zero_commit.py",
459
+ "tests/test_ambient_home_isolation.py",
458
460
  "tests/test_approve_reject_plan.py",
459
461
  "tests/test_approve_usage_gate.py",
460
462
  "tests/test_assignment_already_recorded_daemon.py",
@@ -543,6 +545,7 @@
543
545
  "tests/test_conflict_fix.py",
544
546
  "tests/test_conflict_fix_semantic.py",
545
547
  "tests/test_coord_test.py",
548
+ "tests/test_coord_test_runner_baseline.py",
546
549
  "tests/test_coord_test_runner_routing.py",
547
550
  "tests/test_coord_test_runner_toolchain.py",
548
551
  "tests/test_coord_web_sse_restart_live.py",
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "0.5.53",
2
+ "tag": "0.5.55",
3
3
  "distance": 0,
4
- "node": "gfdb2b81a9b6878d9dd5c755ea92fbc5de7839f21",
4
+ "node": "g20ff70836aa359817f5f585fff5a5b9a075bb022",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-13"
@@ -649,8 +649,40 @@ def test(assignment_id: str, config_path: Path, verdict: str | None, reason: str
649
649
 
650
650
  if repo and repo.test_command:
651
651
  click.echo(f"Running tests: {repo.test_command}")
652
- result = subprocess.run(repo.test_command, shell=True, cwd=str(wt_path))
652
+ # #2170: capture (stdout+stderr merged, same as an unpiped terminal
653
+ # would show) so a failure can be checked for the runner's `RESULT:
654
+ # BASELINE-RED` marker below — a failure the runner itself has
655
+ # already confirmed also reproduces on the merge-base is a
656
+ # statement about THIS MACHINE, not this branch, and must not be
657
+ # nudged towards `coord test --fail`. Relayed to the terminal after
658
+ # the run finishes rather than streamed live — the trade-off that
659
+ # buys the marker check `subprocess.run` (not `Popen`) keeps this
660
+ # call mockable exactly like every other one in this function.
661
+ result = subprocess.run(
662
+ repo.test_command, shell=True, cwd=str(wt_path),
663
+ stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True,
664
+ )
665
+ if result.stdout:
666
+ click.echo(result.stdout, nl=False)
653
667
  if result.returncode != 0:
668
+ from coord.revalidate import is_baseline_red_failure # noqa: PLC0415
669
+
670
+ if is_baseline_red_failure(result.returncode, result.stdout or ""):
671
+ click.echo(
672
+ f"\nTests failed (exit {result.returncode}) — but the "
673
+ "runner already confirmed every failure reproduces "
674
+ "identically on the merge-base (#2170): this machine's "
675
+ "BASELINE is red, not this branch.",
676
+ err=True,
677
+ )
678
+ click.echo(f" worktree kept for inspection: {wt_path}")
679
+ click.echo(
680
+ " run: coord test --skipped "
681
+ f"{assignment_id} --reason \"baseline-red (#2170): "
682
+ "pre-existing failures on this machine\" "
683
+ "# NOT --fail — the branch made nothing worse"
684
+ )
685
+ sys.exit(1)
654
686
  click.echo(f"Tests failed (exit {result.returncode})", err=True)
655
687
  click.echo(f" worktree kept for inspection: {wt_path}")
656
688
  sys.exit(1)
@@ -1705,6 +1705,50 @@ def _capture_smoke_tests(transition: Transition, entry: dict) -> None:
1705
1705
  )
1706
1706
 
1707
1707
 
1708
+ def _smoke_baseline_red_reason(transition: Transition, entry: dict) -> str | None:
1709
+ """#2170: look for a `SMOKE: baseline-red <reason>` line in the smoke
1710
+ worker's transcript and return its reason text, or ``None`` if absent.
1711
+
1712
+ Same local-log-first, agent-endpoint-fallback discipline as
1713
+ :func:`_capture_smoke_tests` — this is read-only (nothing persisted here;
1714
+ the caller decides what to do with the reason), and best-effort: any
1715
+ lookup failure is logged and treated as "no baseline-red line found",
1716
+ which routes the caller to the ordinary `failed` verdict rather than
1717
+ silently swallowing a genuine branch failure.
1718
+ """
1719
+ from coord.progress import ( # noqa: PLC0415
1720
+ parse_smoke_baseline_red_from_agent,
1721
+ parse_smoke_baseline_red_from_log,
1722
+ )
1723
+
1724
+ reason: str | None = None
1725
+ log_path = entry.get("log_path")
1726
+ if log_path:
1727
+ try:
1728
+ reason = parse_smoke_baseline_red_from_log(Path(log_path))
1729
+ except Exception as exc: # noqa: BLE001
1730
+ log.debug(
1731
+ "_smoke_baseline_red_reason: failed to parse local log for %s: %s",
1732
+ transition.assignment_id, exc,
1733
+ )
1734
+
1735
+ if reason is None:
1736
+ host = _agent_host(transition.machine_name)
1737
+ if host:
1738
+ try:
1739
+ reason = parse_smoke_baseline_red_from_agent(
1740
+ host, transition.assignment_id
1741
+ )
1742
+ except Exception as exc: # noqa: BLE001
1743
+ log.debug(
1744
+ "_smoke_baseline_red_reason: failed to fetch from agent "
1745
+ "%s for %s: %s",
1746
+ host, transition.assignment_id, exc,
1747
+ )
1748
+
1749
+ return reason
1750
+
1751
+
1708
1752
  def _capture_cost(transition: Transition, entry: dict, record: dict | None = None) -> None:
1709
1753
  """#208/#546: parse the worker's final cost+tokens and persist them.
1710
1754
 
@@ -2332,17 +2376,52 @@ def post_transition(transition: Transition, record: dict, entry: dict) -> None:
2332
2376
  transition.repo_name, transition.issue_number
2333
2377
  )
2334
2378
  if test_mode != "smoke":
2335
- succeeded = (transition.exit_code or 0) == 0
2336
- # #1384: no `smoke_test=` argument needed — the writer
2337
- # (`state._record_test_verdict_local`) derives the legacy
2338
- # mirror from `test_state`, so a headless smoke FAILURE lands
2339
- # as test_state='failed' AND smoke_test='fail' and stays
2340
- # reachable from `coord fix`.
2341
- record_test_verdict(
2342
- assignment_id=parent_id,
2343
- test_state="passed" if succeeded else "failed",
2344
- test_reason="headless smoke",
2345
- )
2379
+ exit_code = transition.exit_code or 0
2380
+ if exit_code == 0:
2381
+ record_test_verdict(
2382
+ assignment_id=parent_id,
2383
+ test_state="passed",
2384
+ test_reason="headless smoke",
2385
+ )
2386
+ else:
2387
+ # #2170: a non-zero smoke exit is not automatically the
2388
+ # branch's fault — check whether the dispatched agent
2389
+ # reported that the machine's own BASELINE is red (every
2390
+ # failure reproduces identically on the merge-base; see
2391
+ # `SMOKE_SYSTEM_PROMPT` step 4 in `coord.smoke`). The
2392
+ # marker is the signal, not the exit code, mirroring
2393
+ # `coord.revalidate.is_baseline_red_failure`'s discipline
2394
+ # — an arbitrary non-zero exit proves nothing on its own.
2395
+ baseline_red_reason = _smoke_baseline_red_reason(
2396
+ transition, entry
2397
+ )
2398
+ if baseline_red_reason is not None:
2399
+ # `skipped`, not `failed`: the merge gate treats a
2400
+ # skipped Test stage as satisfied, and neither
2401
+ # `coord fix` nor `coord drive` burns an attempt on
2402
+ # breakage this branch did not cause.
2403
+ record_test_verdict(
2404
+ assignment_id=parent_id,
2405
+ test_state="skipped",
2406
+ test_reason=(
2407
+ f"baseline-red (#2170): {baseline_red_reason}"
2408
+ if baseline_red_reason
2409
+ else "baseline-red (#2170): every failure "
2410
+ "reproduces identically on the merge-base"
2411
+ ),
2412
+ )
2413
+ else:
2414
+ # #1384: no `smoke_test=` argument needed — the
2415
+ # writer (`state._record_test_verdict_local`)
2416
+ # derives the legacy mirror from `test_state`, so a
2417
+ # headless smoke FAILURE lands as
2418
+ # test_state='failed' AND smoke_test='fail' and
2419
+ # stays reachable from `coord fix`.
2420
+ record_test_verdict(
2421
+ assignment_id=parent_id,
2422
+ test_state="failed",
2423
+ test_reason="headless smoke",
2424
+ )
2346
2425
  elif transition.event == EVENT_FAILURE and assignment_type == "smoke":
2347
2426
  # #1605: the Test-stage WORKER itself died (a dead agent, a killed
2348
2427
  # process group, a terminal API error — anything short of the
@@ -46,6 +46,17 @@ _SMOKE_NONE_RE = re.compile(
46
46
  )
47
47
  _SMOKE_BULLET_RE = re.compile(r"^\s*[-*]\s+(.+?)\s*$")
48
48
 
49
+ # #2170: the headless Test-stage smoke agent (`coord.smoke.SMOKE_SYSTEM_PROMPT`)
50
+ # prints this line instead of `SMOKE: fail` when the smoke command's own
51
+ # failures reproduce identically on the merge-base — a red BASELINE, not a
52
+ # branch failure. Line-anchored, mirroring `coord.revalidate`'s
53
+ # `is_baseline_red_failure` marker discipline: never a bare substring search,
54
+ # so an unrelated line that merely mentions "SMOKE: baseline-red" mid-sentence
55
+ # doesn't false-positive.
56
+ _SMOKE_BASELINE_RED_RE = re.compile(
57
+ r"^SMOKE:\s*baseline-red[ \t]*(.*)$", re.MULTILINE | re.IGNORECASE,
58
+ )
59
+
49
60
 
50
61
  @dataclass
51
62
  class WorkerProgress:
@@ -411,6 +422,112 @@ def parse_completion_summary_from_agent(
411
422
  return _extract_completion_summary_from_text(text)
412
423
 
413
424
 
425
+ def _extract_smoke_baseline_red_from_text(text: str) -> str | None:
426
+ """#2170: pull the last `SMOKE: baseline-red <reason>` line out of *text*.
427
+
428
+ Returns the reason string (possibly ``""`` if the agent gave none), or
429
+ ``None`` if no such line is present — the same "None means absent"
430
+ contract as :func:`_extract_completion_summary_from_text`. Picks the LAST
431
+ match, matching every other block-extraction parser in this module, in
432
+ case the agent restates its verdict.
433
+ """
434
+ matches = list(_SMOKE_BASELINE_RED_RE.finditer(text))
435
+ if not matches:
436
+ return None
437
+ return matches[-1].group(1).strip()
438
+
439
+
440
+ def parse_smoke_baseline_red_from_log(
441
+ log_path: str | Path, tail_bytes: int = 65_536,
442
+ ) -> str | None:
443
+ """#2170: read the tail of *log_path* and extract a `SMOKE: baseline-red`
444
+ verdict line, if the worker printed one.
445
+
446
+ Handles both stream-json logs (decodes assistant text events first) and
447
+ legacy plain-text logs, exactly like :func:`parse_smoke_tests_from_log`.
448
+ """
449
+ p = Path(log_path)
450
+ if not p.exists():
451
+ return None
452
+
453
+ from coord.worker_events import is_stream_json # noqa: PLC0415
454
+
455
+ if is_stream_json(p):
456
+ from coord.worker_events import _assistant_text, parse_event # noqa: PLC0415
457
+ texts: list[str] = []
458
+ try:
459
+ with open(p, encoding="utf-8", errors="replace") as f:
460
+ for line in f:
461
+ event = parse_event(line.rstrip("\n"))
462
+ if event is None or event.type != "assistant":
463
+ continue
464
+ t = _assistant_text(event)
465
+ if t:
466
+ texts.append(t)
467
+ except OSError:
468
+ return None
469
+ return _extract_smoke_baseline_red_from_text("\n".join(texts))
470
+
471
+ try:
472
+ size = p.stat().st_size
473
+ with open(p, encoding="utf-8", errors="replace") as f:
474
+ if size > tail_bytes:
475
+ f.seek(size - tail_bytes)
476
+ f.readline() # skip partial line
477
+ text = f.read()
478
+ except OSError:
479
+ return None
480
+ return _extract_smoke_baseline_red_from_text(text)
481
+
482
+
483
+ def parse_smoke_baseline_red_from_agent(
484
+ host: str,
485
+ assignment_id: str,
486
+ port: int = 7433,
487
+ timeout: float = 15.0,
488
+ ) -> str | None:
489
+ """#2170: fetch a worker's log via the agent's ``/logs/<id>`` endpoint and
490
+ extract a `SMOKE: baseline-red` verdict line.
491
+
492
+ Use this instead of :func:`parse_smoke_baseline_red_from_log` when the
493
+ worker ran on a remote agent and the log isn't on the coordinator's local
494
+ filesystem. Mirrors :func:`parse_smoke_tests_from_agent`.
495
+ """
496
+ import httpx # noqa: PLC0415
497
+
498
+ url = f"http://{host}:{port}/logs/{assignment_id}"
499
+ try:
500
+ resp = httpx.get(url, timeout=timeout)
501
+ resp.raise_for_status()
502
+ text = resp.text
503
+ except (httpx.HTTPError, httpx.TimeoutException):
504
+ return None
505
+ if not text:
506
+ return None
507
+
508
+ stream_json = False
509
+ for line in text.splitlines():
510
+ stripped = line.strip()
511
+ if not stripped or stripped.startswith("#"):
512
+ continue
513
+ stream_json = stripped.startswith("{")
514
+ break
515
+
516
+ if stream_json:
517
+ from coord.worker_events import _assistant_text, parse_event # noqa: PLC0415
518
+ decoded: list[str] = []
519
+ for line in text.splitlines():
520
+ event = parse_event(line.rstrip("\n"))
521
+ if event is None or event.type != "assistant":
522
+ continue
523
+ t = _assistant_text(event)
524
+ if t:
525
+ decoded.append(t)
526
+ return _extract_smoke_baseline_red_from_text("\n".join(decoded))
527
+
528
+ return _extract_smoke_baseline_red_from_text(text)
529
+
530
+
414
531
  def _detect_warnings(progress: WorkerProgress, all_updates: list[str]) -> None:
415
532
  if progress.stuck:
416
533
  progress.warnings.append("worker is STUCK and waiting for guidance")
@@ -193,6 +193,12 @@ KIND_BUILD = "build"
193
193
  KIND_SUITE = "suite"
194
194
  KIND_TIMEOUT = "timeout"
195
195
  KIND_INFRA = "infra"
196
+ #: The suite RAN and failed, but identically on the merge-base (#2170) — so it
197
+ #: is a statement about the machine's baseline, not about any branch. Distinct
198
+ #: from :data:`KIND_INFRA` (where the suite never ran at all) and from
199
+ #: :data:`KIND_SUITE` (where the branch broke something): the operator action is
200
+ #: "fix the baseline", not "fix the runner environment" or "fix the branch".
201
+ KIND_BASELINE_RED = "baseline_red"
196
202
 
197
203
  #: Composite failure kinds a per-entry pass can actually narrow (#1715).
198
204
  NARROWABLE_KINDS = frozenset({
@@ -221,6 +227,20 @@ SHELL_NOT_FOUND_EXIT = 127
221
227
  #: relabel real red builds as infrastructure — the dangerous direction.
222
228
  INFRA_OUTPUT_MARKERS = ("TOOLCHAIN MISSING", "RESULT: INFRA")
223
229
 
230
+ #: What ``coord-test-runner.sh`` prints when every failure in a suite reproduces
231
+ #: on the merge-base (#2170), and the exit code it pairs with it.
232
+ #:
233
+ #: Same "the marker, not the number" discipline as :data:`INFRA_OUTPUT_MARKERS`
234
+ #: above, and the same line-start anchoring: an arbitrary repo's command is free
235
+ #: to exit 4 for a real failure (pytest itself uses 4 for a usage error), so the
236
+ #: number alone must never be enough to excuse a red suite.
237
+ BASELINE_RED_OUTPUT_MARKER = "RESULT: BASELINE-RED"
238
+
239
+ #: Exit code ``scripts/coord-test-runner.sh`` reserves for baseline-red.
240
+ #: Documented, and — like :data:`RUNNER_INFRA_EXIT` — deliberately not trusted
241
+ #: on its own.
242
+ RUNNER_BASELINE_RED_EXIT = 4
243
+
224
244
 
225
245
  def is_infrastructure_failure(returncode: int, output: str) -> bool:
226
246
  """True when a build/test command never actually ran the suite (#1814).
@@ -270,6 +290,53 @@ def is_infrastructure_failure(returncode: int, output: str) -> bool:
270
290
  )
271
291
 
272
292
 
293
+ def is_baseline_red_failure(returncode: int, output: str) -> bool:
294
+ """True when a test command failed but every failure also fails on the
295
+ merge-base (#2170) — i.e. the machine's baseline is red.
296
+
297
+ ONE signal only, and it is the runner's own explicit statement: a
298
+ :data:`BASELINE_RED_OUTPUT_MARKER` line. :data:`RUNNER_BASELINE_RED_EXIT` is
299
+ NOT a signal on its own, for the same reason exit 3 isn't for infrastructure
300
+ — an arbitrary repo's `test_command` may exit 4 for a perfectly genuine
301
+ failure (pytest's own usage-error code is 4), and keying on the number would
302
+ relabel real red suites as "not the branch's fault". That is the dangerous
303
+ direction: it is the one that could eventually launder a regression into a
304
+ merge, so it must require the runner to have said so in words.
305
+
306
+ Line-anchored rather than a bare substring search, exactly as
307
+ :func:`is_infrastructure_failure` documents at length: for this repo the
308
+ ``test_command`` IS that runner's pytest arm, so the suite contains tests
309
+ (``tests/test_coord_test_runner_baseline.py``, and this module's own) whose
310
+ assertion text and parametrize ids embed this marker verbatim. Those only
311
+ ever appear indented (``E ``/spaces) or prefixed (``FAILED ``), never at
312
+ the start of a line.
313
+
314
+ ``returncode`` is accepted and ignored for signature symmetry with
315
+ :func:`is_infrastructure_failure`; callers pass what they have.
316
+ """
317
+ lines = (output or "").splitlines()
318
+ return any(line.startswith(BASELINE_RED_OUTPUT_MARKER) for line in lines)
319
+
320
+
321
+ def _baseline_red_reason(stage: str, returncode: int) -> str:
322
+ """Operator-facing wording for a red baseline (#2170).
323
+
324
+ Must not say "SUITE FAILED" (the operator would debug a branch that is
325
+ fine), must not say "could not run" (it ran, and told us something), and
326
+ must name the BASELINE as the thing to fix. The failure that motivated it
327
+ read as a branch problem for months and was not one.
328
+ """
329
+ return (
330
+ f"revalidation reports a RED BASELINE — the {stage} command failed "
331
+ f"(exit {returncode}), but every failure reproduces on the merge-base "
332
+ "in this environment, so the branches made nothing worse and NONE of "
333
+ "them was judged. Nothing merged, nothing marked failed, no verdict "
334
+ "changed. Fix the baseline (or this machine's environment) and re-run: "
335
+ "a machine whose suite cannot go green cannot produce a Test verdict "
336
+ "for any branch (#2170)"
337
+ )
338
+
339
+
273
340
  @dataclass
274
341
  class RevalidationResult:
275
342
  """Outcome of one composite revalidation run.
@@ -698,12 +765,21 @@ def revalidate(
698
765
  if built.returncode != 0:
699
766
  build_output = (built.stdout or "") + "\n" + (built.stderr or "")
700
767
  infra = is_infrastructure_failure(built.returncode, build_output)
768
+ baseline_red = not infra and is_baseline_red_failure(
769
+ built.returncode, build_output
770
+ )
701
771
  return RevalidationResult(
702
772
  ok=False,
703
- kind=KIND_INFRA if infra else KIND_BUILD,
773
+ kind=(
774
+ KIND_INFRA if infra
775
+ else KIND_BASELINE_RED if baseline_red
776
+ else KIND_BUILD
777
+ ),
704
778
  reason=(
705
779
  _infra_reason("build", built.returncode)
706
780
  if infra
781
+ else _baseline_red_reason("build", built.returncode)
782
+ if baseline_red
707
783
  else (
708
784
  "revalidation BUILD FAILED against the current base "
709
785
  f"(exit {built.returncode}) — every candidate stays "
@@ -729,12 +805,21 @@ def revalidate(
729
805
  if tested.returncode != 0:
730
806
  test_output = (tested.stdout or "") + "\n" + (tested.stderr or "")
731
807
  infra = is_infrastructure_failure(tested.returncode, test_output)
808
+ baseline_red = not infra and is_baseline_red_failure(
809
+ tested.returncode, test_output
810
+ )
732
811
  return RevalidationResult(
733
812
  ok=False,
734
- kind=KIND_INFRA if infra else KIND_SUITE,
813
+ kind=(
814
+ KIND_INFRA if infra
815
+ else KIND_BASELINE_RED if baseline_red
816
+ else KIND_SUITE
817
+ ),
735
818
  reason=(
736
819
  _infra_reason("suite", tested.returncode)
737
820
  if infra
821
+ else _baseline_red_reason("suite", tested.returncode)
822
+ if baseline_red
738
823
  else (
739
824
  "revalidation SUITE FAILED against the current base "
740
825
  f"(exit {tested.returncode}) — every candidate stays "
@@ -983,6 +1068,19 @@ def format_batch(batch: BatchRevalidationResult) -> list[str]:
983
1068
  )
984
1069
  return lines
985
1070
 
1071
+ if batch.composite.kind == KIND_BASELINE_RED:
1072
+ # #2170: the OTHER failure mode that is not about the branches. Same
1073
+ # stdout-as-well-as-stderr treatment as INFRA above and for the same
1074
+ # reason — but a different instruction, because the fix is in the
1075
+ # baseline (or this machine's environment), not the runner's toolchain.
1076
+ lines.append(
1077
+ " --revalidate: RED BASELINE — the suite failed, but identically "
1078
+ "on the merge-base, so no branch was judged. Nothing merged, "
1079
+ "nothing marked failed, no verdict changed; every candidate is "
1080
+ "exactly as it was. Fix the baseline, then re-run --revalidate."
1081
+ )
1082
+ return lines
1083
+
986
1084
  if not batch.fell_back:
987
1085
  return lines
988
1086
 
@@ -1075,6 +1173,7 @@ __all__ = [
1075
1173
  "DEFAULT_TIMEOUT_SECONDS",
1076
1174
  "KIND_BUILD",
1077
1175
  "KIND_COMPOSE",
1176
+ "KIND_BASELINE_RED",
1078
1177
  "KIND_INFRA",
1079
1178
  "KIND_OK",
1080
1179
  "KIND_SETUP",
@@ -1083,6 +1182,7 @@ __all__ = [
1083
1182
  "MAX_REVALIDATION_BATCH",
1084
1183
  "NARROWABLE_KINDS",
1085
1184
  "NO_SUITE_RAN_KINDS",
1185
+ "RUNNER_BASELINE_RED_EXIT",
1086
1186
  "RUNNER_INFRA_EXIT",
1087
1187
  "SHELL_NOT_FOUND_EXIT",
1088
1188
  "BatchRevalidationResult",
@@ -1093,6 +1193,7 @@ __all__ = [
1093
1193
  "format_batch",
1094
1194
  "format_failure",
1095
1195
  "group_candidates",
1196
+ "is_baseline_red_failure",
1096
1197
  "is_infrastructure_failure",
1097
1198
  "local_repo_dir",
1098
1199
  "revalidate",
@@ -57,6 +57,12 @@ from coord import github_ops
57
57
  from coord.config import Config, SmokeRule, SmokeTestsConfig
58
58
  from coord.dispatch import AGENT_PORT
59
59
  from coord.models import WORK_LIKE_TYPES, Assignment, Board, Machine
60
+ # #2170: the SAME marker/exit-code convention `scripts/coord-test-runner.sh`
61
+ # and `coord.revalidate` use for a red baseline — imported (not re-literalled)
62
+ # so the dispatched smoke agent's instructions can never drift from what the
63
+ # runner actually emits, or from what `coord.notify` parses back out of the
64
+ # agent's own transcript (see `_smoke_baseline_red_reason` there).
65
+ from coord.revalidate import BASELINE_RED_OUTPUT_MARKER, RUNNER_BASELINE_RED_EXIT
60
66
 
61
67
  logger = logging.getLogger("coord.smoke")
62
68
 
@@ -75,7 +81,7 @@ logger = logging.getLogger("coord.smoke")
75
81
  _TEST_MODE_SKIP_LOGGED: set[str] = set()
76
82
 
77
83
 
78
- SMOKE_SYSTEM_PROMPT = """\
84
+ SMOKE_SYSTEM_PROMPT = f"""\
79
85
  You are a smoke-test runner dispatched by the coordinator. \
80
86
  Your only job: pull the branch, run the smoke command, report pass/fail.
81
87
 
@@ -89,8 +95,9 @@ Rules:
89
95
  - Do NOT run `gh` commands. The coordinator owns GitHub interactions.
90
96
  - You MAY run git, build commands, and test commands.
91
97
  - Exit code is what the coordinator reads — exit 0 on pass, non-zero on \
92
- fail. Print a final line `SMOKE: pass` or `SMOKE: fail <one-line reason>` \
93
- before exiting so logs are readable.
98
+ fail. Print a final line `SMOKE: pass`, `SMOKE: fail <one-line reason>`, or \
99
+ `SMOKE: baseline-red <one-line reason>` (see step 4) before exiting so logs \
100
+ are readable.
94
101
 
95
102
  Where you are:
96
103
  - You are in a dedicated git worktree created for this run. Every git command \
@@ -105,7 +112,19 @@ Steps:
105
112
  briefing) — in your worktree, never in the base checkout.
106
113
  2. Run the smoke command from the briefing. Capture stdout/stderr.
107
114
  3. If it exits 0 → print `SMOKE: pass` and exit 0.
108
- 4. If it fails print `SMOKE: fail <short reason>` and exit non-zero.
115
+ 4. If it exits {RUNNER_BASELINE_RED_EXIT} AND its output contains a line \
116
+ starting with literal text `{BASELINE_RED_OUTPUT_MARKER}` (#2170) — the smoke \
117
+ command already re-ran its own failures against the merge-base in this same \
118
+ environment and found every one of them fails there too. That is a statement \
119
+ about THIS MACHINE, not the branch: do NOT report it as `SMOKE: fail`, and do \
120
+ NOT report it as `SMOKE: pass` either (that would hide a red baseline). Print \
121
+ `SMOKE: baseline-red <one-line reason>` (reuse the runner's own \
122
+ `{BASELINE_RED_OUTPUT_MARKER}` line as the reason) and exit \
123
+ {RUNNER_BASELINE_RED_EXIT} yourself, matching the smoke command's own exit \
124
+ code.
125
+ 5. Otherwise (any other non-zero exit, or a failure with no \
126
+ `{BASELINE_RED_OUTPUT_MARKER}` line) → print `SMOKE: fail <short reason>` and \
127
+ exit non-zero (any code other than 0 or {RUNNER_BASELINE_RED_EXIT}).
109
128
  """
110
129
 
111
130