code-coordinator 0.5.82__tar.gz → 0.5.83__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 (829) hide show
  1. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/code_coordinator.egg-info/SOURCES.txt +3 -3
  4. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/code_coordinator.egg-info/scm_version.json +2 -2
  5. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/agent.py +142 -3
  6. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/claim.py +14 -10
  7. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/commands/dispatch.py +16 -0
  8. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/commands/status.py +43 -0
  9. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/comments.py +64 -0
  10. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dao.py +5 -1
  11. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/server.py +15 -0
  12. code_coordinator-0.5.82/coord/dashboard/webapp/dist/assets/Gallery-da3qNiIw.js → code_coordinator-0.5.83/coord/dashboard/webapp/dist/assets/Gallery-Cq84itDE.js +1 -1
  13. code_coordinator-0.5.82/coord/dashboard/webapp/dist/assets/Terminal-skVFCxPU.js → code_coordinator-0.5.83/coord/dashboard/webapp/dist/assets/Terminal-DOXLcMue.js +1 -1
  14. code_coordinator-0.5.82/coord/dashboard/webapp/dist/assets/index-DltfZR5f.js → code_coordinator-0.5.83/coord/dashboard/webapp/dist/assets/index-DHn-RIJ8.js +34 -34
  15. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/dist/index.html +1 -1
  16. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/dist/sw.js +1 -1
  17. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/src/realtime/events.ts +14 -4
  18. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/diagnose.py +27 -0
  19. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dispatch.py +24 -0
  20. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/drive.py +58 -1
  21. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/drive_queue.py +47 -0
  22. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/drive_state.py +7 -1
  23. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/models.py +41 -1
  24. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/notify.py +34 -1
  25. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/reconcile.py +53 -0
  26. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/state.py +36 -0
  27. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_agent.py +86 -0
  28. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_agent_dirty_worktree.py +28 -0
  29. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_agent_zero_commit.py +270 -0
  30. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_claim.py +18 -0
  31. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_dashboard.py +51 -0
  32. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_diagnose.py +42 -0
  33. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_drive.py +58 -1
  34. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_drive_queue.py +104 -0
  35. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_drive_state.py +2 -1
  36. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_models.py +20 -0
  37. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_notify.py +135 -0
  38. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_reconcile_branch.py +163 -0
  39. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_reconcile_completions.py +21 -0
  40. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_reconcile_merges.py +42 -0
  41. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_retry_advisory_1606.py +22 -0
  42. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tui/src/app/pipeline.rs +15 -0
  43. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tui/src/app/tests.rs +25 -0
  44. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/.claude/commands/board.md +0 -0
  45. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/.claude/commands/complete-session.md +0 -0
  46. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/.claude/commands/coordinator.md +0 -0
  47. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/.githooks/_lib.sh +0 -0
  48. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/.githooks/post-checkout +0 -0
  49. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/.githooks/post-commit +0 -0
  50. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/.githooks/post-merge +0 -0
  51. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  52. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/.github/coord-ci-acceptance.yml +0 -0
  53. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/.github/workflows/auto-release.yml +0 -0
  54. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/.github/workflows/cargo-test.yml +0 -0
  55. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/.github/workflows/publish.yml +0 -0
  56. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/.github/workflows/release-tui.yml +0 -0
  57. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/.github/workflows/test.yml +0 -0
  58. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/.gitignore +0 -0
  59. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/CLAUDE.md +0 -0
  60. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/GOAL.md +0 -0
  61. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/LICENSE +0 -0
  62. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/MANIFEST.in +0 -0
  63. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/README.md +0 -0
  64. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/code_coordinator.egg-info/dependency_links.txt +0 -0
  65. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/code_coordinator.egg-info/entry_points.txt +0 -0
  66. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/code_coordinator.egg-info/requires.txt +0 -0
  67. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/code_coordinator.egg-info/scm_file_list.json +0 -0
  68. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/code_coordinator.egg-info/top_level.txt +0 -0
  69. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/__init__.py +0 -0
  70. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/_board_mapping.py +0 -0
  71. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/acceptance.py +0 -0
  72. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/acceptance_drivers.py +0 -0
  73. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/agent_app.py +0 -0
  74. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/agent_update.py +0 -0
  75. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/agents/opencode/.gitignore +0 -0
  76. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/agents/opencode/agents/work.md +0 -0
  77. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/agents/opencode/routing.jsonc +0 -0
  78. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/audit.py +0 -0
  79. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/auto_loop.py +0 -0
  80. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/board_bool_guard.py +0 -0
  81. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/board_service.py +0 -0
  82. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/board_wire.py +0 -0
  83. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/brain.py +0 -0
  84. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/branch_model.py +0 -0
  85. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/bug_intake.py +0 -0
  86. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/cargo_cache.py +0 -0
  87. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/ci_github.py +0 -0
  88. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/ci_store.py +0 -0
  89. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/cli.py +0 -0
  90. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/client.py +0 -0
  91. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/commands/__init__.py +0 -0
  92. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/commands/_common.py +0 -0
  93. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/commands/acceptance.py +0 -0
  94. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/commands/agent_ops.py +0 -0
  95. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/commands/audit.py +0 -0
  96. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/commands/chat.py +0 -0
  97. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/commands/dispatch_workers.py +0 -0
  98. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/commands/drive.py +0 -0
  99. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/commands/drive_queue.py +0 -0
  100. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/commands/gate_a.py +0 -0
  101. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/commands/gates.py +0 -0
  102. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/commands/issues.py +0 -0
  103. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/commands/lifecycle.py +0 -0
  104. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/commands/merge.py +0 -0
  105. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/commands/milestone.py +0 -0
  106. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/commands/plan_followup.py +0 -0
  107. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/commands/plans.py +0 -0
  108. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/commands/portal.py +0 -0
  109. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/commands/release.py +0 -0
  110. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/commands/repo.py +0 -0
  111. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/commands/report.py +0 -0
  112. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/commands/review.py +0 -0
  113. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/commands/scorecard.py +0 -0
  114. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/commands/sessions.py +0 -0
  115. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/commands/setup.py +0 -0
  116. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/commands/terminal.py +0 -0
  117. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/commands/test_gate.py +0 -0
  118. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/commands/tui.py +0 -0
  119. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/config.py +0 -0
  120. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/conflict_fix.py +0 -0
  121. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/__init__.py +0 -0
  122. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/fixture.py +0 -0
  123. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/index.html +0 -0
  124. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/terminal.py +0 -0
  125. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/.gitignore +0 -0
  126. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/components.json +0 -0
  127. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
  128. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
  129. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
  130. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
  131. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
  132. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
  133. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
  134. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
  135. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
  136. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
  137. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
  138. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
  139. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
  140. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
  141. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
  142. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
  143. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
  144. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/eslint.config.js +0 -0
  145. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/index.html +0 -0
  146. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
  147. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/package-lock.json +0 -0
  148. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/package.json +0 -0
  149. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
  150. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/playwright.config.ts +0 -0
  151. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/postcss.config.js +0 -0
  152. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
  153. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
  154. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
  155. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/src/App.tsx +0 -0
  156. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/src/api/client.ts +0 -0
  157. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/src/api/generated.ts +0 -0
  158. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
  159. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
  160. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
  161. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
  162. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
  163. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
  164. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
  165. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
  166. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
  167. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
  168. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
  169. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
  170. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
  171. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
  172. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
  173. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
  174. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
  175. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
  176. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
  177. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
  178. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
  179. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
  180. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
  181. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
  182. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
  183. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
  184. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
  185. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
  186. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
  187. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
  188. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
  189. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
  190. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
  191. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
  192. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/src/index.css +0 -0
  193. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
  194. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
  195. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/src/main.tsx +0 -0
  196. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
  197. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
  198. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
  199. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
  200. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
  201. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
  202. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
  203. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
  204. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
  205. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
  206. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
  207. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
  208. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
  209. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
  210. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
  211. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
  212. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
  213. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
  214. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
  215. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
  216. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/src/test-setup.ts +0 -0
  217. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
  218. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/tailwind.config.js +0 -0
  219. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/tsconfig.json +0 -0
  220. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/tsconfig.node.json +0 -0
  221. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dashboard/webapp/vite.config.ts +0 -0
  222. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/db.py +0 -0
  223. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dead_end.py +0 -0
  224. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/deploy/README.md +0 -0
  225. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/deploy/coord-agent.service +0 -0
  226. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/deploy/coord-db-backup.service +0 -0
  227. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/deploy/coord-db-backup.sh +0 -0
  228. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/deploy/coord-db-backup.timer +0 -0
  229. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/deploy/coord-drive-queue.service +0 -0
  230. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/deploy/coord-drive-queue.timer +0 -0
  231. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/deploy/coord-notify.service +0 -0
  232. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/deploy/coord-notify.timer +0 -0
  233. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/deploy/coord-release-propagate.service +0 -0
  234. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/deploy/coord-release-propagate.timer +0 -0
  235. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/deploy/coord-release-window.service +0 -0
  236. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/deploy/coord-release-window.timer +0 -0
  237. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/deploy/coord-serve.service +0 -0
  238. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/deploy/coord-web-dist-build.service +0 -0
  239. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/deploy/coord-web-dist-build.timer +0 -0
  240. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/deploy/coord-web.service +0 -0
  241. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/deploy_manifest.py +0 -0
  242. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/deploy_units.py +0 -0
  243. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/deps.py +0 -0
  244. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/dist_name.py +0 -0
  245. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/events.py +0 -0
  246. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/failure_class.py +0 -0
  247. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/filelock.py +0 -0
  248. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/fleet_config_health.py +0 -0
  249. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/freshness.py +0 -0
  250. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/gate_a.py +0 -0
  251. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/gate_b.py +0 -0
  252. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/gate_snapshot.py +0 -0
  253. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/gates.py +0 -0
  254. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/github_ops.py +0 -0
  255. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/goal.py +0 -0
  256. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/graph_health.py +0 -0
  257. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/health/__init__.py +0 -0
  258. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/health/aggregate.py +0 -0
  259. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/health/checks/__init__.py +0 -0
  260. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/health/checks/agent_install.py +0 -0
  261. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/health/checks/cargo_targets.py +0 -0
  262. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/health/checks/claude_binary.py +0 -0
  263. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/health/checks/deploy_lane_facts.py +0 -0
  264. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/health/checks/disk.py +0 -0
  265. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/health/checks/fleet_board.py +0 -0
  266. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  267. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/health/checks/fleet_phantom.py +0 -0
  268. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/health/checks/fleet_unit_drift.py +0 -0
  269. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/health/checks/graph.py +0 -0
  270. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/health/checks/graphify_cli.py +0 -0
  271. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/health/checks/plan_usage.py +0 -0
  272. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/health/checks/repo_state.py +0 -0
  273. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/health/checks/spawned_coord.py +0 -0
  274. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/health/checks/timer_active.py +0 -0
  275. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/health/checks/toolchain.py +0 -0
  276. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/health/checks/unit_drift.py +0 -0
  277. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/health/checks/unit_enablement.py +0 -0
  278. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/health/checks/worktrees.py +0 -0
  279. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/health/cli.py +0 -0
  280. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/health/context.py +0 -0
  281. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/health/fleet_snapshot.py +0 -0
  282. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/health/models.py +0 -0
  283. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/health/pypi.py +0 -0
  284. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/health/registry.py +0 -0
  285. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/health/render.py +0 -0
  286. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/health/units.py +0 -0
  287. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/hooks.py +0 -0
  288. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/housekeeping.py +0 -0
  289. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/interactive.py +0 -0
  290. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/issue_store.py +0 -0
  291. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/liveness_auditor.py +0 -0
  292. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/machine_pause.py +0 -0
  293. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/merge_queue.py +0 -0
  294. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/milestone_chat.py +0 -0
  295. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/milestone_dispatch.py +0 -0
  296. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/milestone_gate.py +0 -0
  297. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/milestone_order.py +0 -0
  298. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/mock_author.py +0 -0
  299. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/network.py +0 -0
  300. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/new_issue_chat.py +0 -0
  301. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/notifier/__init__.py +0 -0
  302. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/notifier/baseline.py +0 -0
  303. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/notifier/cli.py +0 -0
  304. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/notifier/collect.py +0 -0
  305. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/notifier/digest.py +0 -0
  306. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/notifier/models.py +0 -0
  307. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/notifier/predicate.py +0 -0
  308. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/notifier/service.py +0 -0
  309. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/notifier/store.py +0 -0
  310. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/notifier/transport.py +0 -0
  311. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/openapi.py +0 -0
  312. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/overlap_fence.py +0 -0
  313. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/parentage.py +0 -0
  314. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/parentage_github.py +0 -0
  315. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/pipeline.py +0 -0
  316. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/plan_parser.py +0 -0
  317. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/plans.py +0 -0
  318. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/platform_paths.py +0 -0
  319. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/portal_bridge.py +0 -0
  320. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/pr_body_lint.py +0 -0
  321. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/prereqs.py +0 -0
  322. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/progress.py +0 -0
  323. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/providers/__init__.py +0 -0
  324. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/providers/base.py +0 -0
  325. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/providers/claude.py +0 -0
  326. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/providers/claude_pty.py +0 -0
  327. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/providers/opencode.py +0 -0
  328. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/refine_chat.py +0 -0
  329. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/release_cordon.py +0 -0
  330. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/release_propagate.py +0 -0
  331. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/release_verify.py +0 -0
  332. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/release_window.py +0 -0
  333. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/repo_edit.py +0 -0
  334. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/repo_onboard.py +0 -0
  335. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/reports.py +0 -0
  336. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/revalidate.py +0 -0
  337. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/review.py +0 -0
  338. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/scorecard.py +0 -0
  339. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/serve_app.py +0 -0
  340. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/skills/update-issue/SKILL.md +0 -0
  341. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/smoke.py +0 -0
  342. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/spend_ceiling.py +0 -0
  343. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/split_work.py +0 -0
  344. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/stage_projection.py +0 -0
  345. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/test_author.py +0 -0
  346. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/test_chat.py +0 -0
  347. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/test_orchestrator.py +0 -0
  348. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/test_report.py +0 -0
  349. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/tui_release.py +0 -0
  350. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/usage.py +0 -0
  351. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/usage_limits.py +0 -0
  352. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/usage_rollup.py +0 -0
  353. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coord/worker_events.py +0 -0
  354. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/coordinator.example.yml +0 -0
  355. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/deploy/coord-agent.service +0 -0
  356. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/deploy/coord-db-backup.service +0 -0
  357. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/deploy/coord-db-backup.sh +0 -0
  358. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/deploy/coord-db-backup.timer +0 -0
  359. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/deploy/coord-drive-queue.service +0 -0
  360. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/deploy/coord-drive-queue.timer +0 -0
  361. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/deploy/coord-notify.service +0 -0
  362. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/deploy/coord-notify.timer +0 -0
  363. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/deploy/coord-release-propagate.service +0 -0
  364. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/deploy/coord-release-propagate.timer +0 -0
  365. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/deploy/coord-release-window.service +0 -0
  366. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/deploy/coord-release-window.timer +0 -0
  367. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/deploy/coord-serve.service +0 -0
  368. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/deploy/coord-web-dist-build.service +0 -0
  369. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/deploy/coord-web-dist-build.sh +0 -0
  370. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/deploy/coord-web-dist-build.timer +0 -0
  371. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/deploy/coord-web-rollback.sh +0 -0
  372. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/deploy/coord-web.service +0 -0
  373. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/deploy/node-shim.sh +0 -0
  374. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/docs/AGENT_OPERATIONS.md +0 -0
  375. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/docs/ARCHITECTURE.md +0 -0
  376. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/docs/ARCH_SECURITY_GATES.md +0 -0
  377. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/docs/COCKPIT.md +0 -0
  378. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/docs/CONTROL_CENTER.md +0 -0
  379. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/docs/COST_DISCIPLINE.md +0 -0
  380. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/docs/CROSS_PLATFORM.md +0 -0
  381. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/docs/CUSTOMER_PORTAL.md +0 -0
  382. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/docs/DRIVE_QUEUE.md +0 -0
  383. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/docs/EPHEMERAL_WORKERS.md +0 -0
  384. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/docs/FORGE_MIGRATION.md +0 -0
  385. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/docs/GRAPHIFY_SETUP.md +0 -0
  386. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/docs/ISSUE_GUIDANCE.md +0 -0
  387. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/docs/MAC_MINI.md +0 -0
  388. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  389. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/docs/NOTIFIER.md +0 -0
  390. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/docs/OPENCODE_VERIFICATION.md +0 -0
  391. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/docs/OPERATING_GOTCHAS.md +0 -0
  392. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/docs/ORACLE_LOOP.md +0 -0
  393. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/docs/PHONE_WEBAPP.md +0 -0
  394. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/docs/PIPELINE_V2.md +0 -0
  395. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/docs/PLATFORM_EVOLUTION.md +0 -0
  396. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/docs/SECOND_BACKEND.md +0 -0
  397. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/docs/STORE_SERVICE.md +0 -0
  398. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  399. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/docs/WEB_CONTROL_CENTER.md +0 -0
  400. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/docs/mocks/web/README.md +0 -0
  401. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/docs/mocks/web/_tokens.css +0 -0
  402. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/docs/mocks/web/issue-detail.html +0 -0
  403. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/docs/mocks/web/pipeline-narrow.html +0 -0
  404. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/docs/mocks/web/pipeline-wide.html +0 -0
  405. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/graphify-out/.gitignore +0 -0
  406. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/install-agent.sh +0 -0
  407. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/pyproject.toml +0 -0
  408. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/scripts/audit_review_verdict_overrides.py +0 -0
  409. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  410. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/scripts/azure-workers/build-worker-image.sh +0 -0
  411. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/scripts/azure-workers/coordinator-machine.py +0 -0
  412. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/scripts/azure-workers/epic-down.sh +0 -0
  413. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/scripts/azure-workers/epic-up.sh +0 -0
  414. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/scripts/azure-workers/preflight.sh +0 -0
  415. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/scripts/azure-workers/provision-worker.sh +0 -0
  416. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  417. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  418. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/scripts/azure-workers/verify-github-token.sh +0 -0
  419. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/scripts/codegen.py +0 -0
  420. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/scripts/coord-test-runner.sh +0 -0
  421. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/scripts/drive-batch.sh +0 -0
  422. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/scripts/gen_board_fixture.py +0 -0
  423. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/scripts/next_release_tag.py +0 -0
  424. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/scripts/run_tests_in_populated_home.sh +0 -0
  425. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/scripts/run_tests_without_gh.sh +0 -0
  426. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/scripts/smoke_437_interactive.py +0 -0
  427. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/scripts/verify_878_review_capture.py +0 -0
  428. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/scripts/verify_release_published.py +0 -0
  429. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/scripts/verify_release_wheel.py +0 -0
  430. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/setup.cfg +0 -0
  431. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/SMOKE_SET.md +0 -0
  432. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/__init__.py +0 -0
  433. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  434. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/acceptance/ms-33/contract.md +0 -0
  435. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/acceptance/ms-33/manifest.yml +0 -0
  436. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  437. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  438. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  439. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  440. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/acceptance/ms-37/conftest.py +0 -0
  441. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/acceptance/ms-37/contract.md +0 -0
  442. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/acceptance/ms-37/manifest.yml +0 -0
  443. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  444. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  445. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/acceptance/ms-38/contract.md +0 -0
  446. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/acceptance/ms-38/manifest.yml +0 -0
  447. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  448. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  449. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  450. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  451. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  452. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  453. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  454. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  455. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  456. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  457. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/acceptance/ms-51/contract.md +0 -0
  458. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  459. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  460. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/acceptance/ms-51/manifest.yml +0 -0
  461. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  462. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/acceptance/ms-51/tsconfig.json +0 -0
  463. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  464. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/conftest.py +0 -0
  465. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/fixtures/board-pipeline-basic.json +0 -0
  466. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  467. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  468. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  469. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/fixtures/playwright/all_pass.json +0 -0
  470. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  471. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/fixtures/playwright/mixed_fail.json +0 -0
  472. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  473. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  474. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/fixtures/playwright/skip.json +0 -0
  475. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/fixtures/playwright/truncated.json +0 -0
  476. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  477. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  478. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  479. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  480. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  481. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  482. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  483. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  484. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_acceptance.py +0 -0
  485. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_acceptance_drivers.py +0 -0
  486. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_agent_api_error.py +0 -0
  487. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_agent_app.py +0 -0
  488. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_agent_branch_base.py +0 -0
  489. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_agent_branch_capture.py +0 -0
  490. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_agent_config_free_1712.py +0 -0
  491. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_agent_deploy_units_endpoint.py +0 -0
  492. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_agent_graph_self_heal.py +0 -0
  493. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_agent_health_h3.py +0 -0
  494. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_agent_idle_restart.py +0 -0
  495. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_agent_push_failure.py +0 -0
  496. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_agent_reap.py +0 -0
  497. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_agent_repos_and_pull.py +0 -0
  498. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_agent_restart_services_endpoint.py +0 -0
  499. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_agent_startup_diagnostics.py +0 -0
  500. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_agent_update.py +0 -0
  501. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_agent_update_bluegreen.py +0 -0
  502. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_agent_usage_limit.py +0 -0
  503. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_ambient_home_isolation.py +0 -0
  504. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_approve_reject_plan.py +0 -0
  505. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_approve_usage_gate.py +0 -0
  506. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_assignment_already_recorded_daemon.py +0 -0
  507. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_audit_log.py +0 -0
  508. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_audit_outcome.py +0 -0
  509. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_audit_query.py +0 -0
  510. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_auto_loop.py +0 -0
  511. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_auto_release_publish_2035.py +0 -0
  512. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_base_checkout_restore.py +0 -0
  513. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_board_cap_762.py +0 -0
  514. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_board_fixture.py +0 -0
  515. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_board_read_path.py +0 -0
  516. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_board_service.py +0 -0
  517. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_board_state.py +0 -0
  518. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_board_wire.py +0 -0
  519. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_brain.py +0 -0
  520. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_branch_model.py +0 -0
  521. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_bug_intake.py +0 -0
  522. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_build_worker_image_env_update.py +0 -0
  523. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_cargo_cache.py +0 -0
  524. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_ci_acceptance_gate_1950.py +0 -0
  525. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_ci_parity_2091.py +0 -0
  526. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_ci_store.py +0 -0
  527. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_cli_acceptance.py +0 -0
  528. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_cli_assign.py +0 -0
  529. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  530. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_cli_assign_interactive_remote.py +0 -0
  531. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_cli_assign_provider.py +0 -0
  532. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  533. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_cli_audit.py +0 -0
  534. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_cli_chat_continue.py +0 -0
  535. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_cli_diagnose_config_provenance.py +0 -0
  536. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_cli_diagnose_graph.py +0 -0
  537. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_cli_doctor.py +0 -0
  538. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_cli_doctor_config_free_1801.py +0 -0
  539. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  540. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_cli_drive.py +0 -0
  541. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_cli_drive_queue.py +0 -0
  542. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_cli_escalate.py +0 -0
  543. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_cli_fix_headless_review.py +0 -0
  544. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_cli_gate_a.py +0 -0
  545. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_cli_install_drift.py +0 -0
  546. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_cli_install_skills.py +0 -0
  547. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_cli_issue_create_label.py +0 -0
  548. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_cli_issue_reopen.py +0 -0
  549. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_cli_merge.py +0 -0
  550. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_cli_milestone_assign.py +0 -0
  551. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_cli_milestone_capture.py +0 -0
  552. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_cli_milestone_chat_add_child.py +0 -0
  553. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_cli_milestone_dispatch.py +0 -0
  554. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_cli_milestone_gate_b.py +0 -0
  555. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_cli_milestone_gate_c.py +0 -0
  556. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_cli_milestone_order.py +0 -0
  557. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  558. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_cli_milestone_ship.py +0 -0
  559. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_cli_network.py +0 -0
  560. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_cli_new_issue_chat.py +0 -0
  561. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_cli_plans.py +0 -0
  562. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_cli_portal.py +0 -0
  563. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_cli_pull_artifact.py +0 -0
  564. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_cli_queue.py +0 -0
  565. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_cli_reattach_sessions.py +0 -0
  566. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_cli_refine_board.py +0 -0
  567. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_cli_release_preflight.py +0 -0
  568. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_cli_release_propagate.py +0 -0
  569. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_cli_release_window.py +0 -0
  570. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_cli_repo_2220.py +0 -0
  571. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_cli_scorecard.py +0 -0
  572. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_cli_set_review_findings.py +0 -0
  573. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_cli_status_advisory_terminal.py +0 -0
  574. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_cli_status_merge_queue.py +0 -0
  575. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_cli_status_provider.py +0 -0
  576. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_cli_status_review_finalizing.py +0 -0
  577. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_cli_status_test_failed_tag.py +0 -0
  578. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_cli_status_usage_limit.py +0 -0
  579. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_cli_sync_comments_873.py +0 -0
  580. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_cli_test_plan.py +0 -0
  581. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_cli_track.py +0 -0
  582. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_cli_tui_update.py +0 -0
  583. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_cli_wait.py +0 -0
  584. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_client_base_install.py +0 -0
  585. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_comments.py +0 -0
  586. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_completion_summary.py +0 -0
  587. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_config.py +0 -0
  588. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_config_acceptance.py +0 -0
  589. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_config_audit.py +0 -0
  590. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_config_pricing.py +0 -0
  591. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_config_usage_gate.py +0 -0
  592. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_conflict_fix.py +0 -0
  593. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_conflict_fix_semantic.py +0 -0
  594. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_coord_test.py +0 -0
  595. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_coord_test_runner_baseline.py +0 -0
  596. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_coord_test_runner_routing.py +0 -0
  597. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_coord_test_runner_toolchain.py +0 -0
  598. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_coord_web_sse_restart_live.py +0 -0
  599. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_coordinator_machine.py +0 -0
  600. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_cross_platform_imports.py +0 -0
  601. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_dashboard_fixture.py +0 -0
  602. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_dashboard_terminal.py +0 -0
  603. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_dashboard_terminal_live.py +0 -0
  604. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_db.py +0 -0
  605. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_dead_end.py +0 -0
  606. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_deploy_coord_db_backup.py +0 -0
  607. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_deploy_coord_web_dist.py +0 -0
  608. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_deploy_coord_web_rollback.py +0 -0
  609. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_deploy_drive_queue_unit.py +0 -0
  610. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_deploy_manifest.py +0 -0
  611. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_deploy_units_lane.py +0 -0
  612. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_deploy_web_unit.py +0 -0
  613. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_deps.py +0 -0
  614. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_dispatch.py +0 -0
  615. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_dispatch_target_validation.py +0 -0
  616. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_dist_name.py +0 -0
  617. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_done_housekeeping.py +0 -0
  618. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_drive_tmux.py +0 -0
  619. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_epic_up_capability_detection.py +0 -0
  620. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  621. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_epic_up_image_provenance.py +0 -0
  622. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_errors.py +0 -0
  623. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_events.py +0 -0
  624. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_failure_class.py +0 -0
  625. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_filelock.py +0 -0
  626. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  627. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_fix_of_force_override.py +0 -0
  628. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_fleet_config_health.py +0 -0
  629. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_fleet_health_probes.py +0 -0
  630. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_fleet_health_snapshot.py +0 -0
  631. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_freshness.py +0 -0
  632. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_gate_a.py +0 -0
  633. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_gate_b.py +0 -0
  634. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_gate_snapshot_staleness.py +0 -0
  635. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_gates.py +0 -0
  636. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  637. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_generated_types_fixture.py +0 -0
  638. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_github_ops.py +0 -0
  639. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_goal.py +0 -0
  640. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_graph_health.py +0 -0
  641. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_graph_selfheal_absent_2237.py +0 -0
  642. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_handoff.py +0 -0
  643. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_health_checks.py +0 -0
  644. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_health_cli.py +0 -0
  645. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_health_cli_graph.py +0 -0
  646. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_health_config.py +0 -0
  647. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_health_context.py +0 -0
  648. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_health_deploy_lane_facts.py +0 -0
  649. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_health_incident_regression.py +0 -0
  650. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_health_pypi.py +0 -0
  651. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_health_registry.py +0 -0
  652. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_health_timer_active.py +0 -0
  653. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_health_toolchain.py +0 -0
  654. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_health_unit_drift.py +0 -0
  655. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_health_unit_enablement.py +0 -0
  656. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_hooks.py +0 -0
  657. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_human_attended_437.py +0 -0
  658. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_init.py +0 -0
  659. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_integration.py +0 -0
  660. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_interactive_briefing_echo.py +0 -0
  661. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_interactive_prefill_state.py +0 -0
  662. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_interactive_session_relaunch.py +0 -0
  663. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_interactive_test_verdict_backstop.py +0 -0
  664. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_interactive_token_attribution.py +0 -0
  665. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_interactive_worktree.py +0 -0
  666. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_issue_store_seam.py +0 -0
  667. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_liveness_auditor.py +0 -0
  668. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_liveness_notify.py +0 -0
  669. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_machine_pause.py +0 -0
  670. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_merge_queue.py +0 -0
  671. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_merge_verify.py +0 -0
  672. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_milestone_chat.py +0 -0
  673. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_milestone_dispatch.py +0 -0
  674. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_milestone_gate.py +0 -0
  675. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_milestone_order.py +0 -0
  676. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_milestone_seam.py +0 -0
  677. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_mock_author.py +0 -0
  678. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_model_tiering.py +0 -0
  679. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_models_config_labels.py +0 -0
  680. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_needs_attention.py +0 -0
  681. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_network.py +0 -0
  682. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_new_issue_chat.py +0 -0
  683. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_next_release_tag.py +0 -0
  684. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_no_direct_gh_calls.py +0 -0
  685. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_node_shim.py +0 -0
  686. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_notifier_baseline.py +0 -0
  687. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_notifier_cli.py +0 -0
  688. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_notifier_collect.py +0 -0
  689. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_notifier_config.py +0 -0
  690. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_notifier_drive_seam.py +0 -0
  691. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_notifier_isolation.py +0 -0
  692. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_notifier_predicate.py +0 -0
  693. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_notifier_quiet_hours.py +0 -0
  694. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_notifier_service.py +0 -0
  695. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_notify_drain.py +0 -0
  696. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_openapi.py +0 -0
  697. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_operational_defaults.py +0 -0
  698. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_overlap_fence.py +0 -0
  699. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_packaged_deploy_units.py +0 -0
  700. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_parentage.py +0 -0
  701. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_paste_landed.py +0 -0
  702. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_pipeline.py +0 -0
  703. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_plan_followup_approve_plan_command.py +0 -0
  704. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_plan_followup_pr_command.py +0 -0
  705. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_plan_followup_review_command.py +0 -0
  706. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_plan_only.py +0 -0
  707. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_plan_parser.py +0 -0
  708. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_platform_paths.py +0 -0
  709. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_portal_bridge.py +0 -0
  710. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_portal_config.py +0 -0
  711. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_pr_body_lint.py +0 -0
  712. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_prereqs.py +0 -0
  713. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_production_db_guard.py +0 -0
  714. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_progress.py +0 -0
  715. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_provider_seam.py +0 -0
  716. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_providers.py +0 -0
  717. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_providers_config_labels.py +0 -0
  718. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_providers_pty.py +0 -0
  719. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_quiet_hours.py +0 -0
  720. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_quiet_hours_store_2146.py +0 -0
  721. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_reap_merged_sessions.py +0 -0
  722. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_reap_stale_interactive_tick.py +0 -0
  723. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_reconcile_usage_limit_done.py +0 -0
  724. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_refine_chat.py +0 -0
  725. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_release_cordon_2101.py +0 -0
  726. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_release_propagate.py +0 -0
  727. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_release_unified_1242.py +0 -0
  728. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_release_verify.py +0 -0
  729. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_release_window.py +0 -0
  730. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_remote_auto_prune.py +0 -0
  731. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_remote_interactive_reaper.py +0 -0
  732. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_repo_edit_2220.py +0 -0
  733. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_repo_graph_fleet_2237.py +0 -0
  734. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_repo_onboard_2220.py +0 -0
  735. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_report_result_push.py +0 -0
  736. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_reports.py +0 -0
  737. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_retry.py +0 -0
  738. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_retry_type_1636.py +0 -0
  739. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_revalidate.py +0 -0
  740. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_review.py +0 -0
  741. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_review_end_review_without_verdict.py +0 -0
  742. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_review_parse_failure_diagnostic.py +0 -0
  743. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_review_reaffirm.py +0 -0
  744. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_review_state.py +0 -0
  745. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_review_verdict_backstop.py +0 -0
  746. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_review_verdict_override_audit.py +0 -0
  747. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_review_verdict_relay.py +0 -0
  748. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_review_zero_commits.py +0 -0
  749. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_scoped_review_wiring.py +0 -0
  750. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_scorecard.py +0 -0
  751. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_serve.py +0 -0
  752. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_serve_app_board_trim.py +0 -0
  753. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_session.py +0 -0
  754. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_slice_issue_attribution.py +0 -0
  755. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_smoke.py +0 -0
  756. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_smoke_live_checkout_restore.py +0 -0
  757. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_smoke_workflow.py +0 -0
  758. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_spend_ceiling.py +0 -0
  759. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_spend_ceiling_coordinator.py +0 -0
  760. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_split.py +0 -0
  761. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_split_work.py +0 -0
  762. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_stage_projection.py +0 -0
  763. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_stalled_pipeline.py +0 -0
  764. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_state.py +0 -0
  765. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_state_review_findings_daemon.py +0 -0
  766. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_status_fleet_footer.py +0 -0
  767. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_stop_1567.py +0 -0
  768. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_stuck.py +0 -0
  769. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_terminal_command.py +0 -0
  770. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_test_author.py +0 -0
  771. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_test_chat.py +0 -0
  772. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_test_orchestrator.py +0 -0
  773. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_test_report.py +0 -0
  774. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_test_verdict_parsing.py +0 -0
  775. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_test_verdict_transcript_floor.py +0 -0
  776. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_thin_client_board_audit.py +0 -0
  777. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_thin_client_config_load_1080.py +0 -0
  778. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_thin_client_daemon_routing_906.py +0 -0
  779. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_tmux_host.py +0 -0
  780. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_tmux_session.py +0 -0
  781. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_transcript_floor.py +0 -0
  782. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_usage.py +0 -0
  783. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_usage_limits.py +0 -0
  784. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_usage_rollup.py +0 -0
  785. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_venv_live_install_2121.py +0 -0
  786. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_version_single_source.py +0 -0
  787. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_watch.py +0 -0
  788. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_worker_events.py +0 -0
  789. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_worker_image_pin_sync.py +0 -0
  790. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_worker_safety.py +0 -0
  791. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_worker_test_scoping.py +0 -0
  792. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_worktree.py +0 -0
  793. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  794. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tui/Cargo.lock +0 -0
  795. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tui/Cargo.toml +0 -0
  796. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tui/cargo-config-local-quadraui.toml.example +0 -0
  797. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tui/src/app/audit.rs +0 -0
  798. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tui/src/app/chat.rs +0 -0
  799. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tui/src/app/data.rs +0 -0
  800. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tui/src/app/dialogs.rs +0 -0
  801. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tui/src/app/drive.rs +0 -0
  802. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tui/src/app/drive_queue.rs +0 -0
  803. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tui/src/app/escalation.rs +0 -0
  804. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tui/src/app/events.rs +0 -0
  805. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tui/src/app/fixtures.rs +0 -0
  806. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tui/src/app/fleet_health.rs +0 -0
  807. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tui/src/app/fleet_sessions.rs +0 -0
  808. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tui/src/app/fleet_terminals.rs +0 -0
  809. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tui/src/app/format.rs +0 -0
  810. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tui/src/app/milestone_dag.rs +0 -0
  811. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tui/src/app/mod.rs +0 -0
  812. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tui/src/app/msv.rs +0 -0
  813. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tui/src/app/plans.rs +0 -0
  814. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tui/src/app/render.rs +0 -0
  815. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tui/src/app/reports.rs +0 -0
  816. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tui/src/app/sessions.rs +0 -0
  817. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tui/src/app/settings_ui.rs +0 -0
  818. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tui/src/app/sidebar.rs +0 -0
  819. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tui/src/app/terminal.rs +0 -0
  820. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tui/src/app/types.rs +0 -0
  821. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tui/src/app/workspace.rs +0 -0
  822. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tui/src/bin/gtk.rs +0 -0
  823. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tui/src/commands.rs +0 -0
  824. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tui/src/lib.rs +0 -0
  825. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tui/src/main.rs +0 -0
  826. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tui/src/settings.rs +0 -0
  827. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tui/tests/acceptance.rs +0 -0
  828. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/tui/tests/cli.rs +0 -0
  829. {code_coordinator-0.5.82 → code_coordinator-0.5.83}/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.82
