code-coordinator 0.5.97__tar.gz → 0.5.98__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 (841) hide show
  1. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/code_coordinator.egg-info/SOURCES.txt +1 -0
  4. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/code_coordinator.egg-info/scm_file_list.json +1 -0
  5. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/code_coordinator.egg-info/scm_version.json +2 -2
  6. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/reconcile.py +269 -6
  7. code_coordinator-0.5.98/tests/test_reconcile_no_agent_record.py +538 -0
  8. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/.claude/commands/board.md +0 -0
  9. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/.claude/commands/complete-session.md +0 -0
  10. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/.claude/commands/coordinator.md +0 -0
  11. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/.githooks/_lib.sh +0 -0
  12. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/.githooks/post-checkout +0 -0
  13. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/.githooks/post-commit +0 -0
  14. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/.githooks/post-merge +0 -0
  15. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  16. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/.github/coord-ci-acceptance.yml +0 -0
  17. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/.github/workflows/auto-release.yml +0 -0
  18. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/.github/workflows/cargo-test.yml +0 -0
  19. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/.github/workflows/publish.yml +0 -0
  20. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/.github/workflows/release-tui.yml +0 -0
  21. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/.github/workflows/test.yml +0 -0
  22. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/.gitignore +0 -0
  23. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/CLAUDE.md +0 -0
  24. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/GOAL.md +0 -0
  25. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/LICENSE +0 -0
  26. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/MANIFEST.in +0 -0
  27. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/README.md +0 -0
  28. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/code_coordinator.egg-info/dependency_links.txt +0 -0
  29. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/code_coordinator.egg-info/entry_points.txt +0 -0
  30. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/code_coordinator.egg-info/requires.txt +0 -0
  31. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/code_coordinator.egg-info/top_level.txt +0 -0
  32. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/__init__.py +0 -0
  33. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/_board_mapping.py +0 -0
  34. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/acceptance.py +0 -0
  35. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/acceptance_drivers.py +0 -0
  36. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/agent.py +0 -0
  37. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/agent_app.py +0 -0
  38. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/agent_update.py +0 -0
  39. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/agents/opencode/.gitignore +0 -0
  40. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/agents/opencode/agents/work.md +0 -0
  41. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/agents/opencode/routing.jsonc +0 -0
  42. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/audit.py +0 -0
  43. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/auto_loop.py +0 -0
  44. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/block_log.py +0 -0
  45. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/board_bool_guard.py +0 -0
  46. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/board_service.py +0 -0
  47. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/board_wire.py +0 -0
  48. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/brain.py +0 -0
  49. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/branch_model.py +0 -0
  50. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/bug_intake.py +0 -0
  51. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/cargo_cache.py +0 -0
  52. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/ci_github.py +0 -0
  53. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/ci_store.py +0 -0
  54. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/claim.py +0 -0
  55. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/cli.py +0 -0
  56. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/client.py +0 -0
  57. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/commands/__init__.py +0 -0
  58. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/commands/_common.py +0 -0
  59. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/commands/acceptance.py +0 -0
  60. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/commands/agent_ops.py +0 -0
  61. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/commands/audit.py +0 -0
  62. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/commands/chat.py +0 -0
  63. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/commands/dispatch.py +0 -0
  64. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/commands/dispatch_workers.py +0 -0
  65. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/commands/drive.py +0 -0
  66. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/commands/drive_queue.py +0 -0
  67. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/commands/gate_a.py +0 -0
  68. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/commands/gates.py +0 -0
  69. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/commands/issues.py +0 -0
  70. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/commands/lifecycle.py +0 -0
  71. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/commands/merge.py +0 -0
  72. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/commands/milestone.py +0 -0
  73. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/commands/plan_followup.py +0 -0
  74. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/commands/plans.py +0 -0
  75. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/commands/portal.py +0 -0
  76. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/commands/release.py +0 -0
  77. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/commands/repo.py +0 -0
  78. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/commands/report.py +0 -0
  79. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/commands/review.py +0 -0
  80. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/commands/scorecard.py +0 -0
  81. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/commands/sessions.py +0 -0
  82. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/commands/setup.py +0 -0
  83. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/commands/status.py +0 -0
  84. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/commands/terminal.py +0 -0
  85. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/commands/test_gate.py +0 -0
  86. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/commands/tui.py +0 -0
  87. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/comments.py +0 -0
  88. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/config.py +0 -0
  89. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/conflict_fix.py +0 -0
  90. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dao.py +0 -0
  91. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/__init__.py +0 -0
  92. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/fixture.py +0 -0
  93. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/index.html +0 -0
  94. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/server.py +0 -0
  95. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/terminal.py +0 -0
  96. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/.gitignore +0 -0
  97. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/components.json +0 -0
  98. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/dist/assets/Gallery-Cq84itDE.js +0 -0
  99. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
  100. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/dist/assets/Terminal-DOXLcMue.js +0 -0
  101. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/dist/assets/index-DHn-RIJ8.js +0 -0
  102. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
  103. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
  104. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
  105. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
  106. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
  107. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/dist/index.html +0 -0
  108. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
  109. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/dist/sw.js +0 -0
  110. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
  111. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
  112. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
  113. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
  114. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
  115. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
  116. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
  117. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
  118. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
  119. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
  120. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/eslint.config.js +0 -0
  121. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/index.html +0 -0
  122. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
  123. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/package-lock.json +0 -0
  124. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/package.json +0 -0
  125. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
  126. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/playwright.config.ts +0 -0
  127. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/postcss.config.js +0 -0
  128. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
  129. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
  130. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
  131. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/src/App.tsx +0 -0
  132. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/src/api/client.ts +0 -0
  133. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/src/api/generated.ts +0 -0
  134. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
  135. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
  136. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
  137. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
  138. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
  139. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
  140. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
  141. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
  142. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
  143. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
  144. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
  145. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
  146. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
  147. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
  148. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
  149. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
  150. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
  151. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
  152. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
  153. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
  154. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
  155. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
  156. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
  157. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
  158. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
  159. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
  160. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
  161. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
  162. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
  163. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
  164. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
  165. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
  166. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
  167. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
  168. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/src/index.css +0 -0
  169. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
  170. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
  171. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/src/main.tsx +0 -0
  172. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
  173. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
  174. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
  175. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
  176. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
  177. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
  178. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
  179. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
  180. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
  181. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
  182. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
  183. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
  184. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
  185. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
  186. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
  187. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
  188. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
  189. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
  190. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
  191. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
  192. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
  193. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/src/test-setup.ts +0 -0
  194. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
  195. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/tailwind.config.js +0 -0
  196. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/tsconfig.json +0 -0
  197. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/tsconfig.node.json +0 -0
  198. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dashboard/webapp/vite.config.ts +0 -0
  199. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/db.py +0 -0
  200. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dead_end.py +0 -0
  201. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/deploy/README.md +0 -0
  202. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/deploy/coord-agent.service +0 -0
  203. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/deploy/coord-db-backup.service +0 -0
  204. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/deploy/coord-db-backup.sh +0 -0
  205. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/deploy/coord-db-backup.timer +0 -0
  206. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/deploy/coord-drive-queue.service +0 -0
  207. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/deploy/coord-drive-queue.timer +0 -0
  208. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/deploy/coord-notify.service +0 -0
  209. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/deploy/coord-notify.timer +0 -0
  210. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/deploy/coord-release-propagate.service +0 -0
  211. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/deploy/coord-release-propagate.timer +0 -0
  212. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/deploy/coord-release-window.service +0 -0
  213. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/deploy/coord-release-window.timer +0 -0
  214. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/deploy/coord-serve.service +0 -0
  215. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/deploy/coord-web-dist-build.service +0 -0
  216. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/deploy/coord-web-dist-build.timer +0 -0
  217. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/deploy/coord-web.service +0 -0
  218. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/deploy_manifest.py +0 -0
  219. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/deploy_units.py +0 -0
  220. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/deps.py +0 -0
  221. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/diagnose.py +0 -0
  222. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dispatch.py +0 -0
  223. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/dist_name.py +0 -0
  224. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/drive.py +0 -0
  225. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/drive_queue.py +0 -0
  226. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/drive_state.py +0 -0
  227. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/events.py +0 -0
  228. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/failure_class.py +0 -0
  229. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/filelock.py +0 -0
  230. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/fleet_config_health.py +0 -0
  231. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/freshness.py +0 -0
  232. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/gate_a.py +0 -0
  233. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/gate_b.py +0 -0
  234. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/gate_snapshot.py +0 -0
  235. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/gates.py +0 -0
  236. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/github_ops.py +0 -0
  237. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/goal.py +0 -0
  238. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/graph_health.py +0 -0
  239. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/health/__init__.py +0 -0
  240. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/health/aggregate.py +0 -0
  241. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/health/checks/__init__.py +0 -0
  242. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/health/checks/agent_install.py +0 -0
  243. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/health/checks/cargo_targets.py +0 -0
  244. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/health/checks/claude_binary.py +0 -0
  245. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/health/checks/deploy_lane_facts.py +0 -0
  246. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/health/checks/disk.py +0 -0
  247. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/health/checks/fleet_board.py +0 -0
  248. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  249. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/health/checks/fleet_phantom.py +0 -0
  250. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/health/checks/fleet_unit_drift.py +0 -0
  251. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/health/checks/graph.py +0 -0
  252. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/health/checks/graphify_cli.py +0 -0
  253. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/health/checks/index_lock.py +0 -0
  254. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/health/checks/plan_usage.py +0 -0
  255. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/health/checks/repo_state.py +0 -0
  256. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/health/checks/spawned_coord.py +0 -0
  257. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/health/checks/timer_active.py +0 -0
  258. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/health/checks/toolchain.py +0 -0
  259. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/health/checks/unit_drift.py +0 -0
  260. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/health/checks/unit_enablement.py +0 -0
  261. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/health/checks/worktrees.py +0 -0
  262. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/health/cli.py +0 -0
  263. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/health/context.py +0 -0
  264. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/health/fleet_snapshot.py +0 -0
  265. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/health/models.py +0 -0
  266. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/health/pypi.py +0 -0
  267. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/health/registry.py +0 -0
  268. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/health/render.py +0 -0
  269. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/health/units.py +0 -0
  270. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/hooks.py +0 -0
  271. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/housekeeping.py +0 -0
  272. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/interactive.py +0 -0
  273. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/issue_store.py +0 -0
  274. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/liveness_auditor.py +0 -0
  275. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/machine_pause.py +0 -0
  276. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/merge_queue.py +0 -0
  277. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/milestone_chat.py +0 -0
  278. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/milestone_dispatch.py +0 -0
  279. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/milestone_gate.py +0 -0
  280. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/milestone_order.py +0 -0
  281. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/mock_author.py +0 -0
  282. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/models.py +0 -0
  283. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/network.py +0 -0
  284. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/new_issue_chat.py +0 -0
  285. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/notifier/__init__.py +0 -0
  286. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/notifier/baseline.py +0 -0
  287. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/notifier/cli.py +0 -0
  288. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/notifier/collect.py +0 -0
  289. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/notifier/digest.py +0 -0
  290. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/notifier/models.py +0 -0
  291. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/notifier/predicate.py +0 -0
  292. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/notifier/service.py +0 -0
  293. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/notifier/store.py +0 -0
  294. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/notifier/transport.py +0 -0
  295. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/notify.py +0 -0
  296. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/openapi.py +0 -0
  297. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/overlap_fence.py +0 -0
  298. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/overlap_predict.py +0 -0
  299. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/parentage.py +0 -0
  300. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/parentage_github.py +0 -0
  301. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/pipeline.py +0 -0
  302. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/plan_parser.py +0 -0
  303. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/plans.py +0 -0
  304. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/platform_paths.py +0 -0
  305. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/portal_bridge.py +0 -0
  306. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/portal_store.py +0 -0
  307. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/portal_sync.py +0 -0
  308. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/pr_body_lint.py +0 -0
  309. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/prereqs.py +0 -0
  310. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/progress.py +0 -0
  311. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/providers/__init__.py +0 -0
  312. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/providers/base.py +0 -0
  313. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/providers/claude.py +0 -0
  314. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/providers/claude_pty.py +0 -0
  315. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/providers/opencode.py +0 -0
  316. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/refine_chat.py +0 -0
  317. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/release_cordon.py +0 -0
  318. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/release_propagate.py +0 -0
  319. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/release_verify.py +0 -0
  320. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/release_window.py +0 -0
  321. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/repo_edit.py +0 -0
  322. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/repo_onboard.py +0 -0
  323. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/reports.py +0 -0
  324. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/revalidate.py +0 -0
  325. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/review.py +0 -0
  326. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/scorecard.py +0 -0
  327. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/serve_app.py +0 -0
  328. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/skills/update-issue/SKILL.md +0 -0
  329. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/smoke.py +0 -0
  330. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/spend_ceiling.py +0 -0
  331. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/split_work.py +0 -0
  332. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/stage_projection.py +0 -0
  333. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/state.py +0 -0
  334. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/test_author.py +0 -0
  335. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/test_chat.py +0 -0
  336. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/test_orchestrator.py +0 -0
  337. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/test_report.py +0 -0
  338. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/tui_release.py +0 -0
  339. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/usage.py +0 -0
  340. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/usage_limits.py +0 -0
  341. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/usage_rollup.py +0 -0
  342. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coord/worker_events.py +0 -0
  343. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/coordinator.example.yml +0 -0
  344. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/deploy/coord-agent.service +0 -0
  345. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/deploy/coord-db-backup.service +0 -0
  346. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/deploy/coord-db-backup.sh +0 -0
  347. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/deploy/coord-db-backup.timer +0 -0
  348. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/deploy/coord-drive-queue.service +0 -0
  349. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/deploy/coord-drive-queue.timer +0 -0
  350. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/deploy/coord-notify.service +0 -0
  351. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/deploy/coord-notify.timer +0 -0
  352. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/deploy/coord-release-propagate.service +0 -0
  353. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/deploy/coord-release-propagate.timer +0 -0
  354. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/deploy/coord-release-window.service +0 -0
  355. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/deploy/coord-release-window.timer +0 -0
  356. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/deploy/coord-serve.service +0 -0
  357. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/deploy/coord-web-dist-build.service +0 -0
  358. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/deploy/coord-web-dist-build.sh +0 -0
  359. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/deploy/coord-web-dist-build.timer +0 -0
  360. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/deploy/coord-web-rollback.sh +0 -0
  361. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/deploy/coord-web.service +0 -0
  362. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/deploy/node-shim.sh +0 -0
  363. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/docs/AGENT_OPERATIONS.md +0 -0
  364. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/docs/ARCHITECTURE.md +0 -0
  365. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/docs/ARCH_SECURITY_GATES.md +0 -0
  366. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/docs/COCKPIT.md +0 -0
  367. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/docs/CONTROL_CENTER.md +0 -0
  368. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/docs/COST_DISCIPLINE.md +0 -0
  369. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/docs/CROSS_PLATFORM.md +0 -0
  370. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/docs/CUSTOMER_PORTAL.md +0 -0
  371. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/docs/DRIVE_QUEUE.md +0 -0
  372. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/docs/EPHEMERAL_WORKERS.md +0 -0
  373. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/docs/FORGE_MIGRATION.md +0 -0
  374. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/docs/GRAPHIFY_SETUP.md +0 -0
  375. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/docs/ISSUE_GUIDANCE.md +0 -0
  376. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/docs/MAC_MINI.md +0 -0
  377. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  378. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/docs/NOTIFIER.md +0 -0
  379. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/docs/OPENCODE_VERIFICATION.md +0 -0
  380. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/docs/OPERATING_GOTCHAS.md +0 -0
  381. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/docs/ORACLE_LOOP.md +0 -0
  382. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/docs/PHONE_WEBAPP.md +0 -0
  383. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/docs/PIPELINE_V2.md +0 -0
  384. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/docs/PLATFORM_EVOLUTION.md +0 -0
  385. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/docs/SECOND_BACKEND.md +0 -0
  386. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/docs/STORE_SERVICE.md +0 -0
  387. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  388. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/docs/WEB_CONTROL_CENTER.md +0 -0
  389. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/docs/mocks/web/README.md +0 -0
  390. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/docs/mocks/web/_tokens.css +0 -0
  391. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/docs/mocks/web/issue-detail.html +0 -0
  392. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/docs/mocks/web/pipeline-narrow.html +0 -0
  393. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/docs/mocks/web/pipeline-wide.html +0 -0
  394. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/graphify-out/.gitignore +0 -0
  395. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/install-agent.sh +0 -0
  396. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/pyproject.toml +0 -0
  397. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/scripts/audit_review_verdict_overrides.py +0 -0
  398. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  399. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/scripts/azure-workers/build-worker-image.sh +0 -0
  400. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/scripts/azure-workers/coordinator-machine.py +0 -0
  401. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/scripts/azure-workers/epic-down.sh +0 -0
  402. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/scripts/azure-workers/epic-up.sh +0 -0
  403. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/scripts/azure-workers/preflight.sh +0 -0
  404. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/scripts/azure-workers/provision-worker.sh +0 -0
  405. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  406. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  407. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/scripts/azure-workers/verify-github-token.sh +0 -0
  408. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/scripts/codegen.py +0 -0
  409. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/scripts/coord-test-runner.sh +0 -0
  410. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/scripts/drive-batch.sh +0 -0
  411. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/scripts/gen_board_fixture.py +0 -0
  412. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/scripts/next_release_tag.py +0 -0
  413. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/scripts/run_tests_in_populated_home.sh +0 -0
  414. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/scripts/run_tests_without_gh.sh +0 -0
  415. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/scripts/smoke_437_interactive.py +0 -0
  416. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/scripts/verify_878_review_capture.py +0 -0
  417. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/scripts/verify_release_published.py +0 -0
  418. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/scripts/verify_release_wheel.py +0 -0
  419. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/setup.cfg +0 -0
  420. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/SMOKE_SET.md +0 -0
  421. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/__init__.py +0 -0
  422. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  423. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/acceptance/ms-33/contract.md +0 -0
  424. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/acceptance/ms-33/manifest.yml +0 -0
  425. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  426. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  427. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  428. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  429. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/acceptance/ms-37/conftest.py +0 -0
  430. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/acceptance/ms-37/contract.md +0 -0
  431. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/acceptance/ms-37/manifest.yml +0 -0
  432. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  433. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  434. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/acceptance/ms-38/contract.md +0 -0
  435. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/acceptance/ms-38/manifest.yml +0 -0
  436. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  437. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  438. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  439. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  440. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  441. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  442. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  443. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  444. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  445. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  446. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/acceptance/ms-51/contract.md +0 -0
  447. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  448. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  449. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/acceptance/ms-51/manifest.yml +0 -0
  450. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  451. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/acceptance/ms-51/tsconfig.json +0 -0
  452. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  453. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/conftest.py +0 -0
  454. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/fixtures/board-pipeline-basic.json +0 -0
  455. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  456. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  457. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  458. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/fixtures/playwright/all_pass.json +0 -0
  459. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  460. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/fixtures/playwright/mixed_fail.json +0 -0
  461. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  462. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  463. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/fixtures/playwright/skip.json +0 -0
  464. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/fixtures/playwright/truncated.json +0 -0
  465. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  466. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  467. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  468. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  469. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  470. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  471. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  472. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  473. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_acceptance.py +0 -0
  474. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_acceptance_drivers.py +0 -0
  475. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_agent.py +0 -0
  476. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_agent_api_error.py +0 -0
  477. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_agent_app.py +0 -0
  478. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_agent_branch_base.py +0 -0
  479. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_agent_branch_capture.py +0 -0
  480. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_agent_config_free_1712.py +0 -0
  481. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_agent_deploy_units_endpoint.py +0 -0
  482. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_agent_dirty_worktree.py +0 -0
  483. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_agent_graph_self_heal.py +0 -0
  484. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_agent_health_h3.py +0 -0
  485. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_agent_idle_restart.py +0 -0
  486. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_agent_push_failure.py +0 -0
  487. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_agent_reap.py +0 -0
  488. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_agent_repos_and_pull.py +0 -0
  489. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_agent_restart_services_endpoint.py +0 -0
  490. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_agent_startup_diagnostics.py +0 -0
  491. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_agent_update.py +0 -0
  492. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_agent_update_bluegreen.py +0 -0
  493. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_agent_usage_limit.py +0 -0
  494. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_agent_zero_commit.py +0 -0
  495. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_ambient_home_isolation.py +0 -0
  496. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_approve_reject_plan.py +0 -0
  497. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_approve_usage_gate.py +0 -0
  498. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_assignment_already_recorded_daemon.py +0 -0
  499. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_audit_log.py +0 -0
  500. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_audit_outcome.py +0 -0
  501. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_audit_query.py +0 -0
  502. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_auto_loop.py +0 -0
  503. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_auto_release_publish_2035.py +0 -0
  504. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_base_checkout_restore.py +0 -0
  505. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_block_log.py +0 -0
  506. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_board_cap_762.py +0 -0
  507. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_board_fixture.py +0 -0
  508. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_board_read_path.py +0 -0
  509. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_board_service.py +0 -0
  510. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_board_state.py +0 -0
  511. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_board_wire.py +0 -0
  512. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_brain.py +0 -0
  513. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_branch_model.py +0 -0
  514. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_bug_intake.py +0 -0
  515. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_build_worker_image_env_update.py +0 -0
  516. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_cargo_cache.py +0 -0
  517. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_ci_acceptance_gate_1950.py +0 -0
  518. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_ci_parity_2091.py +0 -0
  519. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_ci_store.py +0 -0
  520. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_claim.py +0 -0
  521. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_cli_acceptance.py +0 -0
  522. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_cli_assign.py +0 -0
  523. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  524. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_cli_assign_interactive_remote.py +0 -0
  525. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_cli_assign_provider.py +0 -0
  526. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  527. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_cli_audit.py +0 -0
  528. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_cli_chat_continue.py +0 -0
  529. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_cli_diagnose_config_provenance.py +0 -0
  530. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_cli_diagnose_graph.py +0 -0
  531. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_cli_doctor.py +0 -0
  532. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_cli_doctor_config_free_1801.py +0 -0
  533. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  534. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_cli_drive.py +0 -0
  535. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_cli_drive_queue.py +0 -0
  536. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_cli_escalate.py +0 -0
  537. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_cli_fix_headless_review.py +0 -0
  538. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_cli_gate_a.py +0 -0
  539. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_cli_install_drift.py +0 -0
  540. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_cli_install_skills.py +0 -0
  541. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_cli_issue_create_label.py +0 -0
  542. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_cli_issue_reopen.py +0 -0
  543. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_cli_merge.py +0 -0
  544. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_cli_milestone_assign.py +0 -0
  545. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_cli_milestone_capture.py +0 -0
  546. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_cli_milestone_chat_add_child.py +0 -0
  547. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_cli_milestone_dispatch.py +0 -0
  548. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_cli_milestone_gate_b.py +0 -0
  549. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_cli_milestone_gate_c.py +0 -0
  550. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_cli_milestone_order.py +0 -0
  551. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  552. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_cli_milestone_ship.py +0 -0
  553. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_cli_network.py +0 -0
  554. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_cli_new_issue_chat.py +0 -0
  555. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_cli_plans.py +0 -0
  556. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_cli_portal.py +0 -0
  557. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_cli_pull_artifact.py +0 -0
  558. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_cli_queue.py +0 -0
  559. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_cli_reattach_sessions.py +0 -0
  560. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_cli_refine_board.py +0 -0
  561. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_cli_release_preflight.py +0 -0
  562. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_cli_release_propagate.py +0 -0
  563. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_cli_release_window.py +0 -0
  564. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_cli_repo_2220.py +0 -0
  565. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_cli_scorecard.py +0 -0
  566. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_cli_set_review_findings.py +0 -0
  567. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_cli_status_advisory_terminal.py +0 -0
  568. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_cli_status_merge_queue.py +0 -0
  569. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_cli_status_provider.py +0 -0
  570. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_cli_status_review_finalizing.py +0 -0
  571. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_cli_status_test_failed_tag.py +0 -0
  572. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_cli_status_usage_limit.py +0 -0
  573. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_cli_sync_comments_873.py +0 -0
  574. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_cli_test_plan.py +0 -0
  575. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_cli_track.py +0 -0
  576. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_cli_tui_update.py +0 -0
  577. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_cli_wait.py +0 -0
  578. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_client_base_install.py +0 -0
  579. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_comments.py +0 -0
  580. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_completion_summary.py +0 -0
  581. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_config.py +0 -0
  582. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_config_acceptance.py +0 -0
  583. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_config_audit.py +0 -0
  584. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_config_pricing.py +0 -0
  585. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  586. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_config_usage_gate.py +0 -0
  587. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_conflict_fix.py +0 -0
  588. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_conflict_fix_semantic.py +0 -0
  589. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_coord_test.py +0 -0
  590. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_coord_test_runner_baseline.py +0 -0
  591. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_coord_test_runner_routing.py +0 -0
  592. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_coord_test_runner_toolchain.py +0 -0
  593. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_coord_web_sse_restart_live.py +0 -0
  594. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_coordinator_machine.py +0 -0
  595. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_cross_platform_imports.py +0 -0
  596. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_dashboard.py +0 -0
  597. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_dashboard_fixture.py +0 -0
  598. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_dashboard_terminal.py +0 -0
  599. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_dashboard_terminal_live.py +0 -0
  600. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_db.py +0 -0
  601. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_dead_end.py +0 -0
  602. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_deploy_coord_db_backup.py +0 -0
  603. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_deploy_coord_web_dist.py +0 -0
  604. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_deploy_coord_web_rollback.py +0 -0
  605. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_deploy_drive_queue_unit.py +0 -0
  606. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_deploy_manifest.py +0 -0
  607. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_deploy_units_lane.py +0 -0
  608. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_deploy_web_unit.py +0 -0
  609. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_deps.py +0 -0
  610. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_diagnose.py +0 -0
  611. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_dispatch.py +0 -0
  612. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_dispatch_target_validation.py +0 -0
  613. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_dist_name.py +0 -0
  614. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_done_housekeeping.py +0 -0
  615. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_drive.py +0 -0
  616. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_drive_queue.py +0 -0
  617. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_drive_state.py +0 -0
  618. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_drive_tmux.py +0 -0
  619. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_epic_up_capability_detection.py +0 -0
  620. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  621. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_epic_up_image_provenance.py +0 -0
  622. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_errors.py +0 -0
  623. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_events.py +0 -0
  624. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_failure_class.py +0 -0
  625. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_filelock.py +0 -0
  626. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  627. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_fix_of_force_override.py +0 -0
  628. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_fleet_config_health.py +0 -0
  629. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_fleet_health_probes.py +0 -0
  630. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_fleet_health_snapshot.py +0 -0
  631. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_freshness.py +0 -0
  632. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_gate_a.py +0 -0
  633. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_gate_b.py +0 -0
  634. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_gate_snapshot_staleness.py +0 -0
  635. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_gates.py +0 -0
  636. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  637. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_generated_types_fixture.py +0 -0
  638. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_github_ops.py +0 -0
  639. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_goal.py +0 -0
  640. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_graph_health.py +0 -0
  641. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_graph_selfheal_absent_2237.py +0 -0
  642. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_handoff.py +0 -0
  643. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_health_checks.py +0 -0
  644. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_health_cli.py +0 -0
  645. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_health_cli_graph.py +0 -0
  646. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_health_config.py +0 -0
  647. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_health_context.py +0 -0
  648. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_health_deploy_lane_facts.py +0 -0
  649. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_health_incident_regression.py +0 -0
  650. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_health_pypi.py +0 -0
  651. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_health_registry.py +0 -0
  652. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_health_timer_active.py +0 -0
  653. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_health_toolchain.py +0 -0
  654. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_health_unit_drift.py +0 -0
  655. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_health_unit_enablement.py +0 -0
  656. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_hooks.py +0 -0
  657. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_human_attended_437.py +0 -0
  658. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_init.py +0 -0
  659. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_integration.py +0 -0
  660. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_interactive_briefing_echo.py +0 -0
  661. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_interactive_prefill_state.py +0 -0
  662. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_interactive_session_relaunch.py +0 -0
  663. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_interactive_test_verdict_backstop.py +0 -0
  664. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_interactive_token_attribution.py +0 -0
  665. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_interactive_worktree.py +0 -0
  666. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_issue_store_seam.py +0 -0
  667. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_liveness_auditor.py +0 -0
  668. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_liveness_notify.py +0 -0
  669. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_machine_pause.py +0 -0
  670. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_merge_queue.py +0 -0
  671. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_merge_verify.py +0 -0
  672. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_milestone_chat.py +0 -0
  673. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_milestone_dispatch.py +0 -0
  674. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_milestone_gate.py +0 -0
  675. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_milestone_order.py +0 -0
  676. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_milestone_seam.py +0 -0
  677. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_mock_author.py +0 -0
  678. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_model_tiering.py +0 -0
  679. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_models.py +0 -0
  680. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_models_config_labels.py +0 -0
  681. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_needs_attention.py +0 -0
  682. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_network.py +0 -0
  683. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_new_issue_chat.py +0 -0
  684. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_next_release_tag.py +0 -0
  685. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_no_direct_gh_calls.py +0 -0
  686. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_node_shim.py +0 -0
  687. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_notifier_baseline.py +0 -0
  688. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_notifier_cli.py +0 -0
  689. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_notifier_collect.py +0 -0
  690. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_notifier_config.py +0 -0
  691. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_notifier_drive_seam.py +0 -0
  692. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_notifier_isolation.py +0 -0
  693. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_notifier_predicate.py +0 -0
  694. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_notifier_quiet_hours.py +0 -0
  695. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_notifier_service.py +0 -0
  696. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_notify.py +0 -0
  697. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_notify_drain.py +0 -0
  698. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_openapi.py +0 -0
  699. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_operational_defaults.py +0 -0
  700. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_overlap_fence.py +0 -0
  701. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_overlap_predict.py +0 -0
  702. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_packaged_deploy_units.py +0 -0
  703. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_parentage.py +0 -0
  704. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_paste_landed.py +0 -0
  705. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_pipeline.py +0 -0
  706. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_plan_followup_approve_plan_command.py +0 -0
  707. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_plan_followup_pr_command.py +0 -0
  708. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_plan_followup_review_command.py +0 -0
  709. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_plan_only.py +0 -0
  710. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_plan_parser.py +0 -0
  711. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_platform_paths.py +0 -0
  712. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_portal_bridge.py +0 -0
  713. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_portal_config.py +0 -0
  714. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_portal_sync.py +0 -0
  715. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_pr_body_lint.py +0 -0
  716. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_prereqs.py +0 -0
  717. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_production_db_guard.py +0 -0
  718. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_progress.py +0 -0
  719. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_provider_seam.py +0 -0
  720. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_providers.py +0 -0
  721. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_providers_config_labels.py +0 -0
  722. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_providers_pty.py +0 -0
  723. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_quiet_hours.py +0 -0
  724. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_quiet_hours_store_2146.py +0 -0
  725. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_reap_merged_sessions.py +0 -0
  726. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_reap_stale_interactive_tick.py +0 -0
  727. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_reconcile_branch.py +0 -0
  728. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_reconcile_completions.py +0 -0
  729. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_reconcile_merges.py +0 -0
  730. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_reconcile_usage_limit_done.py +0 -0
  731. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_refine_chat.py +0 -0
  732. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_release_cordon_2101.py +0 -0
  733. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  734. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_release_cordon_deadlock_2240.py +0 -0
  735. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_release_propagate.py +0 -0
  736. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_release_unified_1242.py +0 -0
  737. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_release_verify.py +0 -0
  738. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_release_window.py +0 -0
  739. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_remote_auto_prune.py +0 -0
  740. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_remote_interactive_reaper.py +0 -0
  741. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_repo_edit_2220.py +0 -0
  742. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_repo_graph_fleet_2237.py +0 -0
  743. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_repo_onboard_2220.py +0 -0
  744. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_report_result_push.py +0 -0
  745. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_reports.py +0 -0
  746. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_retry.py +0 -0
  747. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_retry_advisory_1606.py +0 -0
  748. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_retry_type_1636.py +0 -0
  749. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_revalidate.py +0 -0
  750. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_review.py +0 -0
  751. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_review_end_review_without_verdict.py +0 -0
  752. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_review_parse_failure_diagnostic.py +0 -0
  753. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_review_reaffirm.py +0 -0
  754. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_review_state.py +0 -0
  755. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_review_verdict_backstop.py +0 -0
  756. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_review_verdict_override_audit.py +0 -0
  757. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_review_verdict_relay.py +0 -0
  758. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_review_zero_commits.py +0 -0
  759. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_scoped_review_wiring.py +0 -0
  760. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_scorecard.py +0 -0
  761. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_serve.py +0 -0
  762. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_serve_app_board_trim.py +0 -0
  763. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_session.py +0 -0
  764. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_slice_issue_attribution.py +0 -0
  765. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_smoke.py +0 -0
  766. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_smoke_live_checkout_restore.py +0 -0
  767. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_smoke_workflow.py +0 -0
  768. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_spend_ceiling.py +0 -0
  769. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_spend_ceiling_coordinator.py +0 -0
  770. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_split.py +0 -0
  771. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_split_work.py +0 -0
  772. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_stage_projection.py +0 -0
  773. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_stalled_pipeline.py +0 -0
  774. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_state.py +0 -0
  775. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_state_review_findings_daemon.py +0 -0
  776. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_status_fleet_footer.py +0 -0
  777. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_stop_1567.py +0 -0
  778. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_stuck.py +0 -0
  779. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_terminal_command.py +0 -0
  780. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_test_author.py +0 -0
  781. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_test_chat.py +0 -0
  782. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_test_orchestrator.py +0 -0
  783. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_test_report.py +0 -0
  784. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_test_verdict_parsing.py +0 -0
  785. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_test_verdict_transcript_floor.py +0 -0
  786. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_thin_client_board_audit.py +0 -0
  787. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_thin_client_config_load_1080.py +0 -0
  788. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_thin_client_daemon_routing_906.py +0 -0
  789. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_tmux_host.py +0 -0
  790. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_tmux_session.py +0 -0
  791. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_transcript_floor.py +0 -0
  792. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_usage.py +0 -0
  793. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_usage_limits.py +0 -0
  794. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_usage_rollup.py +0 -0
  795. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_venv_live_install_2121.py +0 -0
  796. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_version_single_source.py +0 -0
  797. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_watch.py +0 -0
  798. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_worker_events.py +0 -0
  799. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_worker_image_pin_sync.py +0 -0
  800. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_worker_safety.py +0 -0
  801. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_worker_test_scoping.py +0 -0
  802. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_worktree.py +0 -0
  803. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  804. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tui/Cargo.lock +0 -0
  805. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tui/Cargo.toml +0 -0
  806. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tui/cargo-config-local-quadraui.toml.example +0 -0
  807. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tui/src/app/audit.rs +0 -0
  808. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tui/src/app/chat.rs +0 -0
  809. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tui/src/app/data.rs +0 -0
  810. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tui/src/app/dialogs.rs +0 -0
  811. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tui/src/app/drive.rs +0 -0
  812. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tui/src/app/drive_queue.rs +0 -0
  813. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tui/src/app/escalation.rs +0 -0
  814. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tui/src/app/events.rs +0 -0
  815. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tui/src/app/fixtures.rs +0 -0
  816. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tui/src/app/fleet_health.rs +0 -0
  817. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tui/src/app/fleet_sessions.rs +0 -0
  818. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tui/src/app/fleet_terminals.rs +0 -0
  819. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tui/src/app/format.rs +0 -0
  820. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tui/src/app/milestone_dag.rs +0 -0
  821. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tui/src/app/mod.rs +0 -0
  822. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tui/src/app/msv.rs +0 -0
  823. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tui/src/app/pipeline.rs +0 -0
  824. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tui/src/app/plans.rs +0 -0
  825. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tui/src/app/render.rs +0 -0
  826. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tui/src/app/reports.rs +0 -0
  827. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tui/src/app/sessions.rs +0 -0
  828. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tui/src/app/settings_ui.rs +0 -0
  829. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tui/src/app/sidebar.rs +0 -0
  830. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tui/src/app/terminal.rs +0 -0
  831. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tui/src/app/tests.rs +0 -0
  832. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tui/src/app/types.rs +0 -0
  833. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tui/src/app/workspace.rs +0 -0
  834. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tui/src/bin/gtk.rs +0 -0
  835. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tui/src/commands.rs +0 -0
  836. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tui/src/lib.rs +0 -0
  837. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tui/src/main.rs +0 -0
  838. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tui/src/settings.rs +0 -0
  839. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tui/tests/acceptance.rs +0 -0
  840. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tui/tests/cli.rs +0 -0
  841. {code_coordinator-0.5.97 → code_coordinator-0.5.98}/tui/tests/fixtures/board_sample.json +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-coordinator
