code-coordinator 0.5.134__tar.gz → 0.5.135__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (861) hide show
  1. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/code_coordinator.egg-info/scm_version.json +2 -2
  4. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/commands/report.py +13 -1
  5. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/reports.py +507 -5
  6. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_reports.py +535 -4
  7. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tui/src/app/reports.rs +27 -1
  8. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tui/src/app/tests.rs +69 -0
  9. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/.claude/commands/board.md +0 -0
  10. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/.claude/commands/complete-session.md +0 -0
  11. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/.claude/commands/coordinator.md +0 -0
  12. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/.githooks/_lib.sh +0 -0
  13. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/.githooks/post-checkout +0 -0
  14. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/.githooks/post-commit +0 -0
  15. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/.githooks/post-merge +0 -0
  16. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  17. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/.github/coord-ci-acceptance.yml +0 -0
  18. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/.github/workflows/auto-release.yml +0 -0
  19. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/.github/workflows/cargo-test.yml +0 -0
  20. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/.github/workflows/publish.yml +0 -0
  21. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/.github/workflows/release-tui.yml +0 -0
  22. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/.github/workflows/test.yml +0 -0
  23. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/.gitignore +0 -0
  24. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/CLAUDE.md +0 -0
  25. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/GOAL.md +0 -0
  26. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/LICENSE +0 -0
  27. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/MANIFEST.in +0 -0
  28. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/README.md +0 -0
  29. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/code_coordinator.egg-info/SOURCES.txt +0 -0
  30. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/code_coordinator.egg-info/dependency_links.txt +0 -0
  31. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/code_coordinator.egg-info/entry_points.txt +0 -0
  32. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/code_coordinator.egg-info/requires.txt +0 -0
  33. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/code_coordinator.egg-info/scm_file_list.json +0 -0
  34. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/code_coordinator.egg-info/top_level.txt +0 -0
  35. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/__init__.py +0 -0
  36. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/_board_mapping.py +0 -0
  37. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/acceptance.py +0 -0
  38. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/acceptance_drivers.py +0 -0
  39. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/agent.py +0 -0
  40. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/agent_app.py +0 -0
  41. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/agent_update.py +0 -0
  42. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/agents/opencode/.gitignore +0 -0
  43. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/agents/opencode/agents/work.md +0 -0
  44. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/agents/opencode/routing.jsonc +0 -0
  45. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/audit.py +0 -0
  46. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/auto_loop.py +0 -0
  47. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/block_log.py +0 -0
  48. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/board_bool_guard.py +0 -0
  49. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/board_service.py +0 -0
  50. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/board_wire.py +0 -0
  51. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/brain.py +0 -0
  52. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/branch_model.py +0 -0
  53. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/bug_intake.py +0 -0
  54. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/cargo_cache.py +0 -0
  55. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/ci_github.py +0 -0
  56. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/ci_store.py +0 -0
  57. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/claim.py +0 -0
  58. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/cli.py +0 -0
  59. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/client.py +0 -0
  60. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/commands/__init__.py +0 -0
  61. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/commands/_common.py +0 -0
  62. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/commands/acceptance.py +0 -0
  63. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/commands/agent_ops.py +0 -0
  64. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/commands/audit.py +0 -0
  65. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/commands/chat.py +0 -0
  66. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/commands/dispatch.py +0 -0
  67. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/commands/dispatch_workers.py +0 -0
  68. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/commands/drive.py +0 -0
  69. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/commands/drive_queue.py +0 -0
  70. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/commands/gate_a.py +0 -0
  71. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/commands/gates.py +0 -0
  72. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/commands/issues.py +0 -0
  73. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/commands/lifecycle.py +0 -0
  74. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/commands/merge.py +0 -0
  75. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/commands/milestone.py +0 -0
  76. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/commands/plan_followup.py +0 -0
  77. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/commands/plans.py +0 -0
  78. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/commands/portal.py +0 -0
  79. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/commands/release.py +0 -0
  80. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/commands/repo.py +0 -0
  81. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/commands/review.py +0 -0
  82. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/commands/scorecard.py +0 -0
  83. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/commands/sessions.py +0 -0
  84. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/commands/setup.py +0 -0
  85. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/commands/status.py +0 -0
  86. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/commands/terminal.py +0 -0
  87. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/commands/test_gate.py +0 -0
  88. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/commands/tui.py +0 -0
  89. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/comments.py +0 -0
  90. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/config.py +0 -0
  91. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/config_reload.py +0 -0
  92. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/conflict_fix.py +0 -0
  93. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dao.py +0 -0
  94. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/__init__.py +0 -0
  95. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/fixture.py +0 -0
  96. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/index.html +0 -0
  97. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/server.py +0 -0
  98. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/terminal.py +0 -0
  99. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/.gitignore +0 -0
  100. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/components.json +0 -0
  101. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/dist/assets/Gallery-BoKs3mpY.js +0 -0
  102. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
  103. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/dist/assets/Terminal-CEsP08iX.js +0 -0
  104. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/dist/assets/index-CDHPlB6k.js +0 -0
  105. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
  106. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
  107. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
  108. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
  109. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
  110. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/dist/index.html +0 -0
  111. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
  112. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/dist/sw.js +0 -0
  113. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
  114. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
  115. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
  116. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
  117. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
  118. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
  119. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
  120. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
  121. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
  122. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
  123. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/eslint.config.js +0 -0
  124. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/index.html +0 -0
  125. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
  126. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/package-lock.json +0 -0
  127. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/package.json +0 -0
  128. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
  129. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/playwright.config.ts +0 -0
  130. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/postcss.config.js +0 -0
  131. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
  132. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
  133. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
  134. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/src/App.tsx +0 -0
  135. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/src/api/client.ts +0 -0
  136. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/src/api/generated.ts +0 -0
  137. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
  138. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
  139. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
  140. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
  141. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
  142. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
  143. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
  144. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
  145. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
  146. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
  147. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
  148. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
  149. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
  150. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
  151. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
  152. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
  153. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
  154. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
  155. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
  156. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
  157. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
  158. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
  159. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
  160. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
  161. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
  162. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
  163. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
  164. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
  165. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
  166. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
  167. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
  168. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
  169. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
  170. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
  171. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/src/index.css +0 -0
  172. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
  173. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
  174. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/src/main.tsx +0 -0
  175. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
  176. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
  177. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
  178. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
  179. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
  180. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
  181. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
  182. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
  183. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
  184. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
  185. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
  186. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
  187. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
  188. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
  189. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
  190. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
  191. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
  192. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
  193. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
  194. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
  195. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
  196. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/src/test-setup.ts +0 -0
  197. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
  198. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/tailwind.config.js +0 -0
  199. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/tsconfig.json +0 -0
  200. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/tsconfig.node.json +0 -0
  201. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dashboard/webapp/vite.config.ts +0 -0
  202. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/db.py +0 -0
  203. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dead_end.py +0 -0
  204. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/deploy/README.md +0 -0
  205. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/deploy/coord-agent.service +0 -0
  206. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/deploy/coord-db-backup.service +0 -0
  207. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/deploy/coord-db-backup.sh +0 -0
  208. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/deploy/coord-db-backup.timer +0 -0
  209. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/deploy/coord-drive-queue.service +0 -0
  210. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/deploy/coord-drive-queue.timer +0 -0
  211. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/deploy/coord-notify.service +0 -0
  212. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/deploy/coord-notify.timer +0 -0
  213. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/deploy/coord-release-propagate.service +0 -0
  214. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/deploy/coord-release-propagate.timer +0 -0
  215. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/deploy/coord-release-window.service +0 -0
  216. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/deploy/coord-release-window.timer +0 -0
  217. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/deploy/coord-serve.service +0 -0
  218. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/deploy/coord-web-dist-build.service +0 -0
  219. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/deploy/coord-web-dist-build.timer +0 -0
  220. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/deploy/coord-web.service +0 -0
  221. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/deploy_manifest.py +0 -0
  222. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/deploy_units.py +0 -0
  223. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/deps.py +0 -0
  224. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/diagnose.py +0 -0
  225. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dispatch.py +0 -0
  226. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/dist_name.py +0 -0
  227. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/drive.py +0 -0
  228. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/drive_queue.py +0 -0
  229. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/drive_state.py +0 -0
  230. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/events.py +0 -0
  231. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/failure_class.py +0 -0
  232. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/filelock.py +0 -0
  233. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/fleet_config_health.py +0 -0
  234. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/freshness.py +0 -0
  235. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/gate_a.py +0 -0
  236. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/gate_b.py +0 -0
  237. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/gate_snapshot.py +0 -0
  238. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/gates.py +0 -0
  239. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/github_ops.py +0 -0
  240. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/goal.py +0 -0
  241. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/graph_health.py +0 -0
  242. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/health/__init__.py +0 -0
  243. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/health/aggregate.py +0 -0
  244. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/health/checks/__init__.py +0 -0
  245. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/health/checks/agent_install.py +0 -0
  246. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/health/checks/cargo_targets.py +0 -0
  247. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/health/checks/claude_binary.py +0 -0
  248. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/health/checks/deploy_lane_facts.py +0 -0
  249. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/health/checks/disk.py +0 -0
  250. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/health/checks/fleet_board.py +0 -0
  251. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  252. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/health/checks/fleet_phantom.py +0 -0
  253. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/health/checks/fleet_unit_drift.py +0 -0
  254. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/health/checks/graph.py +0 -0
  255. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/health/checks/graphify_cli.py +0 -0
  256. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/health/checks/index_lock.py +0 -0
  257. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/health/checks/plan_usage.py +0 -0
  258. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/health/checks/repo_state.py +0 -0
  259. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/health/checks/spawned_coord.py +0 -0
  260. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/health/checks/timer_active.py +0 -0
  261. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/health/checks/toolchain.py +0 -0
  262. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/health/checks/unit_drift.py +0 -0
  263. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/health/checks/unit_enablement.py +0 -0
  264. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/health/checks/worktrees.py +0 -0
  265. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/health/cli.py +0 -0
  266. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/health/context.py +0 -0
  267. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/health/fleet_snapshot.py +0 -0
  268. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/health/models.py +0 -0
  269. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/health/pypi.py +0 -0
  270. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/health/registry.py +0 -0
  271. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/health/render.py +0 -0
  272. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/health/units.py +0 -0
  273. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/hooks.py +0 -0
  274. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/housekeeping.py +0 -0
  275. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/interactive.py +0 -0
  276. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/issue_store.py +0 -0
  277. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/liveness_auditor.py +0 -0
  278. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/machine_pause.py +0 -0
  279. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/merge_queue.py +0 -0
  280. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/milestone_chat.py +0 -0
  281. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/milestone_dispatch.py +0 -0
  282. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/milestone_gate.py +0 -0
  283. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/milestone_order.py +0 -0
  284. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/mock_author.py +0 -0
  285. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/models.py +0 -0
  286. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/network.py +0 -0
  287. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/new_issue_chat.py +0 -0
  288. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/notifier/__init__.py +0 -0
  289. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/notifier/baseline.py +0 -0
  290. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/notifier/cli.py +0 -0
  291. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/notifier/collect.py +0 -0
  292. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/notifier/digest.py +0 -0
  293. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/notifier/models.py +0 -0
  294. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/notifier/predicate.py +0 -0
  295. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/notifier/service.py +0 -0
  296. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/notifier/store.py +0 -0
  297. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/notifier/transport.py +0 -0
  298. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/notify.py +0 -0
  299. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/openapi.py +0 -0
  300. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/overlap_fence.py +0 -0
  301. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/overlap_predict.py +0 -0
  302. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/parentage.py +0 -0
  303. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/parentage_github.py +0 -0
  304. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/pipeline.py +0 -0
  305. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/plan_parser.py +0 -0
  306. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/plans.py +0 -0
  307. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/platform_paths.py +0 -0
  308. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/portal_bridge.py +0 -0
  309. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/portal_store.py +0 -0
  310. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/portal_sync.py +0 -0
  311. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/pr_body_lint.py +0 -0
  312. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/prereqs.py +0 -0
  313. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/progress.py +0 -0
  314. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/providers/__init__.py +0 -0
  315. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/providers/base.py +0 -0
  316. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/providers/claude.py +0 -0
  317. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/providers/claude_pty.py +0 -0
  318. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/providers/opencode.py +0 -0
  319. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/queue_diagnose.py +0 -0
  320. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/reconcile.py +0 -0
  321. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/refine_chat.py +0 -0
  322. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/release_cordon.py +0 -0
  323. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/release_propagate.py +0 -0
  324. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/release_verify.py +0 -0
  325. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/release_window.py +0 -0
  326. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/repo_edit.py +0 -0
  327. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/repo_onboard.py +0 -0
  328. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/revalidate.py +0 -0
  329. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/review.py +0 -0
  330. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/scorecard.py +0 -0
  331. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/serve_app.py +0 -0
  332. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/skills/portal-followup/SKILL.md +0 -0
  333. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/skills/update-issue/SKILL.md +0 -0
  334. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/smoke.py +0 -0
  335. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/spend_ceiling.py +0 -0
  336. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/split_work.py +0 -0
  337. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/stage_projection.py +0 -0
  338. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/state.py +0 -0
  339. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/test_author.py +0 -0
  340. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/test_chat.py +0 -0
  341. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/test_orchestrator.py +0 -0
  342. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/test_report.py +0 -0
  343. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/tui_release.py +0 -0
  344. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/usage.py +0 -0
  345. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/usage_limits.py +0 -0
  346. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/usage_rollup.py +0 -0
  347. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coord/worker_events.py +0 -0
  348. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/coordinator.example.yml +0 -0
  349. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/deploy/coord-agent.service +0 -0
  350. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/deploy/coord-db-backup.service +0 -0
  351. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/deploy/coord-db-backup.sh +0 -0
  352. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/deploy/coord-db-backup.timer +0 -0
  353. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/deploy/coord-drive-queue.service +0 -0
  354. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/deploy/coord-drive-queue.timer +0 -0
  355. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/deploy/coord-notify.service +0 -0
  356. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/deploy/coord-notify.timer +0 -0
  357. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/deploy/coord-release-propagate.service +0 -0
  358. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/deploy/coord-release-propagate.timer +0 -0
  359. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/deploy/coord-release-window.service +0 -0
  360. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/deploy/coord-release-window.timer +0 -0
  361. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/deploy/coord-serve.service +0 -0
  362. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/deploy/coord-web-dist-build.service +0 -0
  363. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/deploy/coord-web-dist-build.sh +0 -0
  364. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/deploy/coord-web-dist-build.timer +0 -0
  365. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/deploy/coord-web-rollback.sh +0 -0
  366. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/deploy/coord-web.service +0 -0
  367. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/deploy/node-shim.sh +0 -0
  368. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/docs/AGENT_OPERATIONS.md +0 -0
  369. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/docs/ARCHITECTURE.md +0 -0
  370. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/docs/ARCH_SECURITY_GATES.md +0 -0
  371. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/docs/COCKPIT.md +0 -0
  372. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/docs/CONTROL_CENTER.md +0 -0
  373. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/docs/COST_DISCIPLINE.md +0 -0
  374. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/docs/CROSS_PLATFORM.md +0 -0
  375. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/docs/CUSTOMER_PORTAL.md +0 -0
  376. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/docs/DRIVE_QUEUE.md +0 -0
  377. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/docs/EPHEMERAL_WORKERS.md +0 -0
  378. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/docs/FORGE_MIGRATION.md +0 -0
  379. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/docs/GRAPHIFY_SETUP.md +0 -0
  380. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/docs/ISSUE_GUIDANCE.md +0 -0
  381. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/docs/MAC_MINI.md +0 -0
  382. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  383. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/docs/NOTIFIER.md +0 -0
  384. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/docs/OPENCODE_VERIFICATION.md +0 -0
  385. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/docs/OPERATING_GOTCHAS.md +0 -0
  386. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/docs/ORACLE_LOOP.md +0 -0
  387. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/docs/PHONE_WEBAPP.md +0 -0
  388. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/docs/PIPELINE_V2.md +0 -0
  389. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/docs/PLATFORM_EVOLUTION.md +0 -0
  390. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/docs/SECOND_BACKEND.md +0 -0
  391. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/docs/STORE_SERVICE.md +0 -0
  392. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  393. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/docs/WEB_CONTROL_CENTER.md +0 -0
  394. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/docs/WSL_WINDOWS_WORKER.md +0 -0
  395. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/docs/mocks/web/README.md +0 -0
  396. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/docs/mocks/web/_tokens.css +0 -0
  397. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/docs/mocks/web/issue-detail.html +0 -0
  398. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/docs/mocks/web/pipeline-narrow.html +0 -0
  399. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/docs/mocks/web/pipeline-wide.html +0 -0
  400. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/graphify-out/.gitignore +0 -0
  401. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/install-agent.sh +0 -0
  402. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/pyproject.toml +0 -0
  403. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/scripts/audit_review_verdict_overrides.py +0 -0
  404. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  405. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/scripts/azure-workers/build-worker-image.sh +0 -0
  406. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/scripts/azure-workers/coordinator-machine.py +0 -0
  407. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/scripts/azure-workers/epic-down.sh +0 -0
  408. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/scripts/azure-workers/epic-up.sh +0 -0
  409. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/scripts/azure-workers/preflight.sh +0 -0
  410. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/scripts/azure-workers/provision-worker.sh +0 -0
  411. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  412. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  413. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/scripts/azure-workers/verify-github-token.sh +0 -0
  414. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/scripts/codegen.py +0 -0
  415. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/scripts/coord-test-runner.sh +0 -0
  416. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/scripts/drive-batch.sh +0 -0
  417. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/scripts/gen_board_fixture.py +0 -0
  418. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/scripts/next_release_tag.py +0 -0
  419. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/scripts/run_tests_in_populated_home.sh +0 -0
  420. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/scripts/run_tests_without_gh.sh +0 -0
  421. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/scripts/smoke_437_interactive.py +0 -0
  422. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/scripts/verify_878_review_capture.py +0 -0
  423. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/scripts/verify_release_published.py +0 -0
  424. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/scripts/verify_release_wheel.py +0 -0
  425. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/setup.cfg +0 -0
  426. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/SMOKE_SET.md +0 -0
  427. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/__init__.py +0 -0
  428. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  429. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/acceptance/ms-33/contract.md +0 -0
  430. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/acceptance/ms-33/manifest.yml +0 -0
  431. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  432. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  433. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  434. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  435. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/acceptance/ms-37/conftest.py +0 -0
  436. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/acceptance/ms-37/contract.md +0 -0
  437. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/acceptance/ms-37/manifest.yml +0 -0
  438. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  439. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  440. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/acceptance/ms-38/contract.md +0 -0
  441. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/acceptance/ms-38/manifest.yml +0 -0
  442. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  443. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  444. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  445. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  446. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  447. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  448. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  449. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  450. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  451. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  452. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/acceptance/ms-51/contract.md +0 -0
  453. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  454. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  455. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/acceptance/ms-51/manifest.yml +0 -0
  456. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  457. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/acceptance/ms-51/tsconfig.json +0 -0
  458. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
  459. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/acceptance/ms-65/contract.md +0 -0
  460. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/acceptance/ms-65/manifest.yml +0 -0
  461. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
  462. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
  463. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
  464. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
  465. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
  466. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
  467. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
  468. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
  469. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  470. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/conftest.py +0 -0
  471. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/fixtures/board-pipeline-basic.json +0 -0
  472. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  473. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  474. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  475. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  476. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/fixtures/playwright/all_pass.json +0 -0
  477. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  478. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/fixtures/playwright/mixed_fail.json +0 -0
  479. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  480. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  481. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/fixtures/playwright/skip.json +0 -0
  482. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/fixtures/playwright/truncated.json +0 -0
  483. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  484. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  485. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  486. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  487. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  488. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  489. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  490. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  491. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_acceptance.py +0 -0
  492. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_acceptance_drivers.py +0 -0
  493. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_agent.py +0 -0
  494. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_agent_api_error.py +0 -0
  495. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_agent_app.py +0 -0
  496. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_agent_branch_base.py +0 -0
  497. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_agent_branch_capture.py +0 -0
  498. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_agent_config_free_1712.py +0 -0
  499. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_agent_deploy_units_endpoint.py +0 -0
  500. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_agent_dirty_worktree.py +0 -0
  501. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_agent_graph_self_heal.py +0 -0
  502. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_agent_health_h3.py +0 -0
  503. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_agent_idle_restart.py +0 -0
  504. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_agent_push_failure.py +0 -0
  505. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_agent_reap.py +0 -0
  506. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_agent_repos_and_pull.py +0 -0
  507. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_agent_restart_services_endpoint.py +0 -0
  508. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_agent_startup_diagnostics.py +0 -0
  509. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_agent_update.py +0 -0
  510. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_agent_update_bluegreen.py +0 -0
  511. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_agent_usage_limit.py +0 -0
  512. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_agent_zero_commit.py +0 -0
  513. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_ambient_home_isolation.py +0 -0
  514. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_approve_reject_plan.py +0 -0
  515. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_approve_usage_gate.py +0 -0
  516. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_assignment_already_recorded_daemon.py +0 -0
  517. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_audit_log.py +0 -0
  518. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_audit_outcome.py +0 -0
  519. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_audit_query.py +0 -0
  520. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_auto_loop.py +0 -0
  521. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_auto_release_publish_2035.py +0 -0
  522. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_base_checkout_restore.py +0 -0
  523. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_block_log.py +0 -0
  524. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_board_cap_762.py +0 -0
  525. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_board_fixture.py +0 -0
  526. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_board_read_path.py +0 -0
  527. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_board_service.py +0 -0
  528. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_board_state.py +0 -0
  529. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_board_wire.py +0 -0
  530. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_brain.py +0 -0
  531. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_branch_model.py +0 -0
  532. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_bug_intake.py +0 -0
  533. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_build_worker_image_env_update.py +0 -0
  534. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_cargo_cache.py +0 -0
  535. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_ci_acceptance_gate_1950.py +0 -0
  536. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_ci_parity_2091.py +0 -0
  537. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_ci_store.py +0 -0
  538. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_claim.py +0 -0
  539. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_cli_acceptance.py +0 -0
  540. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_cli_assign.py +0 -0
  541. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  542. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_cli_assign_interactive_remote.py +0 -0
  543. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_cli_assign_provider.py +0 -0
  544. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  545. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_cli_audit.py +0 -0
  546. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_cli_chat_continue.py +0 -0
  547. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_cli_diagnose_config_provenance.py +0 -0
  548. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_cli_diagnose_graph.py +0 -0
  549. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_cli_doctor.py +0 -0
  550. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_cli_doctor_config_free_1801.py +0 -0
  551. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  552. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_cli_drive.py +0 -0
  553. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_cli_drive_queue.py +0 -0
  554. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_cli_escalate.py +0 -0
  555. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_cli_fix_headless_review.py +0 -0
  556. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_cli_gate_a.py +0 -0
  557. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_cli_install_drift.py +0 -0
  558. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_cli_install_skills.py +0 -0
  559. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_cli_issue_create_label.py +0 -0
  560. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_cli_issue_reopen.py +0 -0
  561. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_cli_merge.py +0 -0
  562. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_cli_milestone_assign.py +0 -0
  563. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_cli_milestone_capture.py +0 -0
  564. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_cli_milestone_chat_add_child.py +0 -0
  565. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_cli_milestone_dispatch.py +0 -0
  566. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_cli_milestone_gate_b.py +0 -0
  567. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_cli_milestone_gate_c.py +0 -0
  568. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_cli_milestone_order.py +0 -0
  569. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  570. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_cli_milestone_ship.py +0 -0
  571. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_cli_network.py +0 -0
  572. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_cli_new_issue_chat.py +0 -0
  573. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_cli_plans.py +0 -0
  574. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_cli_portal.py +0 -0
  575. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_cli_pull_artifact.py +0 -0
  576. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_cli_queue.py +0 -0
  577. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_cli_reattach_sessions.py +0 -0
  578. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_cli_refine_board.py +0 -0
  579. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_cli_release_preflight.py +0 -0
  580. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_cli_release_propagate.py +0 -0
  581. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_cli_release_window.py +0 -0
  582. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_cli_repo_2220.py +0 -0
  583. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_cli_scorecard.py +0 -0
  584. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_cli_set_review_findings.py +0 -0
  585. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_cli_status_advisory_terminal.py +0 -0
  586. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_cli_status_merge_queue.py +0 -0
  587. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_cli_status_provider.py +0 -0
  588. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_cli_status_review_finalizing.py +0 -0
  589. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_cli_status_test_failed_tag.py +0 -0
  590. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_cli_status_usage_limit.py +0 -0
  591. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_cli_sync_comments_873.py +0 -0
  592. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_cli_test_plan.py +0 -0
  593. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_cli_track.py +0 -0
  594. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_cli_tui_update.py +0 -0
  595. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_cli_wait.py +0 -0
  596. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_client_base_install.py +0 -0
  597. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_comments.py +0 -0
  598. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_completion_summary.py +0 -0
  599. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_config.py +0 -0
  600. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_config_acceptance.py +0 -0
  601. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_config_audit.py +0 -0
  602. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_config_pricing.py +0 -0
  603. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  604. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_config_usage_gate.py +0 -0
  605. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_conflict_fix.py +0 -0
  606. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_conflict_fix_semantic.py +0 -0
  607. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_coord_test.py +0 -0
  608. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_coord_test_runner_baseline.py +0 -0
  609. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_coord_test_runner_populated_home.py +0 -0
  610. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_coord_test_runner_routing.py +0 -0
  611. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_coord_test_runner_toolchain.py +0 -0
  612. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_coord_web_sse_restart_live.py +0 -0
  613. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_coordinator_machine.py +0 -0
  614. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_cross_platform_imports.py +0 -0
  615. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_dashboard.py +0 -0
  616. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_dashboard_fixture.py +0 -0
  617. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_dashboard_terminal.py +0 -0
  618. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_dashboard_terminal_live.py +0 -0
  619. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_db.py +0 -0
  620. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_dead_end.py +0 -0
  621. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_deploy_coord_db_backup.py +0 -0
  622. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_deploy_coord_web_dist.py +0 -0
  623. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_deploy_coord_web_rollback.py +0 -0
  624. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_deploy_drive_queue_unit.py +0 -0
  625. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_deploy_manifest.py +0 -0
  626. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_deploy_units_lane.py +0 -0
  627. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_deploy_web_unit.py +0 -0
  628. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_deps.py +0 -0
  629. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_diagnose.py +0 -0
  630. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_dispatch.py +0 -0
  631. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_dispatch_target_validation.py +0 -0
  632. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_dist_name.py +0 -0
  633. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_done_housekeeping.py +0 -0
  634. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_drive.py +0 -0
  635. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_drive_queue.py +0 -0
  636. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_drive_state.py +0 -0
  637. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_drive_tmux.py +0 -0
  638. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_epic_up_capability_detection.py +0 -0
  639. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  640. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_epic_up_image_provenance.py +0 -0
  641. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_errors.py +0 -0
  642. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_events.py +0 -0
  643. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_failure_class.py +0 -0
  644. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_filelock.py +0 -0
  645. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  646. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_fix_of_force_override.py +0 -0
  647. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_fleet_config_health.py +0 -0
  648. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_fleet_health_probes.py +0 -0
  649. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_fleet_health_snapshot.py +0 -0
  650. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_freshness.py +0 -0
  651. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_gate_a.py +0 -0
  652. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_gate_b.py +0 -0
  653. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_gate_snapshot_staleness.py +0 -0
  654. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_gates.py +0 -0
  655. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  656. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_generated_types_fixture.py +0 -0
  657. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_github_ops.py +0 -0
  658. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_goal.py +0 -0
  659. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_graph_health.py +0 -0
  660. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_graph_selfheal_absent_2237.py +0 -0
  661. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_handoff.py +0 -0
  662. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_health_checks.py +0 -0
  663. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_health_cli.py +0 -0
  664. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_health_cli_graph.py +0 -0
  665. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_health_config.py +0 -0
  666. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_health_context.py +0 -0
  667. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_health_deploy_lane_facts.py +0 -0
  668. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_health_incident_regression.py +0 -0
  669. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_health_pypi.py +0 -0
  670. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_health_registry.py +0 -0
  671. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_health_timer_active.py +0 -0
  672. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_health_toolchain.py +0 -0
  673. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_health_unit_drift.py +0 -0
  674. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_health_unit_enablement.py +0 -0
  675. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_hooks.py +0 -0
  676. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_human_attended_437.py +0 -0
  677. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_init.py +0 -0
  678. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_integration.py +0 -0
  679. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_interactive_briefing_echo.py +0 -0
  680. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_interactive_prefill_state.py +0 -0
  681. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_interactive_session_relaunch.py +0 -0
  682. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_interactive_test_verdict_backstop.py +0 -0
  683. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_interactive_token_attribution.py +0 -0
  684. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_interactive_worktree.py +0 -0
  685. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_issue_store_seam.py +0 -0
  686. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_liveness_auditor.py +0 -0
  687. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_liveness_notify.py +0 -0
  688. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_machine_pause.py +0 -0
  689. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_merge_queue.py +0 -0
  690. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_merge_verify.py +0 -0
  691. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_milestone_chat.py +0 -0
  692. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_milestone_dispatch.py +0 -0
  693. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_milestone_gate.py +0 -0
  694. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_milestone_order.py +0 -0
  695. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_milestone_seam.py +0 -0
  696. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_mock_author.py +0 -0
  697. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_model_tiering.py +0 -0
  698. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_models.py +0 -0
  699. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_models_config_labels.py +0 -0
  700. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_needs_attention.py +0 -0
  701. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_network.py +0 -0
  702. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_new_issue_chat.py +0 -0
  703. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_next_release_tag.py +0 -0
  704. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_no_direct_gh_calls.py +0 -0
  705. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_node_shim.py +0 -0
  706. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_notifier_baseline.py +0 -0
  707. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_notifier_cli.py +0 -0
  708. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_notifier_collect.py +0 -0
  709. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_notifier_config.py +0 -0
  710. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_notifier_drive_seam.py +0 -0
  711. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_notifier_isolation.py +0 -0
  712. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_notifier_predicate.py +0 -0
  713. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_notifier_quiet_hours.py +0 -0
  714. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_notifier_service.py +0 -0
  715. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_notify.py +0 -0
  716. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_notify_drain.py +0 -0
  717. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_openapi.py +0 -0
  718. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_operational_defaults.py +0 -0
  719. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_overlap_fence.py +0 -0
  720. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_overlap_predict.py +0 -0
  721. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_packaged_deploy_units.py +0 -0
  722. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_parentage.py +0 -0
  723. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_paste_landed.py +0 -0
  724. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_pipeline.py +0 -0
  725. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_plan_followup_approve_plan_command.py +0 -0
  726. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_plan_followup_pr_command.py +0 -0
  727. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_plan_followup_review_command.py +0 -0
  728. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_plan_only.py +0 -0
  729. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_plan_parser.py +0 -0
  730. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_platform_paths.py +0 -0
  731. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_portal_bridge.py +0 -0
  732. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_portal_config.py +0 -0
  733. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_portal_sync.py +0 -0
  734. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_pr_body_lint.py +0 -0
  735. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_prereqs.py +0 -0
  736. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_production_db_guard.py +0 -0
  737. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_progress.py +0 -0
  738. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_provider_seam.py +0 -0
  739. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_providers.py +0 -0
  740. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_providers_config_labels.py +0 -0
  741. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_providers_pty.py +0 -0
  742. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_quiet_hours.py +0 -0
  743. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_quiet_hours_store_2146.py +0 -0
  744. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_reap_merged_sessions.py +0 -0
  745. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_reap_stale_interactive_tick.py +0 -0
  746. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_reconcile.py +0 -0
  747. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_reconcile_branch.py +0 -0
  748. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_reconcile_completions.py +0 -0
  749. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_reconcile_merges.py +0 -0
  750. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_reconcile_no_agent_record.py +0 -0
  751. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_reconcile_usage_limit_done.py +0 -0
  752. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_refine_chat.py +0 -0
  753. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_release_cordon_2101.py +0 -0
  754. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  755. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_release_cordon_deadlock_2240.py +0 -0
  756. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_release_propagate.py +0 -0
  757. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_release_unified_1242.py +0 -0
  758. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_release_verify.py +0 -0
  759. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_release_window.py +0 -0
  760. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_remote_auto_prune.py +0 -0
  761. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_remote_interactive_reaper.py +0 -0
  762. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_repo_edit_2220.py +0 -0
  763. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_repo_graph_fleet_2237.py +0 -0
  764. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_repo_onboard_2220.py +0 -0
  765. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_report_result_push.py +0 -0
  766. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_retry.py +0 -0
  767. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_retry_advisory_1606.py +0 -0
  768. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_retry_type_1636.py +0 -0
  769. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_revalidate.py +0 -0
  770. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_review.py +0 -0
  771. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_review_end_review_without_verdict.py +0 -0
  772. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_review_parse_failure_diagnostic.py +0 -0
  773. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_review_reaffirm.py +0 -0
  774. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_review_state.py +0 -0
  775. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_review_verdict_backstop.py +0 -0
  776. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_review_verdict_override_audit.py +0 -0
  777. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_review_verdict_relay.py +0 -0
  778. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_review_zero_commits.py +0 -0
  779. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_scoped_review_wiring.py +0 -0
  780. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_scorecard.py +0 -0
  781. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_serve.py +0 -0
  782. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_serve_app_board_trim.py +0 -0
  783. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_session.py +0 -0
  784. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_slice_issue_attribution.py +0 -0
  785. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_smoke.py +0 -0
  786. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_smoke_live_checkout_restore.py +0 -0
  787. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_smoke_workflow.py +0 -0
  788. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_spend_ceiling.py +0 -0
  789. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_spend_ceiling_coordinator.py +0 -0
  790. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_split.py +0 -0
  791. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_split_work.py +0 -0
  792. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_stage_projection.py +0 -0
  793. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_stalled_pipeline.py +0 -0
  794. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_state.py +0 -0
  795. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_state_review_findings_daemon.py +0 -0
  796. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_status_fleet_footer.py +0 -0
  797. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_stop_1567.py +0 -0
  798. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_stuck.py +0 -0
  799. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_terminal_command.py +0 -0
  800. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_test_author.py +0 -0
  801. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_test_chat.py +0 -0
  802. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_test_orchestrator.py +0 -0
  803. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_test_report.py +0 -0
  804. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_test_verdict_parsing.py +0 -0
  805. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_test_verdict_transcript_floor.py +0 -0
  806. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_thin_client_board_audit.py +0 -0
  807. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_thin_client_config_load_1080.py +0 -0
  808. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_thin_client_daemon_routing_906.py +0 -0
  809. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_tmux_host.py +0 -0
  810. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_tmux_session.py +0 -0
  811. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_transcript_floor.py +0 -0
  812. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_usage.py +0 -0
  813. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_usage_limits.py +0 -0
  814. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_usage_rollup.py +0 -0
  815. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_venv_live_install_2121.py +0 -0
  816. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_version_single_source.py +0 -0
  817. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_watch.py +0 -0
  818. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  819. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_worker_events.py +0 -0
  820. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_worker_image_pin_sync.py +0 -0
  821. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_worker_safety.py +0 -0
  822. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_worker_test_scoping.py +0 -0
  823. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_worktree.py +0 -0
  824. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  825. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tui/Cargo.lock +0 -0
  826. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tui/Cargo.toml +0 -0
  827. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tui/cargo-config-local-quadraui.toml.example +0 -0
  828. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tui/src/app/audit.rs +0 -0
  829. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tui/src/app/chat.rs +0 -0
  830. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tui/src/app/data.rs +0 -0
  831. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tui/src/app/dialogs.rs +0 -0
  832. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tui/src/app/doc_tabs.rs +0 -0
  833. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tui/src/app/drive.rs +0 -0
  834. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tui/src/app/drive_queue.rs +0 -0
  835. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tui/src/app/escalation.rs +0 -0
  836. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tui/src/app/events.rs +0 -0
  837. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tui/src/app/fixtures.rs +0 -0
  838. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tui/src/app/fleet_health.rs +0 -0
  839. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tui/src/app/fleet_sessions.rs +0 -0
  840. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tui/src/app/fleet_terminals.rs +0 -0
  841. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tui/src/app/format.rs +0 -0
  842. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tui/src/app/milestone_dag.rs +0 -0
  843. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tui/src/app/mod.rs +0 -0
  844. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tui/src/app/msv.rs +0 -0
  845. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tui/src/app/pipeline.rs +0 -0
  846. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tui/src/app/plans.rs +0 -0
  847. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tui/src/app/render.rs +0 -0
  848. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tui/src/app/sessions.rs +0 -0
  849. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tui/src/app/settings_ui.rs +0 -0
  850. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tui/src/app/sidebar.rs +0 -0
  851. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tui/src/app/terminal.rs +0 -0
  852. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tui/src/app/types.rs +0 -0
  853. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tui/src/app/workspace.rs +0 -0
  854. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tui/src/bin/gtk.rs +0 -0
  855. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tui/src/commands.rs +0 -0
  856. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tui/src/lib.rs +0 -0
  857. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tui/src/main.rs +0 -0
  858. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tui/src/settings.rs +0 -0
  859. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tui/tests/acceptance.rs +0 -0
  860. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/tui/tests/cli.rs +0 -0
  861. {code_coordinator-0.5.134 → code_coordinator-0.5.135}/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.134