3
+ Version: 0.5.83
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.82
3
+ Version: 0.5.83
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
@@ -187,10 +187,10 @@ coord/dashboard/webapp/dist/index.html
187
187
  coord/dashboard/webapp/dist/manifest.webmanifest
188
188
  coord/dashboard/webapp/dist/sw.js
189
189
  coord/dashboard/webapp/dist/workbox-e4022e15.js
190
- coord/dashboard/webapp/dist/assets/Gallery-da3qNiIw.js
190
+ coord/dashboard/webapp/dist/assets/Gallery-Cq84itDE.js
191
191
  coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css
192
- coord/dashboard/webapp/dist/assets/Terminal-skVFCxPU.js
193
- coord/dashboard/webapp/dist/assets/index-DltfZR5f.js
192
+ coord/dashboard/webapp/dist/assets/Terminal-DOXLcMue.js
193
+ coord/dashboard/webapp/dist/assets/index-DHn-RIJ8.js
194
194
  coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css
195
195
  coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js
196
196
  coord/dashboard/webapp/dist/icons/icon-192.png
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "0.5.82",
2
+ "tag": "0.5.83",
3
3
  "distance": 0,
4
- "node": "g329c3981912cb4a0cb249010221980bd64ee12b4",
4
+ "node": "gc65c7e49837d7f4990a4606d987a975642e709ae",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-14"
@@ -82,6 +82,21 @@ CANCELLED = "cancelled"
82
82
  # would loop forever on "already implemented" reports); not a clean DONE