3
- Version: 0.5.97
3
+ Version: 0.5.98
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.97
3
+ Version: 0.5.98
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
@@ -674,6 +674,7 @@ tests/test_reap_stale_interactive_tick.py
674
674
  tests/test_reconcile_branch.py
675
675
  tests/test_reconcile_completions.py
676
676
  tests/test_reconcile_merges.py
677
+ tests/test_reconcile_no_agent_record.py
677
678
  tests/test_reconcile_usage_limit_done.py
678
679
  tests/test_refine_chat.py
679
680
  tests/test_release_cordon_2101.py
@@ -704,6 +704,7 @@
704
704
  "tests/test_reconcile_branch.py",
705
705
  "tests/test_reconcile_completions.py",
706
706
  "tests/test_reconcile_merges.py",
707
+ "tests/test_reconcile_no_agent_record.py",
707
708
  "tests/test_reconcile_usage_limit_done.py",
708
709
  "tests/test_refine_chat.py",
709
710
  "tests/test_release_cordon_2101.py",
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "0.5.97",
2
+ "tag": "0.5.98",
3
3
  "distance": 0,
4
- "node": "g2c2fb9bb30187ab30ecfca32a852de69332b37e9",
4
+ "node": "g57c1800a85c41bb5fbc62251d3bb942c842a6062",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-15"
@@ -10,7 +10,7 @@ import httpx
10
10
 