3
+ Version: 0.5.135
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.134
3
+ Version: 0.5.135
4
4
  Summary: Coordinate Claude Code workers across multiple machines and repos.
5
5
  Author-email: John Donaghy <johnfdonaghy@gmail.com>
6
6
  License-Expression: LicenseRef-FSL-1.1-MIT
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "0.5.134",
2
+ "tag": "0.5.135",
3
3
  "distance": 0,
4
- "node": "g8e02ded460a307fc964b29480d89526f828fb9b9",
4
+ "node": "g9359f42f1ecf543611d7068c3cd4cc7644804eb4",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-18"
@@ -117,7 +117,19 @@ def _format_cell(column: str, row: dict, meta: dict | None = None) -> str:
117
117
  if isinstance(value, bool):
118
118
  return "yes" if value else "no"
119
119
  if isinstance(value, (list, tuple)):
120
- return ",".join(str(v) for v in value) if value else "-"
120
+ if not value:
121
+ return "-"
122
+ if all(isinstance(v, dict) for v in value):
123
+ # The `decisions` report's `options` column (#2369): a list of
124
+ # `{label, command_or_action, ...}` dicts, not the scalar
125
+ # strings every other `kind: list` column holds. Rendered
126
+ # through the same rule the CSV export and the coord-tui
127
+ # Reports panel use, so a dict-shaped list item never falls
128
+ # through to a raw Python dict repr here.
129
+ from coord.reports import format_option_cell # noqa: PLC0415
130
+
131
+ return " | ".join(format_option_cell(v) for v in value)
132
+ return ",".join(str(v) for v in value)
121
133
  if isinstance(value, dict):