83
83
  # either. Human should review and decide whether to re-dispatch or close.
84
84
  ADVISORY = "advisory"
85
+ # #2234: a NARROWER shape of the #448 zero-commit exit — the worker's own
86
+ # final message shows it stopped because a STANDING repo rule (CLAUDE.md's
87
+ # "only the coordinator writes docs", or similar) makes the dispatched
88
+ # deliverable something no worker can complete, ever, on any attempt (see
89
+ # `_looks_like_policy_refusal`). This is deliberately a status distinct from
90
+ # ADVISORY, not a sub-case reported through it: every downstream consumer of
91
+ # ADVISORY (`coord drive`'s bounded retry, the queue's attempt budget, the
92
+ # terminal `blocked` bucket a human must `remove`) exists to handle "the
93
+ # worker got stuck or found nothing to do" — a condition retrying might fix.
94
+ # A policy refusal is the OPPOSITE: the worker did exactly the right thing,
95
+ # and retrying is guaranteed to reproduce the identical, correct refusal.
96
+ # Landing it in ADVISORY's bucket is what #2234 exists to stop — the #2195
97
+ # incident spent two drive attempts ($0.11 x 2, plus the overnight slot) and
98
+ # a terminal `blocked` rediscovering a rule that was never going to change.
99
+ REFUSED_POLICY = "refused_policy"
85
100
 