11
11
  from typing import TYPE_CHECKING
12
12
 
13
- from coord.config import Config
13
+ from coord.config import INTERACTIVE_SESSION_TYPES, Config
14
14
  from coord.dispatch import AGENT_PORT
15
15
  from coord.models import WORK_LIKE_TYPES, Assignment, Board, Machine
16
16
 
@@ -49,6 +49,120 @@ _AGENT_TERMINAL_STATUS = {
49
49
  }
50
50
 
51
51
 
52
+ # ── #2275: the agent has no record of this assignment ──────────────────────
53
+ #
54
+ # Pinned reason string, written verbatim to `assignments.failure_reason` when
55
+ # the no-record arm below reconciles a row. Asserted on by
56
+ # `tests/test_reconcile_no_agent_record.py` and (deliberately) the only thing
57
+ # a human or a downstream reader has to grep for to understand why a row went
58
+ # terminal without a worker verdict.
59
+ NO_AGENT_RECORD_REASON = (
60
+ "agent has no record of this assignment (present in neither its /status "
61
+ "`active` nor `completed` list) — the worker process is gone: the agent "
62
+ "restarted with its state lost, the machine rebooted, or the completion "
63
+ "rolled off the capped history before anything observed it (#2275)"
64
+ )
65
+
66
+ # Minimum age (seconds since `dispatched_at`) before the no-record arm will
67
+ # reconcile a row.
68
+ #
69
+ # The positive disproof — "in neither list" — is what makes this arm safe;
70
+ # this window is the belt to its braces, and exists for exactly one shape:
71
+ # `AgentServer.assign()` builds the worktree BEFORE taking `self._lock` to
72
+ # insert into `self._assignments` (see the identical race window called out in
73
+ # `clean_worktrees`). Any dispatch path that learns an assignment id and
74
+ # writes a `running` board row without waiting for that insert would otherwise
75
+ # hand this arm a row the agent genuinely will know about a moment later. Two
76
+ # minutes is orders of magnitude longer than that window and orders of
77
+ # magnitude shorter than the 11 hours #2208 burned, so it costs nothing real.
78
+ #
79
+ # It is NOT a restart grace window — see `reconcile_completed_assignments`'
80
+ # docstring for why an agent restart does not produce a mass reap.
81
+ _NO_RECORD_GRACE_SECONDS = 120.0
82
+
83
+
84
+ def is_attended_session(a: object) -> bool:
85
+ """True when *a* is a human-attended session, not an agent subprocess (#2275).
86
+
87
+ The exclusion that keeps the no-record arm in
88
+ :func:`reconcile_completed_assignments` from reaping live work. An
89
+ attended session is launched into tmux/a PTY by ``coord assign
90
+ --interactive`` — it is not an agent subprocess, so it appears in NEITHER
91
+ the agent's ``active`` list NOR its ``completed`` list, for its whole
92
+ life. Without this check the no-record arm would reap every attended
93
+ session the moment it started, which is the #1658 failure mode (reaping
94
+ live headless workers) pointed at a human's own terminal.
95
+
96
+ Two independent discriminators, either of which is sufficient — this is a
97
+ reaping path, so it is deliberately over-inclusive:
98
+
99
+ * ``provider_name == "claude-pty"`` — stamped by every ``--interactive``
100
+ dispatch (the same discriminator :func:`is_interactive_merge_session`
101
+ and :meth:`coord.config.PipelineConfig.attention_threshold_for` use).
102
+ This is the load-bearing one: an interactive ``--fix-of``/
103
+ ``--review-of``/``--smoke-of`` session shares its ``type`` with a
104
+ headless counterpart, so only ``provider_name`` tells them apart.
105
+ * ``type in`` :data:`coord.config.INTERACTIVE_SESSION_TYPES` — the
106
+ chat/troubleshoot/audit/refinement family, which has no headless
107
+ counterpart at all and never goes near an agent.
108
+
109
+ Dead attended sessions are reaped by their own path
110
+ (:func:`coord.interactive.reap_stale_interactive_sessions`, called from
111
+ :func:`reconcile`), which probes the actual tmux server rather than
112
+ inferring death from an agent's silence. That is the correct instrument
113
+ for them; this one must stay out of the way.
114
+ """
115
+ if getattr(a, "provider_name", None) == "claude-pty":
116
+ return True
117
+ return getattr(a, "type", None) in INTERACTIVE_SESSION_TYPES
118
+
119
+
120
+ def agent_has_no_record(status: dict, assignment_id: str) -> bool:
121
+ """True when *status* positively shows the agent knows nothing of *assignment_id*.
122
+
123
+ #2275's whole point: ``/status`` carries ``active`` (everything the agent
124
+ has a live subprocess for) and ``completed`` (its capped terminal
125
+ history). An id in NEITHER is a **positive statement** about the agent's
126
+ state — "no record" — not an inference from silence, which is what the
127
+ old ``entry is None → continue`` conflated with "still running".
128
+
129
+ Fail-open on a payload that doesn't carry both keys. A response missing
130
+ ``active`` cannot support the disproof (we would be inferring from
131
+ absence again, exactly the bug), so it is treated as "cannot tell" and
132
+ the caller leaves the row alone. This also means an older agent build,
133
+ or any future ``/status`` variant, degrades to today's behaviour rather
134
+ than to a reap.
135
+ """
136
+ if not isinstance(status, dict):
137
+ return False
138
+ active = status.get("active")
139
+ completed = status.get("completed")
140
+ if not isinstance(active, list) or not isinstance(completed, list):
141
+ return False
142
+ for entries in (active, completed):
143
+ for e in entries:
144
+ if isinstance(e, dict) and e.get("id") == assignment_id:
145
+ return False
146
+ return True
147
+
148
+
149
+ def _no_record_grace_elapsed(a: Assignment, *, now: float | None = None) -> bool:
150
+ """True when *a* is old enough for the no-record arm (:data:`_NO_RECORD_GRACE_SECONDS`).
151
+
152
+ A row with no ``dispatched_at`` at all is eligible: the grace window
153
+ guards a dispatch-time race, and a row that never recorded a dispatch
154
+ time is not in one.
155
+ """
156
+ dispatched_at = getattr(a, "dispatched_at", None)
157
+ if not dispatched_at:
158
+ return True
159
+ try:
160
+ dispatched = float(dispatched_at)
161
+ except (TypeError, ValueError):
162
+ return True
163
+ return (time.time() if now is None else now) - dispatched >= _NO_RECORD_GRACE_SECONDS
164
+
165
+
52
166
  def effective_agent_status(entry: dict) -> str:
53
167
  """The agent-reported status for *entry*, with #1534's ``done`` refusal.
54
168
 
@@ -143,7 +257,49 @@ def reconcile_completed_assignments(
143
257
 
144
258
  Interactive sessions are tmux launches, not agent subprocesses, so they
145
259
  never appear in the agent's ``completed`` list — a live attended session
146
- can't be reaped by this path.
260
+ can't be reaped by this path. #2275 made that a CHECKED property rather
261
+ than an emergent one: see :func:`is_attended_session`.
262
+
263
+ **#2275 — the second reconcile arm: "the agent has no record of it".**
264
+ Until #2275 this function only ever acted on a row it found in the agent's
265
+ ``completed`` history. Anything else hit a bare ``continue`` whose comment
266
+ read *"still active on the agent (or rolled off history) → leave it"* —
267
+ two cases with opposite correct handling, conflated, both left. That is
268
+ not a race: ``_COMPLETED_HISTORY_CAP`` is 25, so a leg that dies needs only
269
+ 25 further completions on its machine before its id is gone from
270
+ ``/status``, after which nothing on the daemon's 30s clock would ever look
271
+ at that row again. It cost claude-coordinator#2208 8 hours and both drive
272
+ attempts on an already-green branch; a human running ``coord status``
273
+ cleared it, and the branch was merge-READY 14 minutes later.
274
+
275
+ The fix is a positive disproof: ``/status`` carries both ``active`` and
276
+ ``completed``, and an id in NEITHER is a statement about the agent's state,
277
+ not an inference from its silence. Those — and only those — are
278
+ reconciled, to ``failed`` (never ``done``) with :data:`NO_AGENT_RECORD_
279
+ REASON`. See :func:`agent_has_no_record` and
280
+ :func:`_reconcile_no_agent_record`.
281
+
282
+ Three guards, because **this arm reaps** and #1658 is what getting that
283
+ wrong looks like in production:
284
+
285
+ 1. :func:`is_attended_session` — attended sessions appear in neither list
286
+ for their whole life. Reaping them is the regression that costs real
287
+ work; :func:`coord.interactive.reap_stale_interactive_sessions` owns
288
+ them, and it probes tmux rather than guessing.
289
+ 2. An unreachable agent still short-circuits at ``if not status`` above,
290
+ unweakened. **No record and no answer are different things.**
291
+ 3. :data:`_NO_RECORD_GRACE_SECONDS` since ``dispatched_at``.
292
+
293
+ On **agent restart** (the ``coord agent update`` roll) this is deliberately
294
+ NOT a mass reap, and not because of the grace window: ``AgentServer.
295
+ _load_state`` restores the persisted assignments and rewrites every
296
+ ``pending``/``running`` one to ``failed`` with *"agent restarted;
297
+ subprocess lost"* before the first ``/status`` is served. Those rows are
298
+ therefore IN ``completed``, and the ordinary path above handles them with a
299
+ real reason. Genuinely-empty ``active`` + ``completed`` means the agent
300
+ lost its state file too (fresh install, corrupt state moved aside by
301
+ #1421's handler) — and there the workers really are gone, so reconciling
302
+ every row on that machine is the correct answer rather than an accident.
147
303
 
148
304
  Returns one dict per reconciled assignment (empty when nothing changed).
149
305
  """