122
134
  # drive_exit and friends: the two fields that matter, inline.
123
135
  if "exit_code" in value:
@@ -19,12 +19,16 @@ Three layers, deliberately separated so the interesting one is testable:
19
19
  window is covered and reports ``truncated=True`` if it genuinely could
20
20
  not finish. Never silently drops the tail (#1742: "no silent caps").
21
21
  3. :data:`REPORTS` + :func:`run_report` — the registry and its parameter
22
- validation. Four entries: ``issue-activity``; ``drive-queue-status``
22
+ validation. Five entries: ``issue-activity``; ``drive-queue-status``
23
23
  (#1805), a **live snapshot** of ``drive_queue`` (no window, no audit
24
24
  trail, no clock beyond ``generated_at``) rather than a fold over history;
25
- and ``usage`` (#1763), a cost/token fold over board assignment rows that
26
- delegates every number to :mod:`coord.usage_rollup` priced with the
27
- daemon's own loaded ``pricing:`` config the report that replaced
25
+ ``decisions`` (#2369), option-based cards folded from the SAME live
26
+ snapshot plus :func:`coord.state.list_drive_escalations` "why is this
27
+ stuck, and what do I run" per root cause, with a downstream `after=`
28
+ cascade collapsed into its root's card rather than shown as N separate
29
+ problems; and ``usage`` (#1763), a cost/token fold over board assignment
30
+ rows that delegates every number to :mod:`coord.usage_rollup` priced with
31
+ the daemon's own loaded ``pricing:`` config — the report that replaced
28
32
  coord-tui's ``panel:usage`` and its hardcoded pricing snapshot; and
29
33
  ``queue-outcomes`` (#2270), the one number the morning report is for —
30
34
  *what fraction of the queue got over the line without a human* — folded
@@ -73,6 +77,8 @@ __all__ = [
73
77
  "run_issue_activity",
74
78
  "fold_drive_queue_status",
75
79
  "run_drive_queue_status",
80
+ "fold_decisions",
81
+ "run_decisions",
76
82
  "resolve_usage_window",
77
83
  "fold_usage",
78
84
  "run_usage",
@@ -1158,6 +1164,444 @@ def run_drive_queue_status(
1158
1164
  )
1159
1165
 
1160
1166
 
1167
+ # ── decisions: escalations + blocked queue roots as option-based cards ────
1168
+ #
1169
+ # #2369. "Why is the fleet stuck" today means opening `drive-queue list`,
1170
+ # `merge --plan`, `gh pr checks` and sometimes a CI log, then translating
1171
+ # dense infra text into something actionable by hand. The raw material
1172
+ # already exists — `coord.state.list_drive_escalations()` (written by
1173
+ # `coord/drive.py`'s `_escalate_merge`/`_escalate_dead_end`) already carries
1174
+ # a structured `reason` + `proposed_command` per issue, and a `blocked`/
1175
+ # `failed` `drive_queue` row's `last_reason` already embeds "inspect:" /
1176
+ # "remedy:"-shaped lines a human reads by eye. This report folds BOTH
1177
+ # sources into one card per root cause — reusing `proposed_command`
1178
+ # verbatim and PARSING the embedded lines rather than re-deriving either.
1179
+ #
1180
+ # Read-only and additive, same posture as `drive-queue-status` above: no new
1181
+ # escalation-detection logic, no new persistence, and no touch on `coord
1182
+ # status`/`coord health`/`coord diagnose`.
1183
+
1184
+ DECISIONS_COLUMNS = [
1185
+ "repo",
1186
+ "issue",
1187
+ "title",
1188
+ "why",
1189
+ "options",
1190
+ "downstream_count",
1191
+ "downstream",
1192
+ "since",
1193
+ "source",
1194
+ ]
1195
+
1196
+ # One entry per DECISIONS_COLUMNS entry, same order (#1760).
1197
+ DECISIONS_COLUMN_META = [
1198
+ ColumnMeta(id="repo", label="Repo", kind="text"),
1199
+ ColumnMeta(id="issue", label="Issue", kind="int", align="right"),
1200
+ ColumnMeta(id="title", label="Title", kind="text", weight=2.0),
1201
+ ColumnMeta(id="why", label="Why", kind="text", weight=3.0),
1202
+ ColumnMeta(id="options", label="Options", kind="list", weight=3.0),
1203
+ ColumnMeta(id="downstream_count", label="Downstream", kind="int", align="right"),
1204
+ ColumnMeta(id="downstream", label="Downstream Of This", kind="list"),
1205
+ ColumnMeta(id="since", label="Since", kind="timestamp"),
1206
+ ColumnMeta(id="source", label="Source", kind="enum"),
1207
+ ]
1208
+
1209
+ # `_resolve_prereqs`'s "queued but blocked/failed" verdict — the ONE
1210
+ # unsatisfiable `after=` shape `coord/drive_queue.py`'s own blocked-row
1211
+ # handling (and this fold) treats as "downstream of another card", never a
1212
+ # novel root cause. `_is_unsatisfiable_prereq_reason` is the actual reused
1213
+ # predicate (imported below) — reused conceptually, not mechanically, same
1214
+ # as #2369's own docstring says of `coord/dead_end.py`.
1215
+ # Imported lazily (mirrors every other `coord.drive_queue` import in this
1216
+ # module) to keep this module importable from the thin client base install.
1217
+ def _unsatisfiable_prereq_reason(text: str) -> bool:
1218
+ from coord.drive_queue import _is_unsatisfiable_prereq_reason # noqa: PLC0415
1219
+
1220
+ return _is_unsatisfiable_prereq_reason(text)
1221
+
1222
+
1223
+ # A "Label: rest of the line" shape this fold recognises as an embedded
1224
+ # option — deliberately narrow (an allowlist below), so a `gates: k=v | ...`
1225
+ # or `last board state: ...` line (informational, not actionable) is never
1226
+ # mistaken for one.
1227
+ _LABELED_LINE_RE = re.compile(r"^(?P<label>[A-Za-z][A-Za-z '-]{1,40}?):\s*(?P<rest>\S.*)$")
1228
+ _OR_RERUN_RE = re.compile(r"^or\s+re-run\s+(?P<rest>\S.*)$", re.IGNORECASE)
1229
+
1230
+ # `coord/drive_queue.py`'s `reason = f"{own_reason} — {explanation}"` (the
1231
+ # #1844/#2019 "permanent" branch, and its `parking without spending an
1232
+ # attempt` siblings) appends its rationale to `own_reason`'s LAST line with
1233
+ # no newline in between — so when that last line is itself the "or re-run
1234
+ # ..."/labeled-line an option is parsed from, the appended rationale reads
1235
+ # as if it were part of the command (#2369 review: the #2283 dead-end
1236
+ # fixture's `Re-run` option ends up with "... skip JIT authoring. — the
1237
+ # board row is terminal and unactionable ..., blocking without spending an
1238
+ # attempt" as its `command_or_action`). `" — "` (em dash, never a bare
1239
+ # `--` flag) is the one join marker this repo uses for "reason + why", so
1240
+ # stripping from its first occurrence recovers just the command.
1241
+ _APPENDED_RATIONALE_RE = re.compile(r"\s+—\s+.*$")
1242
+
1243
+
1244
+ def _strip_appended_rationale(text: str) -> str:
1245
+ return _APPENDED_RATIONALE_RE.sub("", text).strip()
1246
+
1247
+ # Every label `coord/drive.py`'s `_die`/`_escalate_*` calls are already
1248
+ # known to embed (see #2283's "inspect:"/"Re-author by hand:"/"or re-run"
1249
+ # shape and coord-portal#107's "inspect: coord merge --plan --repo ..."
1250
+ # shape, both quoted in #2369) — reused verbatim, not reinvented.
1251
+ _OPTION_LABEL_WHAT_HAPPENS = {
1252
+ "inspect": "Shows the raw log for the failed run.",
1253
+ "inspect the gates": "Shows the current merge/test/review gate state.",
1254
+ "remedy": "Applies the documented remedy for this block.",
1255
+ "recover": "Runs the recorded recovery command.",
1256
+ "recovery": "Runs the recorded recovery command.",
1257
+ "proposed": "Runs the proposed fix.",
1258
+ "re-author by hand": "Manually re-authors the slice from scratch.",
1259
+ "re-dispatch by hand": "Manually re-dispatches the failed step.",
1260
+ "resolve by hand": "Manually resolves the block, then clears the record.",
1261
+ "continue by hand": "Manually continues the work the automation stopped.",
1262
+ "re-run": "Re-runs the drive with the named flag.",
1263
+ }
1264
+
1265
+
1266
+ def _parse_reason_options(reason: str) -> list[dict[str, Any]]:
1267
+ """Pull the de facto options already embedded in a `last_reason` (#2283 /
1268
+ coord-portal#107's worked shapes) rather than inventing new ones.
1269
+
1270
+ The first line is the headline ("why"); every line after it is a
1271
+ candidate. Recognises `"<label>: <command>"` lines whose label is in
1272
+ :data:`_OPTION_LABEL_WHAT_HAPPENS`, and the `"or re-run ..."` shape
1273
+ `coord/drive.py` writes with no colon. Anything else (a `gates:` summary,
1274
+ a diagnostic block line, plain prose) is silently skipped — it isn't an
1275
+ option, and #2369 explicitly scopes this to reformatting, not a new
1276
+ taxonomy of failure classes.
1277
+ """
1278
+ options: list[dict[str, Any]] = []
1279
+ lines = (reason or "").splitlines()[1:]
1280
+ for raw_line in lines:
1281
+ line = raw_line.strip().lstrip("-*•").strip()
1282
+ if not line:
1283
+ continue
1284
+ match = _LABELED_LINE_RE.match(line)
1285
+ if match:
1286
+ label = match.group("label").strip()
1287
+ key = label.lower()
1288
+ if key in _OPTION_LABEL_WHAT_HAPPENS:
1289
+ options.append(
1290
+ {
1291
+ "label": label[:1].upper() + label[1:],
1292
+ "command_or_action": _strip_appended_rationale(
1293
+ match.group("rest")
1294
+ ),
1295
+ "what_happens": _OPTION_LABEL_WHAT_HAPPENS[key],
1296
+ }
1297
+ )
1298
+ continue
1299
+ rerun = _OR_RERUN_RE.match(line)
1300
+ if rerun:
1301
+ options.append(
1302
+ {
1303
+ "label": "Re-run",
1304
+ "command_or_action": _strip_appended_rationale(
1305
+ rerun.group("rest")
1306
+ ),
1307
+ "what_happens": _OPTION_LABEL_WHAT_HAPPENS["re-run"],
1308
+ }
1309
+ )
1310
+ return options[:4]
1311
+
1312
+
1313
+ def _generic_fallback_option(repo: str, row: Mapping[str, Any]) -> dict[str, Any]:
1314
+ """The card #2369 promises even a genuinely novel shape gets — never a
1315
+ silently dropped stuck item. Merge-shaped text (mentions "merge"/"CI"/
1316
+ "check", the coord-portal#107 shape) points at `coord merge --plan`;
1317
+ anything else points at `coord drive-queue list --repo <repo>` — the one
1318
+ command guaranteed to resolve. A `coord log <id>` fallback was tried
1319
+ first and dropped (#2369 review): a drive-queue row's `session_name` is
1320
+ the *tmux session name* `drive_session_name` writes for `tmux attach`,
1321
+ not a `coord log` `ASSIGNMENT_ID`, and `entry_key(repo, issue)`
1322
+ (`"repo#issue"`) isn't one either — both would hand the operator a
1323
+ command that resolves nothing."""
1324
+ reason = str(row.get("last_reason") or "").lower()
1325
+ if any(word in reason for word in ("merge", " ci ", "check", "ci)")):
1326
+ return {
1327
+ "label": "Inspect the merge plan",
1328
+ "command_or_action": f"coord merge --plan --repo {repo}",
1329
+ "what_happens": "Shows the current merge/test/review gate state for this repo.",
1330
+ }
1331
+ issue = int(row.get("issue_number") or 0)
1332
+ return {
1333
+ "label": "Inspect the queue row",
1334
+ "command_or_action": f"coord drive-queue list --repo {repo}",
1335
+ "what_happens": f"Shows this and every other queued entry for {repo} (look for #{issue}).",
1336
+ }
1337
+
1338
+
1339
+ def _first_line(text: str) -> str:
1340
+ stripped = (text or "").strip()
1341
+ return stripped.splitlines()[0].strip() if stripped else ""
1342
+
1343
+
1344
+ def _looks_stale_smoke(reason: str) -> bool:
1345
+ low = (reason or "").lower()
1346
+ return "stale" in low and "smoke" in low
1347
+
1348
+
1349
+ def _escalation_why(reason: str) -> str:
1350
+ """The escalation's own `reason`, paired with what it means practically
1351
+ when the shape is recognised (#2369's #2360 worked example: a stale
1352
+ smoke verdict). A bare status string is not explanation enough on its
1353
+ own — anything NOT recognised still gets the raw reason verbatim rather
1354
+ than a guessed rephrasing (#2369: no new taxonomy of failure classes)."""
1355
+ text = (reason or "").strip() or "(no reason recorded)"
1356
+ if _looks_stale_smoke(text):
1357
+ return (
1358
+ f"{text.rstrip('.')}. Main moved forward past what was tested, "
1359
+ "so the system can't confirm the tested code is still safe to "
1360
+ "merge without a human saying so."
1361
+ )
1362
+ return text
1363
+
1364
+
1365
+ def _decisions_notes(rows: Sequence[Mapping[str, Any]]) -> list[str]:
1366
+ """The headline note for a set of already-finished decision cards.
1367
+
1368
+ A function of *rows* alone (never the unfiltered fold input) so it can
1369
+ be recomputed after `run_decisions` applies its `repo` filter (#2369
1370
+ review: computing this once, before the filter, left a `--repo`-scoped
1371
+ call reporting a global count next to a repo-scoped row list)."""
1372
+ if not rows:
1373
+ return [
1374
+ "Nothing needs a decision — no blocked/failed drive-queue "
1375
+ "entries and no open escalations."
1376
+ ]
1377
+ total_downstream = sum(r["downstream_count"] for r in rows)
1378
+ headline = f"{len(rows)} decision{'s' if len(rows) != 1 else ''} pending"
1379
+ if total_downstream:
1380
+ headline += (
1381
+ f" ({total_downstream} more entr"
1382
+ f"{'y' if total_downstream == 1 else 'ies'} waiting on them)"
1383
+ )
1384
+ return [headline + "."]
1385
+
1386
+
1387
+ def fold_decisions(
1388
+ escalations: Iterable[Mapping[str, Any]],
1389
+ queue_entries: Iterable[Mapping[str, Any]],
1390
+ generated_at: float,
1391
+ *,
1392
+ titles: Mapping[tuple[str, int], str] | None = None,
1393
+ ) -> ReportResult:
1394
+ """Fold escalation-table rows + blocked/failed queue rows into cards.
1395
+
1396
+ **Pure** — no DB, no daemon, no clock: *escalations* is whatever
1397
+ :func:`coord.state.list_drive_escalations` returned, *queue_entries* is
1398
+ whatever :func:`coord.state.list_drive_queue` returned (the FULL queue,
1399
+ every state — this needs `waiting`/`done` rows too, to resolve an
1400
+ `after=` chain's roots), and ``generated_at`` is the caller's clock
1401
+ reading.
1402
+
1403
+ One card per root cause. An escalation-table row is always a root — it
1404
+ names its own gate divergence, never another queue entry. A `blocked`/
1405
+ `failed` queue row is a root UNLESS its `last_reason` is
1406
+ `_resolve_prereqs`'s "queued but blocked/failed — it will never satisfy"
1407
+ verdict AND its `after=` graph names another card's key — that row folds
1408
+ into the root's card as a `downstream` entry instead of getting its own
1409
+ (the #2283 cascade-collapse: "1 real problem, N waiting on it").
1410
+ """
1411
+ from coord.drive_queue import STATE_BLOCKED, STATE_FAILED, parse_key # noqa: PLC0415
1412
+
1413
+ title_map = dict(titles or {})
1414
+
1415
+ escalated: dict[str, Mapping[str, Any]] = {}
1416
+ for esc in escalations:
1417
+ repo = esc.get("repo_name")
1418
+ issue = esc.get("issue_number")
1419
+ if not repo or issue is None:
1420
+ continue
1421
+ escalated[f"{repo}#{int(issue)}"] = esc
1422
+
1423
+ blocked_or_failed: dict[str, Mapping[str, Any]] = {}
1424
+ for row in queue_entries:
1425
+ repo = row.get("repo_name")
1426
+ issue = row.get("issue_number")
1427
+ if not repo or issue is None:
1428
+ continue
1429
+ if row.get("state") not in (STATE_BLOCKED, STATE_FAILED):
1430
+ continue
1431
+ blocked_or_failed[f"{repo}#{int(issue)}"] = row
1432
+
1433
+ universe = set(escalated) | set(blocked_or_failed)
1434
+
1435
+ # Immediate parent for every queue row whose own block is nothing but
1436
+ # "one of my pre-reqs is itself stuck" — never for an escalation (an
1437
+ # escalation names its own gate divergence, not another entry's key).
1438
+ parent_of: dict[str, str] = {}
1439
+ for key, row in blocked_or_failed.items():
1440
+ if not _unsatisfiable_prereq_reason(row.get("last_reason") or ""):
1441
+ continue
1442
+ for dep_key in row.get("after_json") or []:
1443
+ if dep_key in universe and dep_key != key:
1444
+ parent_of[key] = dep_key
1445
+ break
1446
+
1447
+ def _resolve_root(key: str) -> str:
1448
+ seen: set[str] = set()
1449
+ current = key
1450
+ while current in parent_of and current not in seen:
1451
+ seen.add(current)
1452
+ current = parent_of[current]
1453
+ return current
1454
+
1455
+ downstream_of: dict[str, list[str]] = {}
1456
+ for key in parent_of:
1457
+ root = _resolve_root(key)
1458
+ downstream_of.setdefault(root, []).append(key)
1459
+
1460
+ # Numeric-aware: sorting the raw `"repo#issue"` strings would put
1461
+ # `"api#10"` before `"api#2"` (#2369 review nit) — `parse_key` gives
1462
+ # `(repo, issue)` so the issue number sorts as a number, not text. A key
1463
+ # `parse_key` can't parse (shouldn't happen — `universe` is built from
1464
+ # `entry_key`-shaped keys) sorts last rather than raising.
1465
+ root_keys = sorted(
1466
+ (k for k in universe if k not in parent_of),
1467
+ key=lambda k: parse_key(k) or (k, 1 << 62),
1468
+ )
1469
+
1470
+ rows: list[dict[str, Any]] = []
1471
+ for key in root_keys:
1472
+ parsed = parse_key(key)
1473
+ if parsed is None:
1474
+ continue
1475
+ repo, issue = parsed
1476
+ downstream = sorted(set(downstream_of.get(key, [])))
1477
+
1478
+ if key in escalated:
1479
+ esc = escalated[key]
1480
+ reason = str(esc.get("reason") or "")
1481
+ proposed = str(esc.get("proposed_command") or "")
1482
+ options = [
1483
+ {
1484
+ "label": "Recommended",
1485
+ "command_or_action": proposed,
1486
+ "what_happens": "Runs the fix the driver proposed when it escalated.",
1487
+ "recommended": True,
1488
+ },
1489
+ {
1490
+ "label": "Inspect",
1491
+ "command_or_action": f"coord escalate list --repo {repo}",
1492
+ "what_happens": "Shows the full escalation record, including gate readings.",
1493
+ "recommended": False,
1494
+ },
1495
+ ]
1496
+ rows.append(
1497
+ {
1498
+ "repo": repo,
1499
+ "issue": issue,
1500
+ "title": title_map.get((repo, issue)),
1501
+ "why": _escalation_why(reason),
1502
+ "options": options,
1503
+ "downstream_count": len(downstream),
1504
+ "downstream": downstream,
1505
+ "since": esc.get("created_at"),
1506
+ "source": "escalation",
1507
+ # Extra keys beyond `columns` — ReportResult's contract
1508
+ # allows this for a client that wants the detail.
1509
+ "stage": esc.get("stage") or "",
1510
+ "raw_reason": reason,
1511
+ }
1512
+ )
1513
+ continue
1514
+
1515
+ row = blocked_or_failed[key]
1516
+ reason = str(row.get("last_reason") or "")
1517
+ parsed_options = _parse_reason_options(reason)
1518
+ if parsed_options:
1519
+ for i, opt in enumerate(parsed_options):
1520
+ opt["recommended"] = i == 0
1521
+ options = parsed_options
1522
+ else:
1523
+ fallback = _generic_fallback_option(repo, row)
1524
+ fallback["recommended"] = True
1525
+ options = [fallback]
1526
+ rows.append(
1527
+ {
1528
+ "repo": repo,
1529
+ "issue": issue,
1530
+ "title": title_map.get((repo, issue)),
1531
+ "why": _first_line(reason) or reason or "(no reason recorded)",
1532
+ "options": options,
1533
+ "downstream_count": len(downstream),
1534
+ "downstream": downstream,
1535
+ "since": row.get("reason_at") or row.get("enqueued_at"),
1536
+ "source": "queue",
1537
+ "stage": row.get("state") or "",
1538
+ "raw_reason": reason,
1539
+ }
1540
+ )
1541
+
1542
+ return ReportResult(
1543
+ report_id="decisions",
1544
+ generated_at=generated_at,
1545
+ window=(generated_at, generated_at),
1546
+ columns=list(DECISIONS_COLUMNS),
1547
+ column_meta=list(DECISIONS_COLUMN_META),
1548
+ rows=rows,
1549
+ notes=_decisions_notes(rows),
1550
+ )
1551
+
1552
+
1553
+ def _default_list_drive_escalations(repo: str | None) -> list[dict]:
1554
+ from coord.state import list_drive_escalations # noqa: PLC0415
1555
+
1556
+ return list_drive_escalations(repo)
1557
+
1558
+
1559
+ def run_decisions(
1560
+ *,
1561
+ repo: str = "",
1562
+ now: float | None = None,
1563
+ escalations_fetch: Callable[[str | None], Sequence[Mapping[str, Any]]] | None = None,
1564
+ queue_fetch: Callable[[str | None], Sequence[Mapping[str, Any]]] | None = None,
1565
+ title_lookup: Callable[..., Mapping[tuple[str, int], str]] | None = None,
1566
+ ) -> ReportResult:
1567
+ """Fetch both sources and fold them. ``now``/``*_fetch``/``title_lookup``
1568
+ are test seams; the report's own parameter is ``repo``.
1569
+
1570
+ Fetches the FULL (unfiltered) queue and escalation table regardless of
1571
+ ``repo`` — mirrors `coord drive-queue list`'s #2183 fix: an `after=`
1572
+ chain can cross repos, so filtering before the cascade collapse would
1573
+ misdiagnose a cross-repo prereq as unrelated. ``repo`` is applied to the
1574
+ finished cards instead — and ``notes`` is recomputed from those same
1575
+ finished cards (#2369 review), so a ``--repo``-scoped call never reports
1576
+ a headline count that includes another repo's decisions.
1577
+ """
1578
+ generated_at = time.time() if now is None else float(now)
1579
+ esc_fn = _default_list_drive_escalations if escalations_fetch is None else escalations_fetch
1580
+ queue_fn = _default_list_drive_queue if queue_fetch is None else queue_fetch
1581
+ escalations = list(esc_fn(None) or [])
1582
+ queue_entries = list(queue_fn(None) or [])
1583
+
1584
+ # Folded WITHOUT titles first, then the title lookup is scoped to just
1585
+ # the resulting cards' keys (#2369 review non-blocking finding): the
1586
+ # queue fetch above is intentionally the FULL, unfiltered queue (every
1587
+ # state, needed to resolve `after=` roots), so keying the lookup off its
1588
+ # raw rows would query titles for `waiting`/`done`/`running` entries
1589
+ # that never surface in this report — the exact "280+ historical rows"
1590
+ # overhead #2369 opens by naming as the problem this report exists to
1591
+ # avoid.
1592
+ result = fold_decisions(escalations, queue_entries, generated_at, titles=None)
1593
+ card_keys = {(r["repo"], r["issue"]) for r in result.rows}
1594
+ lookup = _lookup_titles if title_lookup is None else title_lookup
1595
+ titles = lookup(card_keys)
1596
+ for r in result.rows:
1597
+ r["title"] = titles.get((r["repo"], r["issue"]))
1598
+
1599
+ if repo:
1600
+ result.rows = [r for r in result.rows if r["repo"] == repo]
1601
+ result.notes = _decisions_notes(result.rows)
1602
+ return result
1603
+
1604
+
1161
1605
  # ── usage: the per-issue / per-repo cost + token rollup ────────────────────
1162
1606
  #
1163
1607
  # #1763. This is a **correctness fix**, not a consolidation. `coord-tui`'s
@@ -2141,6 +2585,30 @@ DRIVE_QUEUE_STATUS = ReportDef(
2141
2585
  )
2142
2586
 
2143
2587
 
2588
+ DECISIONS = ReportDef(
2589
+ id="decisions",
2590
+ title="Decisions",
2591
+ description=(
2592
+ "Why is the fleet stuck, as option-based cards instead of raw infra "
2593
+ "text — one card per root cause, folding `coord escalate list`'s "
2594
+ "structured merge-gate escalations and `drive-queue list`'s "
2595
+ "blocked/failed rows into a plain-language `why`, 2-4 ready-to-run "
2596
+ "options (one recommended), and a downstream count for anything "
2597
+ "stuck only because this one is."
2598
+ ),
2599
+ params=(
2600
+ ReportParam(
2601
+ id="repo",
2602
+ label="Repo",
2603
+ kind="text",
2604
+ default="",
2605
+ help="Restrict to one repo by name. Empty means all repos.",
2606
+ ),
2607
+ ),
2608
+ run=run_decisions,
2609
+ )
2610
+
2611
+
2144
2612
  USAGE = ReportDef(
2145
2613
  id="usage",
2146
2614
  title="Usage",
@@ -2266,6 +2734,31 @@ def _csv_scalar(value: Any) -> str:
2266
2734
  return str(value)
2267
2735
 
2268
2736
 
2737
+ def format_option_cell(option: Mapping[str, Any]) -> str:
2738
+ """One ``{label, command_or_action, what_happens, recommended}`` option
2739
+ dict (the ``decisions`` report's ``options`` column shape, #2369) → its
2740
+ single-line display text.
2741
+
2742
+ Shared by the CLI human table (:mod:`coord.commands.report`), this
2743
+ module's own CSV export, and the coord-tui Reports panel's Rust port of
2744
+ this same rule — so a ``kind: list`` column that happens to hold option
2745
+ dicts, rather than the far more common list of scalar strings every
2746
+ other report uses, renders as ``"<label>: <command>"`` on all three
2747
+ surfaces instead of a raw Python/JSON dict blob (#2369 review: every
2748
+ existing ``kind: list`` renderer only knew how to flatten a list of
2749
+ scalars). Falls back to ``key=value`` pairs for a dict that doesn't
2750
+ match the ``{label, command_or_action}`` shape, so an unrelated
2751
+ dict-valued list column — should one ever exist — still renders
2752
+ *something* readable rather than nothing.
2753
+ """
2754
+ label = option.get("label")
2755
+ command = option.get("command_or_action")
2756
+ if label and command:
2757
+ mark = "★ " if option.get("recommended") else ""
2758
+ return f"{mark}{label}: {command}"
2759
+ return ", ".join(f"{k}={v}" for k, v in option.items())
2760
+
2761
+
2269
2762
  def _csv_cell(value: Any) -> str:
2270
2763
  """One row value → one CSV field.
2271
2764
 
@@ -2278,9 +2771,17 @@ def _csv_cell(value: Any) -> str:
2278
2771
  multi-line driver-exit reason is the regression fixture). JSON-encoding
2279
2772
  the dict would have escaped that newline into a literal ``\\n`` and lost
2280
2773
  the round-trip.
2774
+
2775
+ A list item that is itself a dict (the ``decisions`` report's
2776
+ ``options`` column, #2369) renders through :func:`format_option_cell`
2777
+ rather than ``_csv_scalar``'s ``str(value)`` fallback, which would emit
2778
+ a Python dict repr.
2281
2779
  """
2282
2780
  if isinstance(value, (list, tuple)):
2283
- return "; ".join(_csv_scalar(v) for v in value)
2781
+ return "; ".join(
2782
+ format_option_cell(v) if isinstance(v, Mapping) else _csv_scalar(v)
2783
+ for v in value
2784
+ )
2284
2785
  if isinstance(value, Mapping):
2285
2786
  return "; ".join(f"{k}={_csv_scalar(v)}" for k, v in value.items())
2286
2787
  return _csv_scalar(value)
@@ -2377,6 +2878,7 @@ def csv_filename(result: "ReportResult | Mapping[str, Any]") -> str:
2377
2878
  REPORTS: dict[str, ReportDef] = {
2378
2879
  ISSUE_ACTIVITY.id: ISSUE_ACTIVITY,
2379
2880
  DRIVE_QUEUE_STATUS.id: DRIVE_QUEUE_STATUS,
2881
+ DECISIONS.id: DECISIONS,
2380
2882
  USAGE.id: USAGE,
2381
2883
  QUEUE_OUTCOMES.id: QUEUE_OUTCOMES,
2382
2884
  }