86
101
  # #448: spec types that are expected to push commits, so a clean exit with
87
102
  # zero commits is interesting (advisory). Review/smoke workers commit
@@ -167,6 +182,54 @@ _COMPLETED_HISTORY_CAP = 25
167
182
  # within an operator's normal polling cadence.
168
183
  _ADVISORY_TERMINAL_CHECK_COOLDOWN_S = 300.0
169
184
 
185
+ # #2234: markers that show up when a worker's OWN final message explains
186
+ # that it stopped because of a STANDING repo rule — not because it got stuck
187
+ # or ran out of turns. Matched only against the worker's own account (see
188
+ # `_looks_like_policy_refusal`), never against the briefing or issue body,
189
+ # which quote the same rules on every single dispatch and would false-
190
+ # positive on every assignment if matched directly. `claude.md` is the one
191
+ # filename standing worker-facing rules live in across this repo (see
192
+ # CLAUDE.md's own "Rules for workers" section, "Only the coordinator writes
193
+ # docs"); the rest are lifted verbatim from that same rule's text, which is
194
+ # the shape that triggered this issue (claude-coordinator#2195: an issue
195
+ # whose entire deliverable was a doc edit, dispatched to a worker that
196
+ # correctly refused and stopped). Deliberately permissive rather than
197
+ # requiring an exact quote — a weak/cheap model's terse refusal ("Confirmed:
198
+ # the rule exists verbatim at CLAUDE.md line 156...", the actual #2195
199
+ # transcript) may cite the rule without repeating "must not"/"forbidden"
200
+ # verbatim.
201
+ _POLICY_REFUSAL_MARKERS = (
202
+ "claude.md",
203
+ "files_forbidden",
204
+ "repo rule",
205
+ "repo's rule",
206
+ "coordinator work",
207
+ "only the coordinator",
208
+ "coordinator-only",
209
+ "should never have been dispatched",
210
+ )
211
+
212
+
213
+ def _looks_like_policy_refusal(text: str | None) -> bool:
214
+ """#2234: does *text* — the worker's own final message — read as a
215
+ refusal grounded in a STANDING repo-rule prohibition, rather than a
216
+ stuck/incomplete session?
217
+
218
+ Only ever consulted on the zero-commit/clean-exit shape (`_reap` calls
219
+ this exactly where it would otherwise set `zero_commit_reason` — see
220
+ below): a worker that pushed real commits never reaches this check, so a
221
+ successful run that happens to mention `CLAUDE.md` in passing (e.g.
222
+ "per CLAUDE.md I ran the build before committing") carries no risk of
223
+ being reclassified. Within that already-narrow shape, an ordinary
224
+ `STUCK:`-style report (out of turns, couldn't find the code, a flaky
225
+ test) mentions none of :data:`_POLICY_REFUSAL_MARKERS`, so it is left
226
+ exactly as ADVISORY as it always was.
227
+ """
228
+ if not text:
229
+ return False
230
+ lowered = text.lower()
231
+ return any(marker in lowered for marker in _POLICY_REFUSAL_MARKERS)
232
+
170
233
 