@@ -182,7 +338,22 @@ def reconcile_completed_assignments(
182
338
  None,
183
339
  )
184
340
  if entry is None:
185
- continue # still active on the agent (or rolled off history) → leave it
341
+ # #2275: NOT in `completed` has two causes with OPPOSITE correct
342
+ # handling — "still running on the agent" (leave it) and "the
343
+ # agent has no record of it at all" (reconcile it). This used to
344
+ # be a bare `continue` that named both cases in a comment and
345
+ # then left both, so a row in the second case was re-skipped every
346
+ # 30s forever while `status` read `running` (#2208: 8 hours and
347
+ # both drive attempts burned on an already-green branch).
348
+ # `agent_has_no_record` tells them apart from the `active` list —
349
+ # a positive disproof, not an inference from silence.
350
+ if (
351
+ agent_has_no_record(status, aid)
352
+ and not is_attended_session(a)
353
+ and _no_record_grace_elapsed(a)
354
+ ):
355
+ _reconcile_no_agent_record(a, aid, update_state_fn, reconciled)
356
+ continue
186
357
  # #1534: `effective_agent_status` refuses an agent-reported `done`
187
358
  # that also carries a usage-limit-kill reason — the daemon's passive
188
359
  # tick is the FIRST place most completions are observed, so without