171
234
  # ── Reap tuning ───────────────────────────────────────────────────────────────
172
235
  # claude-cli sometimes does not exit after emitting its final
@@ -2925,6 +2988,16 @@ class AgentAssignment:
2925
2988
  # (a normal work assignment's deliverable is the diff itself, already
2926
2989
  # visible on the PR — restating the transcript there would be noise).
2927
2990
  result_text: str | None = None
2991
+ # #2234: the worker's own final message when `_reap` classifies a clean
2992
+ # (exit_code==0), 0-commit exit as a policy refusal (`status ==
2993
+ # REFUSED_POLICY`) rather than the #448 ADVISORY default — see
2994
+ # `_looks_like_policy_refusal`. `None` on every other outcome, including
2995
+ # an ordinary zero-commit ADVISORY (no marker matched) and the #2188
2996
+ # analysis-deliverable success shape (mutually exclusive with this one:
2997
+ # both are decided in the same `_ahead == 0` branch of `_reap`, and only
2998
+ # one of `analysis_deliverable`/`zero_commit_reason`/this field is ever
2999
+ # set for a given assignment).
3000
+ policy_refusal_reason: str | None = None
2928
3001
 
2929
3002
  def to_dict(self) -> dict:
2930
3003
  d = asdict(self)
@@ -4162,7 +4235,7 @@ class AgentServer:
4162
4235
  completed = sum(
4163
4236
  1
4164
4237
  for a in self._assignments.values()
4165
- if a.status in (DONE, FAILED, CANCELLED, ADVISORY)
4238
+ if a.status in (DONE, FAILED, CANCELLED, ADVISORY, REFUSED_POLICY)
4166
4239
  )