@@ -325,8 +496,83 @@ def reconcile_completed_assignments(
325
496
  return reconciled
326
497
 
327
498
 
499
+ def _reconcile_no_agent_record(
500
+ a: Assignment,
501
+ aid: str,
502
+ update_state_fn,
503
+ reconciled: list[dict],
504
+ ) -> None:
505
+ """#2275: flip a ``running`` row the agent has no record of to ``failed``.
506
+
507
+ Called from :func:`reconcile_completed_assignments` only, and only once
508
+ all three guards there have passed (positive disproof, not attended, past
509
+ the grace window).
510
+
511
+ **``failed``, never ``done``.** This leg never reported a verdict, so the
512
+ one thing that must not happen is a silent flip to ``done`` — that
513
+ manufactures a pass and every downstream gate (review dispatch, the
514
+ acceptance gate, the merge queue) then behaves as if a slice exists that
515
+ nobody ever produced. A stall is bad; a manufactured pass is worse.
516
+ ``failure_reason`` is the pinned :data:`NO_AGENT_RECORD_REASON`, so
517
+ ``coord status``/the TUI/``coord drive`` all name the cause rather than
518
+ showing a failure with no explanation.
519
+
520
+ ``exit_code`` is deliberately left ``None``: there is no reap, so there is
521
+ no exit code, and writing a fake one would be the same class of lie as
522
+ writing ``done``.
523
+
524
+ Kept passive, per this module's #1616 contract — it writes state through
525
+ the same ``update_state_fn`` seam and dispatches nothing. The ONE thing
526
+ it does beyond the write is the #1605 Test-stage propagation, which is not
527
+ a new side effect: it is the same call the ordinary ``terminal ==
528
+ "failed"`` path already makes, and skipping it would leave the parent
529
+ work row's ``test_state="running"`` forever — i.e. it would fix half of
530
+ #2208 and leave the other half stranded.
531
+ """
532
+ update_state_fn(
533
+ assignment_id=aid,
534
+ terminal_status="failed",
535
+ branch=a.branch,
536
+ review_state=None,
537
+ failure_reason=NO_AGENT_RECORD_REASON,
538
+ exit_code=None,
539
+ )
540
+
541
+ if a.type == "smoke":
542
+ # #2275: environmental by construction, so state it rather than
543
+ # letting `classify_failure` guess. `NO_AGENT_RECORD_REASON` is
544
+ # coordinator-authored prose with no wire token in it, so the
545
+ # classifier would (correctly, by its own "default to work" rule)
546
+ # call it a WORK failure and record `test_state="failed"` — which
547
+ # spends a bounded `coord fix` round chasing a code defect that never
548
+ # existed, on a branch that in #2208's case was already green. A
549
+ # vanished worker is the machine's fault, not the work's; clearing
550
+ # the verdict lets `dispatch_pending_smoke` re-run the Test stage on
551
+ # its next tick, which is exactly what a human did in 14 minutes.
552
+ propagate_smoke_terminal_failure(
553
+ parent_assignment_id=a.review_of_assignment_id,
554
+ failure_reason=NO_AGENT_RECORD_REASON,
555
+ environmental=True,
556
+ )
557
+
558
+ reconciled.append(
559
+ {
560
+ "assignment_id": aid,
561
+ "issue_number": a.issue_number,
562
+ "repo": a.repo_name,
563
+ "type": a.type,
564
+ "to_status": "failed",
565
+ "plan_captured": False,
566
+ "reason": NO_AGENT_RECORD_REASON,
567
+ }
568
+ )
569
+
570
+
328
571
  def propagate_smoke_terminal_failure(
329
- *, parent_assignment_id: str | None, failure_reason: str | None,
572
+ *,
573
+ parent_assignment_id: str | None,
574
+ failure_reason: str | None,
575
+ environmental: bool | None = None,
330
576
  ) -> None:
331
577
  """#1605: resolve a work row's ``test_state`` when its Test-stage
332
578
  (``type="smoke"``) child dies without ever reporting pass/fail.
@@ -358,6 +604,17 @@ def propagate_smoke_terminal_failure(
358
604
  completion already does (`coord/notify.py`'s completion handler), so
359
605
  the existing bounded `coord fix` loop picks it up from there.
360
606
 
607
+ *environmental* (#2275) overrides that classification when the CALLER
608
+ already knows the answer. Default ``None`` means "classify from
609
+ *failure_reason*", i.e. every pre-#2275 caller is unchanged. Pass
610
+ ``True`` only when the reason is coordinator-authored prose describing a
611
+ lost worker rather than a worker's own terminal output — the classifier's
612
+ vocabulary is deliberately restricted to named API/network wire tokens
613
+ (see :mod:`coord.failure_class`) and correctly defaults everything else to
614
+ WORK, so a call site that *knows* the machine ate the worker has to say
615
+ so rather than smuggle a token into its prose. The only such caller today
616
+ is :func:`_reconcile_no_agent_record`.
617
+
361
618
  A no-op when *parent_assignment_id* is falsy (a smoke row somehow
362
619
  missing its ``review_of_assignment_id`` — should not happen in practice,
363
620
  but this must never raise on it).
@@ -372,7 +629,13 @@ def propagate_smoke_terminal_failure(
372
629
  )
373
630
 
374
631
  classification = classify_failure(failure_reason=failure_reason)
375
- if classification.is_environmental:
632
+ if environmental is None:
633
+ is_environmental = classification.is_environmental
634
+ cause = classification.reason
635
+ else:
636
+ is_environmental = bool(environmental)
637
+ cause = failure_reason or classification.reason
638
+ if is_environmental:
376
639
  # #2272: this clear must CARRY the mute-leg tally, for exactly the
377
640
  # reason `dispatch_smoke`'s `running` stamp must. `test_reason` is the
378
641
  # only field that survives between Test-stage legs, so any writer that
@@ -392,7 +655,7 @@ def propagate_smoke_terminal_failure(
392
655
  test_state=None,
393
656
  test_reason=(
394
657
  f"{prefix}Test stage worker died environmentally "
395
- f"({classification.reason}) — cleared for automatic "
658
+ f"({cause}) — cleared for automatic "
396
659
  "re-dispatch, not recorded as a work failure (#1605)"
397
660
  ),
398
661
  )