4167
4240
  worktree_bytes = self._cached_worktree_bytes()
4168
4241
  artifact_bytes = self._cached_artifact_bytes()
@@ -6105,17 +6178,28 @@ class AgentServer:
6105
6178
  ``zero_commit_reason`` when the reap already flagged ADVISORY, since
6106
6179
  that is the string `coord status`, the dashboard and the GitHub
6107
6180
  advisory comment all render) is what makes the loss visible.
6181
+
6182
+ #2234 fix-1: mirrors the same rewrite for a REFUSED_POLICY reap —
6183
+ ``policy_refusal_reason`` (not ``zero_commit_reason``) is the string
6184
+ the refused_policy GitHub comment and `coord status` render for that
6185
+ status, so a dirty worktree left behind by an otherwise-correct
6186
+ policy refusal needs the same visibility, on the field that surface
6187
+ actually reads.
6108
6188
  """
6109
6189
  with self._lock:
6110
6190
  live = self._assignments.get(assignment.id, assignment)
6111
6191
  live.dirty_worktree_reason = reason
6112
6192
  if live.status == ADVISORY:
6113
6193
  live.zero_commit_reason = reason
6194
+ elif live.status == REFUSED_POLICY:
6195
+ live.policy_refusal_reason = reason
6114
6196
  # Keep the caller's object in sync when it isn't the live one, so
6115
6197
  # a caller holding a detached copy still sees the outcome.
6116
6198
  assignment.dirty_worktree_reason = reason
6117
6199
  if assignment.status == ADVISORY:
6118
6200
  assignment.zero_commit_reason = reason
6201
+ elif assignment.status == REFUSED_POLICY:
6202
+ assignment.policy_refusal_reason = reason
6119
6203
  self._persist()
6120
6204
 
6121
6205
  def _rescue_uncommitted_work(
@@ -7473,6 +7557,11 @@ class AgentServer:
7473
7557
  # assignment.
7474
7558
  _analysis_deliverable = False
7475
7559
  _zero_commit_reason: str | None = None
7560
+ # #2234: set alongside (never together with) `_zero_commit_reason` —
7561
+ # both are decided in the SAME `_ahead == 0` branch below so the two
7562
+ # readings of "0 commits" can never disagree about which one applies
7563
+ # to this assignment.
7564
+ _policy_refusal_reason: str | None = None
7476
7565
  if (exit_code == 0 and assignment is not None
7477
7566
  and assignment.worktree_path
7478
7567
  and assignment.spec.type in _ZERO_COMMIT_TYPES):
@@ -7493,6 +7582,30 @@ class AgentServer:
7493
7582
  )
7494
7583
  except OSError:
7495
7584
  pass
7585
+ elif _worker_summary is not None and _looks_like_policy_refusal(
7586
+ _worker_summary.result_text
7587
+ ):
7588
+ # #2234: the worker's own final message cites a
7589
+ # standing repo-rule prohibition as the reason it
7590
+ # stopped — the #2195 shape. Distinct from the
7591
+ # ADVISORY fallback below: retrying this assignment
7592
+ # cannot change a rule that isn't going anywhere, so
7593
+ # it must not consume the queue's attempt budget or
7594
+ # land in the same bucket as a genuinely stuck
7595
+ # worker.
7596
+ _policy_refusal_reason = _worker_summary.result_text or (
7597
+ "worker cited a standing repo-rule prohibition"
7598
+ )
7599
+ try:
7600
+ with open(assignment.log_path, "a") as reopen:
7601
+ reopen.write(
7602
+ "# reap: refused_policy — 0 commits ahead "
7603
+ f"of {_base}; worker's final message cites "
7604
+ "a standing repo-rule prohibition, status "
7605
+ "set to refused_policy (#2234)\n"
7606
+ )
7607
+ except OSError:
7608
+ pass
7496
7609
  else:
7497
7610
  _zero_commit_reason = (
7498
7611
  "worker exited cleanly but pushed 0 commits"
@@ -7566,6 +7679,17 @@ class AgentServer:
7566
7679
  # shrug.
7567
7680
  assignment.status = FAILED
7568
7681
  assignment.push_failure_reason = _push_failure_reason
7682
+ elif _policy_refusal_reason is not None:
7683
+ # #2234: clean exit, no commits, and the worker's own
7684
+ # final message cites a standing repo-rule
7685
+ # prohibition — a distinct, permanent shape of "0
7686
+ # commits", not the generic #448 ADVISORY. Checked
7687
+ # BEFORE `_zero_commit_reason` (the two are mutually
7688
+ # exclusive by construction — see the `_reap`
7689
+ # computation above — so the order is never actually
7690
+ # load-bearing, kept parallel to it for readability).
7691
+ assignment.status = REFUSED_POLICY
7692
+ assignment.policy_refusal_reason = _policy_refusal_reason
7569
7693
  elif _zero_commit_reason is not None:
7570
7694
  # #448: clean exit but no commits → advisory, not done.
7571
7695
  assignment.status = ADVISORY
@@ -7826,8 +7950,16 @@ class AgentServer:
7826
7950
  ):
7827
7951
  return
7828
7952
  self._last_advisory_terminal_check = now
7953
+ # #2234: REFUSED_POLICY joins ADVISORY here for the same reason
7954
+ # — both are terminal, zero-commit statuses the agent would
7955
+ # otherwise keep serving indefinitely from its own `/status`
7956
+ # feed once GitHub confirms the work is done, forcing every
7957
+ # downstream consumer (dashboard, TUI, any future client) to
7958
+ # reimplement the same GitHub-terminality filter this method
7959
+ # exists to spare them.
7829
7960
  candidates = [
7830
- a for a in self._assignments.values() if a.status == ADVISORY
7961
+ a for a in self._assignments.values()
7962
+ if a.status in (ADVISORY, REFUSED_POLICY)
7831
7963
  ]
7832
7964
  if not candidates:
7833
7965
  return
@@ -7899,7 +8031,14 @@ class AgentServer:
7899
8031
  ordered = list(self._assignments.values())
7900
8032
  superseded_ids: list[str] = []
7901
8033
  for i, a in enumerate(ordered):
7902
- if a.status != ADVISORY:
8034
+ # #2234: REFUSED_POLICY joins ADVISORY here too — a refusal
8035
+ # for issue X can be superseded the same way an advisory can
8036
+ # (e.g. the coordinator re-scopes the issue so a later
8037
+ # dispatch's deliverable is no longer coordinator-only, and
8038
+ # that later attempt reaches DONE). Same in-memory
8039
+ # comparison, same root cause as `_prune_terminal_advisory`
8040
+ # above.
8041
+ if a.status not in (ADVISORY, REFUSED_POLICY):
7903
8042
  continue
7904
8043
  key = (a.spec.repo_name, a.spec.issue_number)
7905
8044
  for later in ordered[i + 1 :]:
@@ -184,15 +184,19 @@ def superseding_work_row(board: Board, assignment) -> "Assignment | None":
184
184
 
185
185
  Ordering is by ``dispatched_at``, with the assignment id as a deterministic
186
186
  tie-break so two rows stamped in the same second still order stably. A
187
- ``failed`` or ``advisory`` later row does not supersede — both are
188
- terminal no-op outcomes (``_ZERO_COMMIT_TYPES`` in ``coord/agent.py``:
189
- zero commits pushed, e.g. "already fixed" or a graceful usage-limit exit)
190
- that leave the branch exactly as the earlier row left it, so the earlier
191
- row is still the branch's author. Without excluding ``advisory`` here, a
192
- `--fix-of` round that lands zero commits would falsely mark the row it
193
- was fixing as superseded and since an ``advisory`` row is itself never
194
- a valid dispatch target (``dispatch_smoke`` requires ``status == "done"``),
195
- the branch would then never get *any* Test dispatch.
187
+ ``failed``, ``advisory``, or ``refused_policy`` later row does not
188
+ supersede — all three are terminal no-op outcomes (``_ZERO_COMMIT_TYPES``
189
+ in ``coord/agent.py``: zero commits pushed, e.g. "already fixed", a
190
+ graceful usage-limit exit, or a #2234 policy refusal) that leave the
191
+ branch exactly as the earlier row left it, so the earlier row is still
192
+ the branch's author. Without excluding these here, a `--fix-of` round
193
+ that lands zero commits would falsely mark the row it was fixing as
194
+ superseded and since none of ``advisory``/``refused_policy`` is itself
195
+ a valid dispatch target (``dispatch_smoke`` requires ``status ==
196
+ "done"``), the branch would then never get *any* Test dispatch. (#2234
197
+ added ``refused_policy`` to this exclusion — it's drawn from the same
198
+ ``_ZERO_COMMIT_TYPES`` gate as ``advisory`` in ``coord/agent.py``'s
199
+ ``_reap`` and reproduces the identical failure mode if left out.)
196
200
 
197
201
  Returns the (newest) superseding row so callers can name it in a log line,
198
202
  or ``None`` when *assignment* is the branch's current work row. Related but
@@ -213,7 +217,7 @@ def superseding_work_row(board: Board, assignment) -> "Assignment | None":
213
217
  continue
214
218
  if a.type not in WORK_LIKE_TYPES:
215
219
  continue
216
- if a.status in ("failed", "advisory"):
220
+ if a.status in ("failed", "advisory", "refused_policy"):
217
221
  continue
218
222
  if a.repo_name != assignment.repo_name or a.branch != branch:
219
223
  continue
@@ -1800,6 +1800,22 @@ def retry(assignment_id: str, config_path: Path, acknowledge_cost: bool = False)
1800
1800
  if assignment is None:
1801
1801
  click.echo(f"error: assignment {assignment_id!r} not found in board", err=True)
1802
1802
  sys.exit(1)
1803
+ if assignment.status == "refused_policy":
1804
+ # #2234: name the reason instead of falling into the generic
1805
+ # "not 'failed' or 'advisory'" message below — a policy refusal is
1806
+ # correct behavior (the worker did the right thing refusing a
1807
+ # CLAUDE.md-prohibited task), and retrying would just reproduce the
1808
+ # identical refusal since the rule it cited isn't going anywhere.
1809
+ click.echo(
1810
+ f"error: assignment {assignment_id} is 'refused_policy' — the "
1811
+ "worker correctly refused this work on a standing repo-rule "
1812
+ "prohibition. Retrying cannot change that verdict. Needs the "
1813
+ "coordinator: do the work directly, or re-scope the issue so "
1814
+ "its deliverable isn't coordinator-only, then `coord "
1815
+ "drive-queue remove` once handled (#2234).",
1816
+ err=True,
1817
+ )
1818
+ sys.exit(1)
1803
1819
  if assignment.status not in ("failed", "advisory"):
1804
1820
  click.echo(
1805
1821
  f"error: assignment {assignment_id} is {assignment.status!r}, not "
@@ -349,6 +349,23 @@ def status(config_path: Path, machine_filter: str | None, no_reconcile: bool, ti
349
349
  done.status = "advisory"
350
350
  if done.type == "work":
351
351
  done.review_state = "advisory"
352
+ elif agent_status == "refused_policy":
353
+ # #2234: worker exited cleanly, pushed 0 commits, and its own
354
+ # final message cited a standing repo-rule prohibition (the
355
+ # #2195 shape). Mirror reconcile.py's `reconcile()`: preserve
356
+ # the distinct status rather than folding it into "advisory"
357
+ # — without this branch it falls to the `else` below and gets
358
+ # recorded FAILED, feeding `auto_reassign` on a condition
359
+ # retrying can never fix.
360
+ done = board.mark_done_by_id(
361
+ a.assignment_id,
362
+ finished_at=entry.get("finished_at"),
363
+ branch=branch,
364
+ )
365
+ if done is not None:
366
+ done.status = "refused_policy"
367
+ if done.type == "work":
368
+ done.review_state = "advisory"
352
369
  else:
353
370
  board.mark_failed_by_id(
354
371
  a.assignment_id,
@@ -435,6 +452,32 @@ def status(config_path: Path, machine_filter: str | None, no_reconcile: bool, ti
435
452
  f"[{spec.get('repo_name', '?')}] — {reason}"
436
453
  )
437
454
 
455
+ # #2234: surface a policy refusal in its OWN section rather than folding
456
+ # it into Advisory above — same #1472 "still live on GitHub" filter, but
457
+ # distinct wording: this is a routing decision for the coordinator, not
458
+ # a "did the worker get stuck" question.
459
+ policy_refusal_entries = _live_advisory_entries(
460
+ [
461
+ e for e in agent_completed.values()
462
+ if e.get("status") == "refused_policy" and not e.get("usage_limit_reason")
463
+ ],
464
+ cfg,
465
+ )
466
+ if policy_refusal_entries:
467
+ click.echo("")
468
+ click.echo(
469
+ "🚫 Needs the coordinator (worker refused on a standing repo-rule "
470
+ "prohibition):"
471
+ )
472
+ for e in policy_refusal_entries:
473
+ spec = e.get("spec", {})
474
+ reason = e.get("policy_refusal_reason") or "cited a repo-rule prohibition"
475
+ click.echo(
476
+ f" #{spec.get('issue_number', '?')}: "
477
+ f"{spec.get('issue_title', '?')} "
478
+ f"[{spec.get('repo_name', '?')}] — {reason}"
479
+ )
480
+
438
481
  blocked = compute_blocked(cfg.repos, board.active)
439
482
  if blocked:
440
483
  click.echo("")
@@ -20,6 +20,16 @@ EVENT_FAILURE = "failure"
20
20
  EVENT_STUCK = "stuck"
21
21
  EVENT_PLAN = "plan"
22
22
  EVENT_ADVISORY = "advisory"
23
+ # #2234: a worker exited cleanly (exit_code 0), pushed 0 commits, AND its
24
+ # own final message cited a standing repo-rule prohibition (the #2195
25
+ # shape — a doc-only deliverable CLAUDE.md tells every worker to refuse).
26
+ # Modeled directly on EVENT_ADVISORY (same "0-commit clean exit" trigger)
27
+ # but deliberately distinct: an advisory needs a human to look and decide;
28
+ # a policy refusal already has its answer — retrying cannot change a rule
29
+ # that isn't going anywhere. Posting a separate event (rather than folding
30
+ # this into EVENT_ADVISORY) keeps the two legible on GitHub the same way
31
+ # `coord.agent.REFUSED_POLICY` keeps them distinct on the board.
32
+ EVENT_REFUSED_POLICY = "refused_policy"
23
33
  # #846: an assignment running past its wall-clock threshold, or thrashing
24
34
  # through fix/review rounds without converging. Distinct from EVENT_STUCK
25
35
  # (a worker self-reported STATUS/STUCK line) — this fires from time/round
@@ -649,6 +659,60 @@ def format_advisory(
649
659
  return "\n".join(lines)
650
660
 
651
661
 
662
+ def format_refused_policy(
663
+ *,
664
+ assignment_id: str,
665
+ machine_name: str,
666
+ repo_name: str,
667
+ issue_number: int,
668
+ duration_seconds: float | None = None,
669
+ log_path: str | None = None,
670
+ reason: str = "",
671
+ ) -> str:
672
+ """Format a comment for a #2234 policy refusal — a 0-commit clean exit
673
+ whose worker cited a standing repo-rule prohibition (e.g. "only the
674
+ coordinator writes docs").
675
+
676
+ Distinct from `format_advisory`: an advisory means "a human needs to
677
+ look and decide"; this means "the worker already found the answer —
678
+ retrying will reproduce the identical refusal, because the rule isn't
679
+ going anywhere." No re-dispatch suggestion, and no ADVISORY framing —
680
+ this names the routing decision (needs the coordinator) rather than
681
+ presenting as an unresolved outcome.
682
+ """
683
+ marker = _marker(
684
+ EVENT_REFUSED_POLICY,
685
+ assignment=assignment_id,
686
+ machine=machine_name,
687
+ repo=repo_name,
688
+ issue=issue_number,
689
+ )
690
+ lines = [
691
+ "## Coordinator: Refused — Standing Repo-Rule Prohibition",
692
+ marker,
693
+ f"**Machine:** {machine_name}",
694
+ "**Status:** refused_policy",
695
+ f"**Duration:** {_fmt_duration(duration_seconds)}",
696
+ ]
697
+ if log_path:
698
+ lines.append(f"**Log:** `{log_path}`")
699
+ lines.append("")
700
+ lines.append(
701
+ "The worker exited cleanly (exit code 0) and pushed **no commits** "
702
+ "because it correctly refused work that a standing repo rule (e.g. "
703
+ "CLAUDE.md's \"only the coordinator writes docs\") prohibits it from "
704
+ "doing. This is not a failure — retrying will reproduce the same "
705
+ "refusal, since the rule it cited isn't going anywhere. Needs the "
706
+ "coordinator: do the work directly, or re-scope the issue so its "
707
+ "deliverable isn't coordinator-only."
708
+ )
709
+ if reason.strip():
710
+ lines.append("")
711
+ lines.append("### Worker note")
712
+ lines.append(reason.strip())
713
+ return "\n".join(lines)
714
+
715
+
652
716
  def format_plan(
653
717
  *,
654
718
  assignment_id: str,
@@ -36,7 +36,11 @@ SCHEMA_VERSION = 1
36
36
 
37
37
  # #762: terminal assignment statuses. Anything NOT in this set (running /
38
38
  # pending) is "in-flight" and always kept on the board projection.
39
- TERMINAL_STATUSES = frozenset({"done", "merged", "failed", "cancelled", "advisory"})
39
+ # #2234: "refused_policy" is terminal exactly like "advisory" — see
40
+ # coord.agent.REFUSED_POLICY.
41
+ TERMINAL_STATUSES = frozenset(
42
+ {"done", "merged", "failed", "cancelled", "advisory", "refused_policy"}
43
+ )
40
44
 
41
45
  # #762: how many days of *terminal* assignment history the /board projection
42
46
  # carries. The board grew unbounded (1209 assignments / 4.37 MB) and overran
@@ -80,6 +80,15 @@ ASSIGNMENT_CANCELLED = "assignment_cancelled"
80
80
  # red failure — it's a "needs attention" state. Route it to a distinct
81
81
  # event so the dashboard can style it appropriately (warning, not failure).
82
82
  ASSIGNMENT_ADVISORY = "assignment_advisory"
83
+ # #2234: refused_policy (0-commit clean exit whose worker cited a standing
84
+ # repo-rule prohibition — `coord.agent.REFUSED_POLICY`) is the same shape as
85
+ # ASSIGNMENT_ADVISORY above but a distinct verdict: the worker did the
86
+ # CORRECT thing, not an undecided one. Without a distinct event it fell
87
+ # into the `else` branch below (commented "'failed' and any other
88
+ # unexpected terminal status") and was published to the phone dashboard as
89
+ # ASSIGNMENT_FAILED — reproducing, on this surface, the exact "worker that
90
+ # refused reads as a worker that failed" defect #2234 exists to fix.
91
+ ASSIGNMENT_REFUSED_POLICY = "assignment_refused_policy"
83
92
  # #846: an assignment running past its wall-clock threshold, or thrashing
84
93
  # through fix/review rounds without converging (coord.notify.attention_signal
85
94
  # — same detection core as the coordinator's GitHub-comment backstop).
@@ -226,6 +235,9 @@ async def _poll_once(
226
235
  # Bug 1 fix: three-way branch — cancelled must not fire FAILED.
227
236
  # #448: advisory routes to a distinct event so the dashboard does
228
237
  # not paint a 0-commit clean exit as a failure.
238
+ # #2234: refused_policy gets the same treatment as advisory —
239
+ # checked BEFORE the `else` catch-all, or it falls into
240
+ # ASSIGNMENT_FAILED like any other unrecognised terminal status.
229
241
  if status == "done":
230
242
  event_source.publish(ASSIGNMENT_COMPLETED, payload)
231
243
  elif status == "cancelled":
@@ -233,6 +245,9 @@ async def _poll_once(
233
245
  elif status == "advisory":
234
246
  payload["zero_commit_reason"] = entry.get("zero_commit_reason")
235
247
  event_source.publish(ASSIGNMENT_ADVISORY, payload)
248
+ elif status == "refused_policy":
249
+ payload["policy_refusal_reason"] = entry.get("policy_refusal_reason")
250
+ event_source.publish(ASSIGNMENT_REFUSED_POLICY, payload)
236
251
  else: # "failed" and any other unexpected terminal status
237
252
  payload["exit_code"] = entry.get("exit_code")
238
253
  event_source.publish(ASSIGNMENT_FAILED, payload)
@@ -1,4 +1,4 @@
1
- import{c as Fe,j as s,a as I,d as ho,r as l,e as de,R as go,f as Pe,g as z,h as Je,i as Ke,P as G,k as P,l as vo,m as ge,n as xo,o as Ea,D as gn,p as bo,X as wo,q as Pa,s as Ma,C as Da,v as ja,w as _a,T as Ia,x as Aa,y as Oa,B as H,z as Na,A as Bt,E as ka}from"./index-DltfZR5f.js";/**
1
+ import{c as Fe,j as s,a as I,d as ho,r as l,e as de,R as go,f as Pe,g as z,h as Je,i as Ke,P as G,k as P,l as vo,m as ge,n as xo,o as Ea,D as gn,p as bo,X as wo,q as Pa,s as Ma,C as Da,v as ja,w as _a,T as Ia,x as Aa,y as Oa,B as H,z as Na,A as Bt,E as ka}from"./index-DHn-RIJ8.js";/**
2
2
  * @license lucide-react v0.462.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{c as Bt,r as Ne,j as R,a as Vt,u as Zr,b as Qr,t as en}from"./index-DltfZR5f.js";/**
1
+ import{c as Bt,r as Ne,j as R,a as Vt,u as Zr,b as Qr,t as en}from"./index-DHn-RIJ8.js";/**
2
2
  * @license lucide-react v0.462.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.