code-coordinator 0.5.48__tar.gz → 0.5.49__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 (806) hide show
  1. code_coordinator-0.5.49/.github/ISSUE_TEMPLATE/bug_report.md +42 -0
  2. {code_coordinator-0.5.48/code_coordinator.egg-info → code_coordinator-0.5.49}/PKG-INFO +1 -1
  3. {code_coordinator-0.5.48 → code_coordinator-0.5.49/code_coordinator.egg-info}/PKG-INFO +1 -1
  4. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/code_coordinator.egg-info/SOURCES.txt +3 -0
  5. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/code_coordinator.egg-info/scm_file_list.json +3 -0
  6. code_coordinator-0.5.49/code_coordinator.egg-info/scm_version.json +8 -0
  7. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/acceptance.py +34 -0
  8. code_coordinator-0.5.49/coord/bug_intake.py +117 -0
  9. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/commands/issues.py +56 -1
  10. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/docs/TEST_FIRST_BUG_LANE.md +134 -3
  11. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_acceptance.py +41 -0
  12. code_coordinator-0.5.49/tests/test_bug_intake.py +93 -0
  13. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_issue_create_label.py +56 -0
  14. code_coordinator-0.5.48/code_coordinator.egg-info/scm_version.json +0 -8
  15. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/.claude/commands/board.md +0 -0
  16. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/.claude/commands/complete-session.md +0 -0
  17. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/.claude/commands/coordinator.md +0 -0
  18. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/.githooks/_lib.sh +0 -0
  19. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/.githooks/post-checkout +0 -0
  20. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/.githooks/post-commit +0 -0
  21. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/.githooks/post-merge +0 -0
  22. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/.github/workflows/auto-release.yml +0 -0
  23. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/.github/workflows/cargo-test.yml +0 -0
  24. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/.github/workflows/publish.yml +0 -0
  25. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/.github/workflows/release-tui.yml +0 -0
  26. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/.github/workflows/test.yml +0 -0
  27. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/.gitignore +0 -0
  28. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/CLAUDE.md +0 -0
  29. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/GOAL.md +0 -0
  30. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/LICENSE +0 -0
  31. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/MANIFEST.in +0 -0
  32. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/README.md +0 -0
  33. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/code_coordinator.egg-info/dependency_links.txt +0 -0
  34. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/code_coordinator.egg-info/entry_points.txt +0 -0
  35. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/code_coordinator.egg-info/requires.txt +0 -0
  36. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/code_coordinator.egg-info/top_level.txt +0 -0
  37. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/__init__.py +0 -0
  38. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/_board_mapping.py +0 -0
  39. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/acceptance_drivers.py +0 -0
  40. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/agent.py +0 -0
  41. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/agent_app.py +0 -0
  42. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/agent_update.py +0 -0
  43. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/agents/opencode/.gitignore +0 -0
  44. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/agents/opencode/agents/work.md +0 -0
  45. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/agents/opencode/routing.jsonc +0 -0
  46. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/audit.py +0 -0
  47. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/auto_loop.py +0 -0
  48. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/board_bool_guard.py +0 -0
  49. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/board_service.py +0 -0
  50. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/board_wire.py +0 -0
  51. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/brain.py +0 -0
  52. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/branch_model.py +0 -0
  53. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/cargo_cache.py +0 -0
  54. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/ci_github.py +0 -0
  55. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/ci_store.py +0 -0
  56. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/claim.py +0 -0
  57. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/cli.py +0 -0
  58. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/client.py +0 -0
  59. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/commands/__init__.py +0 -0
  60. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/commands/_common.py +0 -0
  61. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/commands/acceptance.py +0 -0
  62. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/commands/agent_ops.py +0 -0
  63. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/commands/audit.py +0 -0
  64. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/commands/chat.py +0 -0
  65. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/commands/dispatch.py +0 -0
  66. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/commands/dispatch_workers.py +0 -0
  67. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/commands/drive.py +0 -0
  68. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/commands/drive_queue.py +0 -0
  69. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/commands/gate_a.py +0 -0
  70. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/commands/gates.py +0 -0
  71. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/commands/lifecycle.py +0 -0
  72. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/commands/merge.py +0 -0
  73. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/commands/milestone.py +0 -0
  74. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/commands/plan_followup.py +0 -0
  75. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/commands/plans.py +0 -0
  76. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/commands/release.py +0 -0
  77. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/commands/report.py +0 -0
  78. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/commands/review.py +0 -0
  79. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/commands/scorecard.py +0 -0
  80. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/commands/sessions.py +0 -0
  81. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/commands/setup.py +0 -0
  82. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/commands/status.py +0 -0
  83. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/commands/terminal.py +0 -0
  84. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/commands/test_gate.py +0 -0
  85. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/commands/tui.py +0 -0
  86. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/comments.py +0 -0
  87. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/config.py +0 -0
  88. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/conflict_fix.py +0 -0
  89. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dao.py +0 -0
  90. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/__init__.py +0 -0
  91. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/fixture.py +0 -0
  92. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/index.html +0 -0
  93. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/server.py +0 -0
  94. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/terminal.py +0 -0
  95. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/.gitignore +0 -0
  96. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/components.json +0 -0
  97. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/dist/assets/Gallery-da3qNiIw.js +0 -0
  98. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
  99. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/dist/assets/Terminal-skVFCxPU.js +0 -0
  100. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/dist/assets/index-DltfZR5f.js +0 -0
  101. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
  102. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
  103. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
  104. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
  105. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
  106. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/dist/index.html +0 -0
  107. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
  108. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/dist/sw.js +0 -0
  109. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
  110. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
  111. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
  112. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
  113. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
  114. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
  115. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
  116. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
  117. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
  118. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
  119. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/eslint.config.js +0 -0
  120. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/index.html +0 -0
  121. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
  122. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/package-lock.json +0 -0
  123. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/package.json +0 -0
  124. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
  125. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/playwright.config.ts +0 -0
  126. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/postcss.config.js +0 -0
  127. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
  128. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
  129. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
  130. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/App.tsx +0 -0
  131. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/api/client.ts +0 -0
  132. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/api/generated.ts +0 -0
  133. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
  134. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
  135. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
  136. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
  137. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
  138. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
  139. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
  140. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
  141. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
  142. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
  143. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
  144. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
  145. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
  146. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
  147. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
  148. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
  149. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
  150. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
  151. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
  152. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
  153. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
  154. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
  155. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
  156. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
  157. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
  158. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
  159. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
  160. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
  161. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
  162. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
  163. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
  164. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
  165. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
  166. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
  167. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/index.css +0 -0
  168. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
  169. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
  170. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/main.tsx +0 -0
  171. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
  172. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
  173. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
  174. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
  175. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
  176. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
  177. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
  178. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
  179. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
  180. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
  181. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
  182. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
  183. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
  184. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
  185. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
  186. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
  187. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
  188. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
  189. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
  190. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
  191. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
  192. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/test-setup.ts +0 -0
  193. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
  194. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/tailwind.config.js +0 -0
  195. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/tsconfig.json +0 -0
  196. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/tsconfig.node.json +0 -0
  197. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/vite.config.ts +0 -0
  198. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/db.py +0 -0
  199. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dead_end.py +0 -0
  200. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/deploy/README.md +0 -0
  201. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/deploy/coord-agent.service +0 -0
  202. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/deploy/coord-db-backup.service +0 -0
  203. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/deploy/coord-db-backup.sh +0 -0
  204. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/deploy/coord-db-backup.timer +0 -0
  205. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/deploy/coord-drive-queue.service +0 -0
  206. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/deploy/coord-drive-queue.timer +0 -0
  207. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/deploy/coord-notify.service +0 -0
  208. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/deploy/coord-notify.timer +0 -0
  209. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/deploy/coord-release-propagate.service +0 -0
  210. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/deploy/coord-release-propagate.timer +0 -0
  211. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/deploy/coord-release-window.service +0 -0
  212. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/deploy/coord-release-window.timer +0 -0
  213. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/deploy/coord-serve.service +0 -0
  214. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/deploy/coord-web-dist-build.service +0 -0
  215. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/deploy/coord-web-dist-build.timer +0 -0
  216. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/deploy/coord-web.service +0 -0
  217. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/deploy_manifest.py +0 -0
  218. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/deploy_units.py +0 -0
  219. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/deps.py +0 -0
  220. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/diagnose.py +0 -0
  221. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dispatch.py +0 -0
  222. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dist_name.py +0 -0
  223. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/drive.py +0 -0
  224. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/drive_queue.py +0 -0
  225. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/drive_state.py +0 -0
  226. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/events.py +0 -0
  227. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/failure_class.py +0 -0
  228. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/filelock.py +0 -0
  229. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/fleet_config_health.py +0 -0
  230. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/freshness.py +0 -0
  231. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/gate_a.py +0 -0
  232. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/gate_b.py +0 -0
  233. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/gate_snapshot.py +0 -0
  234. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/gates.py +0 -0
  235. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/github_ops.py +0 -0
  236. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/goal.py +0 -0
  237. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/graph_health.py +0 -0
  238. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/health/__init__.py +0 -0
  239. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/health/aggregate.py +0 -0
  240. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/health/checks/__init__.py +0 -0
  241. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/health/checks/agent_install.py +0 -0
  242. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/health/checks/cargo_targets.py +0 -0
  243. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/health/checks/claude_binary.py +0 -0
  244. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/health/checks/deploy_lane_facts.py +0 -0
  245. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/health/checks/disk.py +0 -0
  246. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/health/checks/fleet_board.py +0 -0
  247. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  248. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/health/checks/fleet_phantom.py +0 -0
  249. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/health/checks/fleet_unit_drift.py +0 -0
  250. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/health/checks/graph.py +0 -0
  251. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/health/checks/plan_usage.py +0 -0
  252. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/health/checks/repo_state.py +0 -0
  253. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/health/checks/spawned_coord.py +0 -0
  254. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/health/checks/timer_active.py +0 -0
  255. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/health/checks/toolchain.py +0 -0
  256. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/health/checks/unit_drift.py +0 -0
  257. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/health/checks/unit_enablement.py +0 -0
  258. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/health/checks/worktrees.py +0 -0
  259. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/health/cli.py +0 -0
  260. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/health/context.py +0 -0
  261. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/health/fleet_snapshot.py +0 -0
  262. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/health/models.py +0 -0
  263. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/health/pypi.py +0 -0
  264. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/health/registry.py +0 -0
  265. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/health/render.py +0 -0
  266. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/health/units.py +0 -0
  267. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/hooks.py +0 -0
  268. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/housekeeping.py +0 -0
  269. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/interactive.py +0 -0
  270. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/issue_store.py +0 -0
  271. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/liveness_auditor.py +0 -0
  272. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/machine_pause.py +0 -0
  273. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/merge_queue.py +0 -0
  274. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/milestone_chat.py +0 -0
  275. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/milestone_dispatch.py +0 -0
  276. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/milestone_gate.py +0 -0
  277. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/milestone_order.py +0 -0
  278. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/mock_author.py +0 -0
  279. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/models.py +0 -0
  280. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/network.py +0 -0
  281. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/new_issue_chat.py +0 -0
  282. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/notifier/__init__.py +0 -0
  283. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/notifier/baseline.py +0 -0
  284. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/notifier/cli.py +0 -0
  285. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/notifier/collect.py +0 -0
  286. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/notifier/digest.py +0 -0
  287. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/notifier/models.py +0 -0
  288. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/notifier/predicate.py +0 -0
  289. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/notifier/service.py +0 -0
  290. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/notifier/store.py +0 -0
  291. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/notifier/transport.py +0 -0
  292. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/notify.py +0 -0
  293. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/openapi.py +0 -0
  294. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/overlap_fence.py +0 -0
  295. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/parentage.py +0 -0
  296. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/parentage_github.py +0 -0
  297. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/pipeline.py +0 -0
  298. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/plan_parser.py +0 -0
  299. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/plans.py +0 -0
  300. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/platform_paths.py +0 -0
  301. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/pr_body_lint.py +0 -0
  302. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/prereqs.py +0 -0
  303. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/progress.py +0 -0
  304. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/providers/__init__.py +0 -0
  305. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/providers/base.py +0 -0
  306. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/providers/claude.py +0 -0
  307. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/providers/claude_pty.py +0 -0
  308. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/providers/opencode.py +0 -0
  309. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/reconcile.py +0 -0
  310. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/refine_chat.py +0 -0
  311. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/release_cordon.py +0 -0
  312. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/release_propagate.py +0 -0
  313. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/release_verify.py +0 -0
  314. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/release_window.py +0 -0
  315. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/reports.py +0 -0
  316. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/revalidate.py +0 -0
  317. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/review.py +0 -0
  318. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/scorecard.py +0 -0
  319. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/serve_app.py +0 -0
  320. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/skills/update-issue/SKILL.md +0 -0
  321. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/smoke.py +0 -0
  322. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/spend_ceiling.py +0 -0
  323. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/split_work.py +0 -0
  324. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/stage_projection.py +0 -0
  325. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/state.py +0 -0
  326. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/test_author.py +0 -0
  327. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/test_chat.py +0 -0
  328. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/test_orchestrator.py +0 -0
  329. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/test_report.py +0 -0
  330. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/tui_release.py +0 -0
  331. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/usage.py +0 -0
  332. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/usage_limits.py +0 -0
  333. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/usage_rollup.py +0 -0
  334. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/worker_events.py +0 -0
  335. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coordinator.example.yml +0 -0
  336. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/deploy/coord-agent.service +0 -0
  337. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/deploy/coord-db-backup.service +0 -0
  338. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/deploy/coord-db-backup.sh +0 -0
  339. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/deploy/coord-db-backup.timer +0 -0
  340. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/deploy/coord-drive-queue.service +0 -0
  341. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/deploy/coord-drive-queue.timer +0 -0
  342. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/deploy/coord-notify.service +0 -0
  343. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/deploy/coord-notify.timer +0 -0
  344. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/deploy/coord-release-propagate.service +0 -0
  345. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/deploy/coord-release-propagate.timer +0 -0
  346. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/deploy/coord-release-window.service +0 -0
  347. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/deploy/coord-release-window.timer +0 -0
  348. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/deploy/coord-serve.service +0 -0
  349. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/deploy/coord-web-dist-build.service +0 -0
  350. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/deploy/coord-web-dist-build.sh +0 -0
  351. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/deploy/coord-web-dist-build.timer +0 -0
  352. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/deploy/coord-web-rollback.sh +0 -0
  353. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/deploy/coord-web.service +0 -0
  354. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/deploy/node-shim.sh +0 -0
  355. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/docs/AGENT_OPERATIONS.md +0 -0
  356. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/docs/ARCHITECTURE.md +0 -0
  357. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/docs/ARCH_SECURITY_GATES.md +0 -0
  358. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/docs/COCKPIT.md +0 -0
  359. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/docs/CONTROL_CENTER.md +0 -0
  360. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/docs/CROSS_PLATFORM.md +0 -0
  361. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/docs/CUSTOMER_PORTAL.md +0 -0
  362. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/docs/DRIVE_QUEUE.md +0 -0
  363. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/docs/EPHEMERAL_WORKERS.md +0 -0
  364. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/docs/FORGE_MIGRATION.md +0 -0
  365. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/docs/GRAPHIFY_SETUP.md +0 -0
  366. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/docs/ISSUE_GUIDANCE.md +0 -0
  367. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/docs/MAC_MINI.md +0 -0
  368. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  369. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/docs/NOTIFIER.md +0 -0
  370. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/docs/OPENCODE_VERIFICATION.md +0 -0
  371. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/docs/OPERATING_GOTCHAS.md +0 -0
  372. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/docs/ORACLE_LOOP.md +0 -0
  373. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/docs/PHONE_WEBAPP.md +0 -0
  374. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/docs/PIPELINE_V2.md +0 -0
  375. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/docs/PLATFORM_EVOLUTION.md +0 -0
  376. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/docs/SECOND_BACKEND.md +0 -0
  377. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/docs/STORE_SERVICE.md +0 -0
  378. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/docs/WEB_CONTROL_CENTER.md +0 -0
  379. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/docs/mocks/web/README.md +0 -0
  380. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/docs/mocks/web/_tokens.css +0 -0
  381. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/docs/mocks/web/issue-detail.html +0 -0
  382. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/docs/mocks/web/pipeline-narrow.html +0 -0
  383. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/docs/mocks/web/pipeline-wide.html +0 -0
  384. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/graphify-out/.gitignore +0 -0
  385. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/install-agent.sh +0 -0
  386. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/pyproject.toml +0 -0
  387. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/scripts/audit_review_verdict_overrides.py +0 -0
  388. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  389. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/scripts/azure-workers/build-worker-image.sh +0 -0
  390. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/scripts/azure-workers/coordinator-machine.py +0 -0
  391. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/scripts/azure-workers/epic-down.sh +0 -0
  392. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/scripts/azure-workers/epic-up.sh +0 -0
  393. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/scripts/azure-workers/preflight.sh +0 -0
  394. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/scripts/azure-workers/provision-worker.sh +0 -0
  395. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  396. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  397. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/scripts/azure-workers/verify-github-token.sh +0 -0
  398. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/scripts/codegen.py +0 -0
  399. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/scripts/coord-test-runner.sh +0 -0
  400. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/scripts/drive-batch.sh +0 -0
  401. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/scripts/gen_board_fixture.py +0 -0
  402. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/scripts/next_release_tag.py +0 -0
  403. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/scripts/run_tests_without_gh.sh +0 -0
  404. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/scripts/smoke_437_interactive.py +0 -0
  405. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/scripts/verify_878_review_capture.py +0 -0
  406. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/scripts/verify_release_published.py +0 -0
  407. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/scripts/verify_release_wheel.py +0 -0
  408. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/setup.cfg +0 -0
  409. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/SMOKE_SET.md +0 -0
  410. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/__init__.py +0 -0
  411. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  412. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/acceptance/ms-33/contract.md +0 -0
  413. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/acceptance/ms-33/manifest.yml +0 -0
  414. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  415. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  416. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  417. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  418. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/acceptance/ms-37/conftest.py +0 -0
  419. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/acceptance/ms-37/contract.md +0 -0
  420. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/acceptance/ms-37/manifest.yml +0 -0
  421. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  422. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  423. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/acceptance/ms-38/contract.md +0 -0
  424. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/acceptance/ms-38/manifest.yml +0 -0
  425. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  426. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  427. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  428. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  429. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  430. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  431. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  432. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  433. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  434. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  435. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/acceptance/ms-51/contract.md +0 -0
  436. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  437. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  438. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/acceptance/ms-51/manifest.yml +0 -0
  439. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  440. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/acceptance/ms-51/tsconfig.json +0 -0
  441. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  442. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/conftest.py +0 -0
  443. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/fixtures/board-pipeline-basic.json +0 -0
  444. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  445. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  446. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  447. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/fixtures/playwright/all_pass.json +0 -0
  448. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  449. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/fixtures/playwright/mixed_fail.json +0 -0
  450. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  451. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  452. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/fixtures/playwright/skip.json +0 -0
  453. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/fixtures/playwright/truncated.json +0 -0
  454. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  455. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  456. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  457. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  458. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  459. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  460. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  461. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  462. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_acceptance_drivers.py +0 -0
  463. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_agent.py +0 -0
  464. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_agent_api_error.py +0 -0
  465. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_agent_app.py +0 -0
  466. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_agent_branch_base.py +0 -0
  467. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_agent_branch_capture.py +0 -0
  468. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_agent_config_free_1712.py +0 -0
  469. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_agent_deploy_units_endpoint.py +0 -0
  470. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_agent_dirty_worktree.py +0 -0
  471. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_agent_graph_self_heal.py +0 -0
  472. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_agent_health_h3.py +0 -0
  473. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_agent_idle_restart.py +0 -0
  474. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_agent_push_failure.py +0 -0
  475. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_agent_reap.py +0 -0
  476. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_agent_repos_and_pull.py +0 -0
  477. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_agent_restart_services_endpoint.py +0 -0
  478. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_agent_startup_diagnostics.py +0 -0
  479. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_agent_update.py +0 -0
  480. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_agent_update_bluegreen.py +0 -0
  481. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_agent_usage_limit.py +0 -0
  482. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_agent_zero_commit.py +0 -0
  483. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_approve_reject_plan.py +0 -0
  484. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_approve_usage_gate.py +0 -0
  485. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_assignment_already_recorded_daemon.py +0 -0
  486. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_audit_log.py +0 -0
  487. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_audit_outcome.py +0 -0
  488. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_audit_query.py +0 -0
  489. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_auto_loop.py +0 -0
  490. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_auto_release_publish_2035.py +0 -0
  491. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_base_checkout_restore.py +0 -0
  492. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_board_cap_762.py +0 -0
  493. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_board_fixture.py +0 -0
  494. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_board_read_path.py +0 -0
  495. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_board_service.py +0 -0
  496. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_board_state.py +0 -0
  497. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_board_wire.py +0 -0
  498. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_brain.py +0 -0
  499. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_branch_model.py +0 -0
  500. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_build_worker_image_env_update.py +0 -0
  501. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cargo_cache.py +0 -0
  502. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_ci_acceptance_gate_1950.py +0 -0
  503. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_ci_store.py +0 -0
  504. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_claim.py +0 -0
  505. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_acceptance.py +0 -0
  506. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_assign.py +0 -0
  507. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  508. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_assign_interactive_remote.py +0 -0
  509. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_assign_provider.py +0 -0
  510. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_audit.py +0 -0
  511. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_chat_continue.py +0 -0
  512. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_diagnose_config_provenance.py +0 -0
  513. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_diagnose_graph.py +0 -0
  514. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_doctor.py +0 -0
  515. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_doctor_config_free_1801.py +0 -0
  516. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  517. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_drive.py +0 -0
  518. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_drive_queue.py +0 -0
  519. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_escalate.py +0 -0
  520. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_fix_headless_review.py +0 -0
  521. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_gate_a.py +0 -0
  522. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_install_drift.py +0 -0
  523. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_install_skills.py +0 -0
  524. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_issue_reopen.py +0 -0
  525. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_merge.py +0 -0
  526. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_milestone_assign.py +0 -0
  527. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_milestone_capture.py +0 -0
  528. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_milestone_chat_add_child.py +0 -0
  529. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_milestone_dispatch.py +0 -0
  530. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_milestone_gate_b.py +0 -0
  531. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_milestone_gate_c.py +0 -0
  532. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_milestone_order.py +0 -0
  533. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  534. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_milestone_ship.py +0 -0
  535. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_network.py +0 -0
  536. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_new_issue_chat.py +0 -0
  537. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_plans.py +0 -0
  538. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_pull_artifact.py +0 -0
  539. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_queue.py +0 -0
  540. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_reattach_sessions.py +0 -0
  541. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_refine_board.py +0 -0
  542. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_release_preflight.py +0 -0
  543. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_release_propagate.py +0 -0
  544. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_release_window.py +0 -0
  545. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_scorecard.py +0 -0
  546. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_set_review_findings.py +0 -0
  547. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_status_advisory_terminal.py +0 -0
  548. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_status_merge_queue.py +0 -0
  549. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_status_provider.py +0 -0
  550. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_status_review_finalizing.py +0 -0
  551. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_status_test_failed_tag.py +0 -0
  552. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_status_usage_limit.py +0 -0
  553. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_sync_comments_873.py +0 -0
  554. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_test_plan.py +0 -0
  555. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_track.py +0 -0
  556. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_tui_update.py +0 -0
  557. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_wait.py +0 -0
  558. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_client_base_install.py +0 -0
  559. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_comments.py +0 -0
  560. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_completion_summary.py +0 -0
  561. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_config.py +0 -0
  562. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_config_acceptance.py +0 -0
  563. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_config_audit.py +0 -0
  564. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_config_pricing.py +0 -0
  565. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_config_usage_gate.py +0 -0
  566. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_conflict_fix.py +0 -0
  567. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_conflict_fix_semantic.py +0 -0
  568. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_coord_test.py +0 -0
  569. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_coord_test_runner_routing.py +0 -0
  570. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_coord_test_runner_toolchain.py +0 -0
  571. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_coord_web_sse_restart_live.py +0 -0
  572. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_coordinator_machine.py +0 -0
  573. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cross_platform_imports.py +0 -0
  574. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_dashboard.py +0 -0
  575. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_dashboard_fixture.py +0 -0
  576. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_dashboard_terminal.py +0 -0
  577. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_dashboard_terminal_live.py +0 -0
  578. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_db.py +0 -0
  579. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_dead_end.py +0 -0
  580. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_deploy_coord_db_backup.py +0 -0
  581. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_deploy_coord_web_dist.py +0 -0
  582. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_deploy_coord_web_rollback.py +0 -0
  583. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_deploy_drive_queue_unit.py +0 -0
  584. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_deploy_manifest.py +0 -0
  585. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_deploy_units_lane.py +0 -0
  586. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_deploy_web_unit.py +0 -0
  587. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_deps.py +0 -0
  588. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_diagnose.py +0 -0
  589. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_dispatch.py +0 -0
  590. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_dispatch_target_validation.py +0 -0
  591. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_dist_name.py +0 -0
  592. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_done_housekeeping.py +0 -0
  593. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_drive.py +0 -0
  594. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_drive_queue.py +0 -0
  595. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_drive_state.py +0 -0
  596. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_drive_tmux.py +0 -0
  597. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_epic_up_capability_detection.py +0 -0
  598. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  599. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_epic_up_image_provenance.py +0 -0
  600. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_errors.py +0 -0
  601. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_events.py +0 -0
  602. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_failure_class.py +0 -0
  603. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_filelock.py +0 -0
  604. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  605. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_fix_of_force_override.py +0 -0
  606. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_fleet_config_health.py +0 -0
  607. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_fleet_health_probes.py +0 -0
  608. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_fleet_health_snapshot.py +0 -0
  609. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_freshness.py +0 -0
  610. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_gate_a.py +0 -0
  611. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_gate_b.py +0 -0
  612. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_gate_snapshot_staleness.py +0 -0
  613. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_gates.py +0 -0
  614. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_generated_types_fixture.py +0 -0
  615. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_github_ops.py +0 -0
  616. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_goal.py +0 -0
  617. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_graph_health.py +0 -0
  618. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_handoff.py +0 -0
  619. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_health_checks.py +0 -0
  620. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_health_cli.py +0 -0
  621. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_health_cli_graph.py +0 -0
  622. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_health_config.py +0 -0
  623. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_health_context.py +0 -0
  624. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_health_deploy_lane_facts.py +0 -0
  625. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_health_incident_regression.py +0 -0
  626. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_health_pypi.py +0 -0
  627. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_health_registry.py +0 -0
  628. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_health_timer_active.py +0 -0
  629. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_health_toolchain.py +0 -0
  630. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_health_unit_drift.py +0 -0
  631. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_health_unit_enablement.py +0 -0
  632. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_hooks.py +0 -0
  633. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_human_attended_437.py +0 -0
  634. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_init.py +0 -0
  635. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_integration.py +0 -0
  636. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_interactive_briefing_echo.py +0 -0
  637. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_interactive_prefill_state.py +0 -0
  638. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_interactive_session_relaunch.py +0 -0
  639. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_interactive_test_verdict_backstop.py +0 -0
  640. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_interactive_token_attribution.py +0 -0
  641. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_interactive_worktree.py +0 -0
  642. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_issue_store_seam.py +0 -0
  643. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_liveness_auditor.py +0 -0
  644. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_liveness_notify.py +0 -0
  645. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_machine_pause.py +0 -0
  646. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_merge_queue.py +0 -0
  647. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_merge_verify.py +0 -0
  648. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_milestone_chat.py +0 -0
  649. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_milestone_dispatch.py +0 -0
  650. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_milestone_gate.py +0 -0
  651. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_milestone_order.py +0 -0
  652. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_milestone_seam.py +0 -0
  653. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_mock_author.py +0 -0
  654. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_model_tiering.py +0 -0
  655. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_models.py +0 -0
  656. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_models_config_labels.py +0 -0
  657. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_needs_attention.py +0 -0
  658. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_network.py +0 -0
  659. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_new_issue_chat.py +0 -0
  660. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_next_release_tag.py +0 -0
  661. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_no_direct_gh_calls.py +0 -0
  662. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_node_shim.py +0 -0
  663. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_notifier_baseline.py +0 -0
  664. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_notifier_cli.py +0 -0
  665. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_notifier_collect.py +0 -0
  666. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_notifier_config.py +0 -0
  667. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_notifier_drive_seam.py +0 -0
  668. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_notifier_isolation.py +0 -0
  669. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_notifier_predicate.py +0 -0
  670. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_notifier_quiet_hours.py +0 -0
  671. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_notifier_service.py +0 -0
  672. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_notify.py +0 -0
  673. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_notify_drain.py +0 -0
  674. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_openapi.py +0 -0
  675. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_operational_defaults.py +0 -0
  676. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_overlap_fence.py +0 -0
  677. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_packaged_deploy_units.py +0 -0
  678. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_parentage.py +0 -0
  679. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_paste_landed.py +0 -0
  680. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_pipeline.py +0 -0
  681. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_plan_followup_approve_plan_command.py +0 -0
  682. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_plan_followup_pr_command.py +0 -0
  683. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_plan_followup_review_command.py +0 -0
  684. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_plan_only.py +0 -0
  685. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_plan_parser.py +0 -0
  686. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_platform_paths.py +0 -0
  687. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_pr_body_lint.py +0 -0
  688. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_prereqs.py +0 -0
  689. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_production_db_guard.py +0 -0
  690. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_progress.py +0 -0
  691. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_provider_seam.py +0 -0
  692. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_providers.py +0 -0
  693. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_providers_config_labels.py +0 -0
  694. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_providers_pty.py +0 -0
  695. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_quiet_hours.py +0 -0
  696. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_reap_merged_sessions.py +0 -0
  697. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_reap_stale_interactive_tick.py +0 -0
  698. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_reconcile_branch.py +0 -0
  699. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_reconcile_completions.py +0 -0
  700. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_reconcile_merges.py +0 -0
  701. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_reconcile_usage_limit_done.py +0 -0
  702. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_refine_chat.py +0 -0
  703. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_release_cordon_2101.py +0 -0
  704. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_release_propagate.py +0 -0
  705. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_release_unified_1242.py +0 -0
  706. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_release_verify.py +0 -0
  707. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_release_window.py +0 -0
  708. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_remote_auto_prune.py +0 -0
  709. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_remote_interactive_reaper.py +0 -0
  710. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_report_result_push.py +0 -0
  711. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_reports.py +0 -0
  712. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_retry.py +0 -0
  713. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_retry_advisory_1606.py +0 -0
  714. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_retry_type_1636.py +0 -0
  715. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_revalidate.py +0 -0
  716. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_review.py +0 -0
  717. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_review_end_review_without_verdict.py +0 -0
  718. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_review_parse_failure_diagnostic.py +0 -0
  719. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_review_reaffirm.py +0 -0
  720. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_review_state.py +0 -0
  721. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_review_verdict_backstop.py +0 -0
  722. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_review_verdict_override_audit.py +0 -0
  723. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_review_verdict_relay.py +0 -0
  724. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_review_zero_commits.py +0 -0
  725. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_scoped_review_wiring.py +0 -0
  726. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_scorecard.py +0 -0
  727. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_serve.py +0 -0
  728. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_serve_app_board_trim.py +0 -0
  729. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_session.py +0 -0
  730. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_slice_issue_attribution.py +0 -0
  731. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_smoke.py +0 -0
  732. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_smoke_live_checkout_restore.py +0 -0
  733. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_smoke_workflow.py +0 -0
  734. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_spend_ceiling.py +0 -0
  735. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_spend_ceiling_coordinator.py +0 -0
  736. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_split.py +0 -0
  737. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_split_work.py +0 -0
  738. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_stage_projection.py +0 -0
  739. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_stalled_pipeline.py +0 -0
  740. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_state.py +0 -0
  741. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_state_review_findings_daemon.py +0 -0
  742. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_status_fleet_footer.py +0 -0
  743. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_stop_1567.py +0 -0
  744. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_stuck.py +0 -0
  745. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_terminal_command.py +0 -0
  746. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_test_author.py +0 -0
  747. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_test_chat.py +0 -0
  748. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_test_orchestrator.py +0 -0
  749. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_test_report.py +0 -0
  750. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_test_verdict_parsing.py +0 -0
  751. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_test_verdict_transcript_floor.py +0 -0
  752. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_thin_client_board_audit.py +0 -0
  753. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_thin_client_config_load_1080.py +0 -0
  754. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_thin_client_daemon_routing_906.py +0 -0
  755. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_tmux_host.py +0 -0
  756. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_tmux_session.py +0 -0
  757. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_transcript_floor.py +0 -0
  758. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_usage.py +0 -0
  759. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_usage_limits.py +0 -0
  760. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_usage_rollup.py +0 -0
  761. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_venv_live_install_2121.py +0 -0
  762. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_version_single_source.py +0 -0
  763. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_watch.py +0 -0
  764. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_worker_events.py +0 -0
  765. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_worker_image_pin_sync.py +0 -0
  766. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_worker_safety.py +0 -0
  767. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_worktree.py +0 -0
  768. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  769. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/Cargo.lock +0 -0
  770. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/Cargo.toml +0 -0
  771. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/cargo-config-local-quadraui.toml.example +0 -0
  772. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/src/app/audit.rs +0 -0
  773. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/src/app/chat.rs +0 -0
  774. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/src/app/data.rs +0 -0
  775. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/src/app/dialogs.rs +0 -0
  776. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/src/app/drive.rs +0 -0
  777. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/src/app/drive_queue.rs +0 -0
  778. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/src/app/escalation.rs +0 -0
  779. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/src/app/events.rs +0 -0
  780. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/src/app/fixtures.rs +0 -0
  781. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/src/app/fleet_health.rs +0 -0
  782. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/src/app/fleet_sessions.rs +0 -0
  783. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/src/app/fleet_terminals.rs +0 -0
  784. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/src/app/format.rs +0 -0
  785. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/src/app/milestone_dag.rs +0 -0
  786. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/src/app/mod.rs +0 -0
  787. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/src/app/msv.rs +0 -0
  788. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/src/app/pipeline.rs +0 -0
  789. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/src/app/plans.rs +0 -0
  790. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/src/app/render.rs +0 -0
  791. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/src/app/reports.rs +0 -0
  792. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/src/app/sessions.rs +0 -0
  793. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/src/app/settings_ui.rs +0 -0
  794. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/src/app/sidebar.rs +0 -0
  795. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/src/app/terminal.rs +0 -0
  796. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/src/app/tests.rs +0 -0
  797. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/src/app/types.rs +0 -0
  798. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/src/app/workspace.rs +0 -0
  799. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/src/bin/gtk.rs +0 -0
  800. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/src/commands.rs +0 -0
  801. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/src/lib.rs +0 -0
  802. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/src/main.rs +0 -0
  803. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/src/settings.rs +0 -0
  804. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/tests/acceptance.rs +0 -0
  805. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/tests/cli.rs +0 -0
  806. {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/tests/fixtures/board_sample.json +0 -0
@@ -0,0 +1,42 @@
1
+ ---
2
+ name: Bug report
3
+ about: >-
4
+ Report broken behaviour for the test-first bug lane (docs/TEST_FIRST_BUG_LANE.md).
5
+ Fill in all four sections — a bug report missing any of them can't be turned
6
+ into a red test.
7
+ title: ''
8
+ labels: bug
9
+ assignees: ''
10
+ ---
11
+
12
+ <!--
13
+ This is the test-first bug lane's intake contract (docs/TEST_FIRST_BUG_LANE.md
14
+ "The intake contract", #1964). All four sections below are required. They are
15
+ what a hand-authored (or agent-assisted) `contract.md` gets derived from — no
16
+ milestone, no UX mock, no Gate-A sign-off required.
17
+
18
+ `coord issue create --expected --actual --repro --evidence` renders this same
19
+ structure from the CLI (coord/bug_intake.py is the single source of truth for
20
+ the four headings — keep this file's headings in sync with it).
21
+ -->
22
+
23
+ ## Expected behaviour
24
+
25
+ <!-- What should happen, in observable terms. -->
26
+
27
+ ## Actual behaviour
28
+
29
+ <!-- What happens instead. -->
30
+
31
+ ## Reproduction
32
+
33
+ <!-- The shortest path to see it: exact steps/commands, starting from a clean checkout. -->
34
+
35
+ ## Evidence
36
+
37
+ <!--
38
+ Screenshot, wireframe, OR a reference implementation that behaves correctly
39
+ (a sibling backend, or a prior release). A reference implementation is the
40
+ highest-value form of evidence — it makes the expectation executable by
41
+ construction ("X should look like Y here" is a complete specification).
42
+ -->
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-coordinator
3
- Version: 0.5.48
3
+ Version: 0.5.49
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.48
3
+ Version: 0.5.49
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
@@ -14,6 +14,7 @@ pyproject.toml
14
14
  .githooks/post-checkout
15
15
  .githooks/post-commit
16
16
  .githooks/post-merge
17
+ .github/ISSUE_TEMPLATE/bug_report.md
17
18
  .github/workflows/auto-release.yml
18
19
  .github/workflows/cargo-test.yml
19
20
  .github/workflows/publish.yml
@@ -41,6 +42,7 @@ coord/board_service.py
41
42
  coord/board_wire.py
42
43
  coord/brain.py
43
44
  coord/branch_model.py
45
+ coord/bug_intake.py
44
46
  coord/cargo_cache.py
45
47
  coord/ci_github.py
46
48
  coord/ci_store.py
@@ -440,6 +442,7 @@ tests/test_board_state.py
440
442
  tests/test_board_wire.py
441
443
  tests/test_brain.py
442
444
  tests/test_branch_model.py
445
+ tests/test_bug_intake.py
443
446
  tests/test_build_worker_image_env_update.py
444
447
  tests/test_cargo_cache.py
445
448
  tests/test_ci_acceptance_gate_1950.py
@@ -7,6 +7,7 @@
7
7
  ".githooks/post-checkout",
8
8
  ".githooks/post-commit",
9
9
  ".githooks/post-merge",
10
+ ".github/ISSUE_TEMPLATE/bug_report.md",
10
11
  ".github/workflows/auto-release.yml",
11
12
  ".github/workflows/cargo-test.yml",
12
13
  ".github/workflows/publish.yml",
@@ -35,6 +36,7 @@
35
36
  "coord/board_wire.py",
36
37
  "coord/brain.py",
37
38
  "coord/branch_model.py",
39
+ "coord/bug_intake.py",
38
40
  "coord/cargo_cache.py",
39
41
  "coord/ci_github.py",
40
42
  "coord/ci_store.py",
@@ -470,6 +472,7 @@
470
472
  "tests/test_board_wire.py",
471
473
  "tests/test_brain.py",
472
474
  "tests/test_branch_model.py",
475
+ "tests/test_bug_intake.py",
473
476
  "tests/test_build_worker_image_env_update.py",
474
477
  "tests/test_cargo_cache.py",
475
478
  "tests/test_ci_acceptance_gate_1950.py",
@@ -0,0 +1,8 @@
1
+ {
2
+ "tag": "0.5.49",
3
+ "distance": 0,
4
+ "node": "g06ce4a930ffe97c992bfbed693615c2504e4d2be",
5
+ "dirty": false,
6
+ "branch": "HEAD",
7
+ "node_date": "2026-08-13"
8
+ }
@@ -53,6 +53,40 @@ def _mocks_dir(milestone_number: int) -> str:
53
53
  return f"{ACCEPTANCE_DIRNAME}/{ms_dirname(milestone_number)}/mocks"
54
54
 
55
55
 
56
+ def issue_dirname(issue_number: int) -> str:
57
+ """The ``issue-NN`` directory name for a single-issue bug-lane contract
58
+ (docs/TEST_FIRST_BUG_LANE.md "The intake contract", #1964) — the bug
59
+ lane's counterpart to :func:`ms_dirname`, with no milestone in the name
60
+ because a bug has none.
61
+
62
+ This is purely a naming convention, not new plumbing: the manifest
63
+ scanner below (:func:`_manifest_paths`) globs ``*/manifest.*`` under
64
+ ``tests/acceptance/`` regardless of what the directory is called, so an
65
+ ``issue-NN/`` slice is discovered, run (``coord acceptance run --issue
66
+ N``), recorded (``coord acceptance record``), and injected into the
67
+ worker's briefing (:func:`oracle_loop_contract_block`) by the exact same
68
+ code path as an ``ms-NN/`` one — see ``TestOracleLoopContractBlock`` in
69
+ ``tests/test_acceptance.py``, which already proves the block is built
70
+ from whatever the owning directory happens to be named. Pinning the name
71
+ here just keeps every bug-lane contract in the same shape.
72
+ """
73
+ return f"issue-{issue_number}"
74
+
75
+
76
+ def bug_contract_path(issue_number: int) -> str:
77
+ """Repo-relative path to *issue_number*'s single-issue bug-lane contract
78
+ (docs/TEST_FIRST_BUG_LANE.md "The intake contract").
79
+
80
+ Unlike :func:`gate_a_contract_path`, nothing gates dispatch on this
81
+ existing — a bug issue has no milestone, so there is no Gate A to block
82
+ on it. It is hand-authored (or agent-assisted) directly from the four
83
+ intake fields (:mod:`coord.bug_intake`); once it — and a
84
+ ``manifest.yml`` alongside it — exist, the issue behaves exactly like an
85
+ authored ``ms-NN`` slice to every downstream command.
86
+ """
87
+ return f"{ACCEPTANCE_DIRNAME}/{issue_dirname(issue_number)}/contract.md"
88
+
89
+
56
90
  # Mock-fixture file extension -> the driver ``kind`` it implies (the SAME
57
91
  # rule each ``AcceptanceDriverConfig.mock`` glob already encodes in
58
92
  # coordinator.yml / docs/ORACLE_LOOP.md: ``"*.screen"`` for ``tui-tuidriver``,
@@ -0,0 +1,117 @@
1
+ """The bug-lane intake contract (#1964, docs/TEST_FIRST_BUG_LANE.md "The
2
+ intake contract").
3
+
4
+ A bug entering the test-first bug lane carries four fields instead of the
5
+ feature lane's UX mock:
6
+
7
+ 1. **Expected behaviour** — what should happen, in observable terms.
8
+ 2. **Actual behaviour** — what happens instead.
9
+ 3. **Reproduction** — the shortest path to see it.
10
+ 4. **Evidence** — screenshot, wireframe, or a reference implementation that
11
+ behaves correctly (a sibling backend, or a prior release).
12
+
13
+ This module is the single source of truth for how those four fields are
14
+ rendered into an issue body and parsed back out of one, so the fields
15
+ survive as addressable sections rather than prose a later author (human or
16
+ agent) has to re-derive:
17
+
18
+ - ``coord issue create --expected/--actual/--repro/--evidence``
19
+ (:mod:`coord.commands.issues`) calls :func:`format_bug_report` to compose
20
+ the body.
21
+ - ``.github/ISSUE_TEMPLATE/bug_report.md`` renders the exact same four
22
+ headings for a human filing straight through the GitHub UI — a
23
+ hand-authored ``contract.md`` (docs/TEST_FIRST_BUG_LANE.md, #1964
24
+ Deliverable 2) is written by reading that issue directly, no parsing
25
+ required. :func:`parse_bug_report` exists for the agent-assisted path and
26
+ for tooling that wants the four fields back out programmatically (e.g. a
27
+ future bug-contract-author briefing) — it is not on the hand-authoring
28
+ critical path.
29
+ """
30
+
31
+ from __future__ import annotations
32
+
33
+ import re
34
+ from dataclasses import dataclass
35
+
36
+ # Canonical section headings, in report order. `.github/ISSUE_TEMPLATE/
37
+ # bug_report.md` renders these same four strings as its Markdown headings —
38
+ # tests/test_bug_intake.py checks the template file against this module
39
+ # directly so the two can never drift apart silently.
40
+ EXPECTED_HEADING = "Expected behaviour"
41
+ ACTUAL_HEADING = "Actual behaviour"
42
+ REPRO_HEADING = "Reproduction"
43
+ EVIDENCE_HEADING = "Evidence"
44
+
45
+ #: Ordered (attribute name, heading text) pairs — single source of truth for
46
+ #: both the render order (:func:`format_bug_report`) and the parse targets
47
+ #: (:func:`parse_bug_report`).
48
+ FIELDS: tuple[tuple[str, str], ...] = (
49
+ ("expected", EXPECTED_HEADING),
50
+ ("actual", ACTUAL_HEADING),
51
+ ("repro", REPRO_HEADING),
52
+ ("evidence", EVIDENCE_HEADING),
53
+ )
54
+
55
+
56
+ @dataclass(frozen=True)
57
+ class BugReport:
58
+ """The four intake fields, parsed out of (or destined for) an issue
59
+ body. See module docstring for what each field means."""
60
+
61
+ expected: str
62
+ actual: str
63
+ repro: str
64
+ evidence: str
65
+
66
+
67
+ def format_bug_report(*, expected: str, actual: str, repro: str, evidence: str) -> str:
68
+ """Render the four intake fields as a Markdown issue body, one
69
+ addressable ``## `` section per field, in report order.
70
+
71
+ Used by ``coord issue create --expected/--actual/--repro/--evidence`` so
72
+ the fields land in the issue as structured sections rather than a single
73
+ freeform paragraph. Round-trips through :func:`parse_bug_report`.
74
+ """
75
+ values = {
76
+ "expected": expected, "actual": actual, "repro": repro, "evidence": evidence,
77
+ }
78
+ parts = [
79
+ f"## {heading}\n\n{values[attr].strip()}" for attr, heading in FIELDS
80
+ ]
81
+ return "\n\n".join(parts) + "\n"
82
+
83
+
84
+ def parse_bug_report(body: str) -> BugReport | None:
85
+ """Extract the four intake fields back out of an issue body rendered by
86
+ :func:`format_bug_report`, or hand-written to the same four headings.
87
+
88
+ Tolerant of heading level (``#`` through ``######``) and of surrounding
89
+ prose before the first heading or after the last section's text, so a
90
+ human-edited issue (extra context added above/below the four sections)
91
+ still parses. Matching is on heading text only, case-insensitively.
92
+
93
+ Returns ``None`` when any of the four sections is missing or empty — a
94
+ partial bug report is not a bug report the lane can act on. Callers that
95
+ want a best-effort partial read should not use this function.
96
+ """
97
+ heading_alts = "|".join(re.escape(heading) for _, heading in FIELDS)
98
+ pattern = re.compile(
99
+ rf"^#{{1,6}}\s*({heading_alts})\s*$", re.IGNORECASE | re.MULTILINE,
100
+ )
101
+ matches = list(pattern.finditer(body))
102
+ if not matches:
103
+ return None
104
+
105
+ by_heading: dict[str, str] = {}
106
+ for i, m in enumerate(matches):
107
+ start = m.end()
108
+ end = matches[i + 1].start() if i + 1 < len(matches) else len(body)
109
+ by_heading[m.group(1).strip().lower()] = body[start:end].strip()
110
+
111
+ kwargs: dict[str, str] = {}
112
+ for attr, heading in FIELDS:
113
+ value = by_heading.get(heading.lower())
114
+ if not value:
115
+ return None
116
+ kwargs[attr] = value
117
+ return BugReport(**kwargs)
@@ -213,7 +213,15 @@ def issue_reopen_cmd(
213
213
  "number on success.\n\n"
214
214
  "Use --body-file for long markdown bodies (avoids shell-quoting "
215
215
  "issues). '-' reads from stdin. Routes through the daemon seam so "
216
- "agents never need to call `gh issue create` directly."
216
+ "agents never need to call `gh issue create` directly.\n\n"
217
+ "For a bug entering the test-first bug lane "
218
+ "(docs/TEST_FIRST_BUG_LANE.md, #1964), pass --expected/--actual/"
219
+ "--repro/--evidence instead of --body/--body-file — the four fields "
220
+ "land in the issue as addressable sections (coord.bug_intake) "
221
+ "instead of a single freeform paragraph, so a later contract.md "
222
+ "author (hand or agent) doesn't have to re-derive them from prose. "
223
+ "All four are required together, and mutually exclusive with "
224
+ "--body/--body-file."
217
225
  ),
218
226
  )
219
227
  @click.argument("repo")
@@ -231,6 +239,25 @@ def issue_reopen_cmd(
231
239
  multiple=True,
232
240
  help="Label to add (repeatable). The label must already exist in the repo.",
233
241
  )
242
+ @click.option(
243
+ "--expected", default=None,
244
+ help="Bug-lane intake field: what should happen, in observable terms.",
245
+ )
246
+ @click.option(
247
+ "--actual", default=None,
248
+ help="Bug-lane intake field: what happens instead.",
249
+ )
250
+ @click.option(
251
+ "--repro", default=None,
252
+ help="Bug-lane intake field: the shortest path to see it.",
253
+ )
254
+ @click.option(
255
+ "--evidence", default=None,
256
+ help=(
257
+ "Bug-lane intake field: screenshot, wireframe, or a reference "
258
+ "implementation that behaves correctly."
259
+ ),
260
+ )
234
261
  @_CONFIG_OPTION
235
262
  def issue_create_cmd(
236
263
  repo: str,
@@ -238,8 +265,36 @@ def issue_create_cmd(
238
265
  body: str | None,
239
266
  body_file: Path | None,
240
267
  labels: tuple[str, ...],
268
+ expected: str | None,
269
+ actual: str | None,
270
+ repro: str | None,
271
+ evidence: str | None,
241
272
  config_path: Path,
242
273
  ) -> None:
274
+ bug_fields = {"expected": expected, "actual": actual, "repro": repro, "evidence": evidence}
275
+ given_bug_fields = {k: v for k, v in bug_fields.items() if v is not None}
276
+ if given_bug_fields:
277
+ if body is not None or body_file is not None:
278
+ click.echo(
279
+ "error: --expected/--actual/--repro/--evidence are mutually "
280
+ "exclusive with --body/--body-file",
281
+ err=True,
282
+ )
283
+ sys.exit(2)
284
+ missing = [k for k, v in bug_fields.items() if v is None]
285
+ if missing:
286
+ click.echo(
287
+ "error: --expected/--actual/--repro/--evidence must all be "
288
+ f"given together (missing: {', '.join(f'--{m}' for m in missing)})",
289
+ err=True,
290
+ )
291
+ sys.exit(2)
292
+ from coord.bug_intake import format_bug_report # noqa: PLC0415
293
+
294
+ body = format_bug_report(
295
+ expected=expected, actual=actual, repro=repro, evidence=evidence,
296
+ )
297
+
243
298
  cfg = _load_config(config_path)
244
299
  repo_entry = cfg.repo(repo)
245
300
  slug = repo_entry.github if repo_entry else repo
@@ -147,9 +147,10 @@ quadraui#541 (a framework parity gap), vimcode#625's real root cause (a floating
147
147
  path-dep silently restating every snapshot), and claude-coordinator#1950 (the cadence
148
148
  hole) — three findings in three repos, from one bug.
149
149
 
150
- ## The intake contract
150
+ ## The intake contract (#1964, shipped)
151
151
 
152
- An issue entering this lane carries:
152
+ An issue entering this lane carries four fields, instead of the feature lane's
153
+ milestone + UX mock:
153
154
 
154
155
  1. **Expected behaviour** — what should happen, in observable terms.
155
156
  2. **Actual behaviour** — what happens instead.
@@ -161,6 +162,79 @@ An issue entering this lane carries:
161
162
  implementation* is worth more than a screenshot: it makes the expectation executable
162
163
  by construction. "GTK should look like TUI here" is a complete specification.
163
164
 
165
+ **The fields survive as structured sections, not prose.** Two front doors, both
166
+ backed by the same four headings (`coord/bug_intake.py` is the single source of
167
+ truth, so they can never drift apart silently):
168
+
169
+ - `.github/ISSUE_TEMPLATE/bug_report.md` — a human filing straight through the
170
+ GitHub UI gets the four `##` sections pre-seeded.
171
+ - `coord issue create <repo> --title "…" --expected "…" --actual "…" --repro "…"
172
+ --evidence "…"` — the CLI/automation front door. All four are required together
173
+ and mutually exclusive with `--body`/`--body-file`; `coord.bug_intake.
174
+ format_bug_report` renders them as one `##`-headed section apiece so a later
175
+ contract author (hand or agent) reads them directly off the issue instead of
176
+ re-deriving them from a paragraph. `coord.bug_intake.parse_bug_report` is the
177
+ inverse, for the agent-assisted authoring path (below).
178
+
179
+ No milestone, no `coord acceptance mock`, no Gate-A sign-off happens at intake —
180
+ those are feature-lane machinery this issue deliberately does not touch.
181
+
182
+ ## Single-issue contract authoring (#1964, shipped)
183
+
184
+ The feature lane's contract lives at `tests/acceptance/ms-NN/contract.md`, gated by
185
+ Gate A and keyed by a milestone number. A bug has neither. Its contract lives at:
186
+
187
+ ```
188
+ tests/acceptance/issue-NN/contract.md # coord.acceptance.bug_contract_path(NN)
189
+ tests/acceptance/issue-NN/manifest.yml # tests: {<test-id>: NN}
190
+ tests/acceptance/issue-NN/<suite files> # sealed once authored, same as ms-NN
191
+ ```
192
+
193
+ `coord.acceptance.issue_dirname(NN)` / `bug_contract_path(NN)` pin the convention;
194
+ **everything downstream already works with zero new code**, because the manifest
195
+ scanner (`coord.acceptance._manifest_paths`) globs `*/manifest.*` under
196
+ `tests/acceptance/` regardless of what the directory is called:
197
+
198
+ - `coord acceptance run --repo R --issue NN` / `coord acceptance record --repo R
199
+ --issue NN --sha SHA` — already took no milestone argument (this is what the
200
+ issue's own framing points at: "the runner and the trust gate are reusable
201
+ as-is").
202
+ - `coord.acceptance.oracle_loop_contract_block` — the "🔒 Oracle-loop acceptance
203
+ contract" block prepended to a Work briefing — is keyed by **issue number**, not
204
+ milestone, and fires whenever the repo has an acceptance driver configured and
205
+ `ms_dir_for_issue` finds a slice for that issue. An `issue-NN/` slice is
206
+ discovered by the exact same call as an `ms-NN/` one. This is why "briefing-
207
+ contract auto-injection" is explicitly out of scope for this issue's deliverable
208
+ list below: it isn't missing, it's already generic. See
209
+ `TestBugLaneNeedsNoMilestone` in `tests/test_acceptance.py` for the end-to-end
210
+ proof (a hand-authored `issue-NN/manifest.yml`, no `ms-*` directory anywhere,
211
+ resolves through `load_manifest` → `ms_dir_for_issue` →
212
+ `oracle_loop_contract_block` unmodified).
213
+ - **The four fields themselves already reach the Work briefing, verbatim, with no
214
+ bug-lane-specific code at all.** `coord assign`/`coord dispatch` (the headless
215
+ dispatch every auto-loop uses) auto-generates the briefing from the raw issue
216
+ body whenever no explicit `--briefing` is given
217
+ (`coord/commands/dispatch.py`: `briefing = f"Issue #{issue}: {issue_title}\n\n
218
+ {issue_body}"`) — this is completely generic, not something #1964 added. Because
219
+ `coord issue create --expected/--actual/--repro/--evidence` writes the four
220
+ fields into the issue body as literal `##` sections (Deliverable 1), they ride
221
+ along in that auto-generated briefing intact, underneath the oracle-contract
222
+ block pointing at `contract.md`. Nothing about "make the four fields reach the
223
+ briefing" needed building — it falls out of Deliverable 1 (structured sections,
224
+ not prose) plus machinery that already existed.
225
+
226
+ **Authoring is hand-first.** Read the issue's four fields directly (no parsing
227
+ needed — that's the point of shipping them as sections) and write `contract.md` by
228
+ hand, scoped to the **one behaviour** the bug describes — not a whole surface, not
229
+ a whole milestone. `JDonaghy/vimcode#622` already establishes this is workable by
230
+ hand. An agent-assisted authoring dispatch (mirroring `coord acceptance mock`'s
231
+ independent-agent shape, but keyed by issue number with no milestone lookup) is a
232
+ natural follow-up once hand-authoring has enough mileage to know what to automate
233
+ — not built by this issue. Explicitly out of scope here, same as the milestone
234
+ ceremony above: Gate-A sign-off, stall-protocol automation beyond what already
235
+ exists issue-number-keyed (`coord acceptance stall` already takes no milestone
236
+ argument either).
237
+
164
238
  ## Known-good worked example
165
239
 
166
240
  The first pass through this loop should be the vimcode extensions-panel help popup,
@@ -168,12 +242,69 @@ found by operator smoke on 2026-08-07:
168
242
 
169
243
  - **Expected**: full box border, title centred in the top border.
170
244
  - **Actual**: side-bars only, title demoted to a content row.
245
+ - **Reproduction**: open vimcode, focus the extensions panel, press `?`.
171
246
  - **Evidence**: screenshots of both, plus `develop` as a working reference.
172
247
  - **Root cause**: already filed upstream as quadraui#541.
173
248
 
174
249
  It is an ideal rehearsal because the expensive part — characterising the bug — is
175
250
  already done, and it exercises every stage of the lane including the upstream-vs-local
176
- fork.
251
+ fork. Walked through end to end, in the shape #1964 ships:
252
+
253
+ 1. **Intake.**
254
+ ```
255
+ coord issue create vimcode \
256
+ --title "Extensions-panel help popup: missing top/bottom border" \
257
+ --expected "Full box border, title centred in the top border segment." \
258
+ --actual "Side-bars only (left/right verticals); title demoted to a plain content row." \
259
+ --repro "Open vimcode, focus the extensions panel, press ? to open the help popup." \
260
+ --evidence "Screenshots of both states, plus develop (pre-regression) as a working reference — quadraui#541 has the upstream root cause."
261
+ ```
262
+ This lands as vimcode issue #625, body already split into the four `##`
263
+ sections above — nothing left to re-derive.
264
+
265
+ 2. **Contract authoring (hand, scoped to the one behaviour).** Read #625 directly
266
+ and write `tests/acceptance/issue-625/contract.md` in vimcode's checkout:
267
+
268
+ ```markdown
269
+ # Bug-lane contract — issue #625: extensions-panel help popup border
270
+
271
+ ## The one behaviour
272
+ `TuiDriver` renders the help popup as a bordered box:
273
+ - Row 0 (top border) is a full horizontal rule using the top-left/top-right
274
+ corner glyphs at both ends — `driver.find(top_left)` and
275
+ `driver.find(top_right)` both return `Some(..)` on the popup's top row.
276
+ - The popup's title text is found on that same top row, horizontally
277
+ centred — not on a separate content row below the border.
278
+ - Left/right columns render the vertical border glyph on every popup row
279
+ (this part already worked pre-regression; asserting it too catches a
280
+ half-fix that adds a top rule but drops the sides).
281
+
282
+ ## Done condition (the red gate)
283
+ Before any fix, a test asserting the three bullets above must FAIL,
284
+ specifically on the title-row / top-border assertions. After the fix, the
285
+ same test — unmodified — goes green.
286
+ ```
287
+
288
+ Then a matching `tests/acceptance/issue-625/manifest.yml`
289
+ (`tests: {help_popup_border::has_top_and_bottom_rule: 625, ...}`) and the
290
+ actual `TuiDriver` assertions, committed to vimcode's `tests/acceptance/`
291
+ the same way any `ms-NN` slice is.
292
+
293
+ 3. **Red gate.** `coord acceptance run --repo vimcode --issue 625` must FAIL,
294
+ for the title/border reason above, before any fix lands — proves the test
295
+ exercises the reported bug rather than passing vacuously.
296
+
297
+ 4. **Dispatch, fix, converge.** The issue dispatches as ordinary `work` (no
298
+ milestone, no Gate A to wait on). The worker briefing already carries the
299
+ "🔒 Oracle-loop acceptance contract" block pointing at
300
+ `tests/acceptance/issue-625/contract.md`, and iterates with
301
+ `coord acceptance run --repo vimcode --issue 625` until green, same loop as
302
+ the feature lane.
303
+
304
+ 5. **Trust gate + cadence.** `coord acceptance record --repo vimcode --issue 625
305
+ --sha <pushed-sha>` re-runs the sealed slice externally. Because vimcode's real
306
+ test command runs the whole accumulated `tests/acceptance/` tree (#1950), this
307
+ slice re-runs on every later issue forever — coverage ratchets, it does not rot.
177
308
 
178
309
  ## What this program is *not*
179
310
 
@@ -14,8 +14,10 @@ from coord.acceptance import (
14
14
  ManifestError,
15
15
  acceptance_capability_gap,
16
16
  build_verdict,
17
+ bug_contract_path,
17
18
  dump_manifest_error_hint,
18
19
  failure_summary,
20
+ issue_dirname,
19
21
  load_manifest,
20
22
  ms_dir_for_issue,
21
23
  oracle_loop_contract_block,
@@ -247,6 +249,45 @@ class TestOracleLoopContractBlock:
247
249
  assert "not the other way around" in block
248
250
 
249
251
 
252
+ class TestIssueDirnameAndBugContractPath:
253
+ """#1964 (docs/TEST_FIRST_BUG_LANE.md): the bug lane's single-issue
254
+ counterpart to ms_dirname/gate_a_contract_path — no milestone number
255
+ anywhere in the name."""
256
+
257
+ def test_issue_dirname(self) -> None:
258
+ assert issue_dirname(1234) == "issue-1234"
259
+
260
+ def test_bug_contract_path(self) -> None:
261
+ assert bug_contract_path(1234) == "tests/acceptance/issue-1234/contract.md"
262
+
263
+
264
+ class TestBugLaneNeedsNoMilestone:
265
+ """#1964: end-to-end proof that a hand-authored `issue-NN/` slice —
266
+ with no `ms-NN/` directory anywhere in the tree, and no milestone
267
+ involved at any step — is discovered, scoped, and injected into the
268
+ worker briefing by the exact same machinery an `ms-NN/` slice uses.
269
+ This is the acceptance bar for "no milestone ceremony required"."""
270
+
271
+ def test_manifest_and_contract_block_work_with_only_an_issue_dir(
272
+ self, tmp_path: Path
273
+ ) -> None:
274
+ root = tmp_path / "tests" / "acceptance"
275
+ bug_dir = root / issue_dirname(1234)
276
+ bug_dir.mkdir(parents=True)
277
+ (bug_dir / "manifest.yml").write_text("tests:\n issue_1234::popup_border: 1234\n")
278
+
279
+ assert ms_dir_for_issue(root, 1234) == "issue-1234"
280
+ manifest = load_manifest(root)
281
+ assert manifest == {"issue_1234::popup_border": 1234}
282
+
283
+ block = oracle_loop_contract_block(root, "vimcode", 1234)
284
+ assert bug_contract_path(1234) in block
285
+ assert "coord acceptance run --repo vimcode --issue 1234" in block
286
+ # No ms-* dir exists anywhere — confirm the fixture itself proves the
287
+ # negative, not just that the assertions above happened to pass.
288
+ assert not list(root.glob("ms-*"))
289
+
290
+
250
291
  class TestAcceptanceCapabilityGap:
251
292
  """#966: cheap detection mirroring `coord.smoke.pick_smoke_machine`'s
252
293
  candidate filter — no remote-exec plumbing, just "is this the wrong
@@ -0,0 +1,93 @@
1
+ """Tests for coord/bug_intake.py — the bug-lane intake contract's four-field
2
+ format/parse round-trip (#1964, docs/TEST_FIRST_BUG_LANE.md)."""
3
+
4
+ from __future__ import annotations
5
+
6
+ from pathlib import Path
7
+
8
+ from coord.bug_intake import BugReport, FIELDS, format_bug_report, parse_bug_report
9
+
10
+ REPO_ROOT = Path(__file__).resolve().parent.parent
11
+
12
+
13
+ class TestFormatBugReport:
14
+ def test_renders_all_four_sections_in_order(self) -> None:
15
+ body = format_bug_report(
16
+ expected="full box border", actual="side-bars only",
17
+ repro="open the extensions panel help popup",
18
+ evidence="screenshots of both, plus develop as a reference",
19
+ )
20
+ assert body.index("## Expected behaviour") < body.index("## Actual behaviour")
21
+ assert body.index("## Actual behaviour") < body.index("## Reproduction")
22
+ assert body.index("## Reproduction") < body.index("## Evidence")
23
+ assert "full box border" in body
24
+ assert "side-bars only" in body
25
+ assert "open the extensions panel help popup" in body
26
+ assert "develop as a reference" in body
27
+
28
+ def test_strips_surrounding_whitespace_per_field(self) -> None:
29
+ body = format_bug_report(
30
+ expected=" a \n", actual="b", repro="c", evidence="d",
31
+ )
32
+ assert "## Expected behaviour\n\na" in body
33
+
34
+
35
+ class TestParseBugReport:
36
+ def test_round_trips_through_format(self) -> None:
37
+ body = format_bug_report(
38
+ expected="a", actual="b", repro="c", evidence="d",
39
+ )
40
+ report = parse_bug_report(body)
41
+ assert report == BugReport(expected="a", actual="b", repro="c", evidence="d")
42
+
43
+ def test_none_when_no_headings_present(self) -> None:
44
+ assert parse_bug_report("just some freeform text, no structure") is None
45
+
46
+ def test_none_when_a_section_is_missing(self) -> None:
47
+ body = "## Expected behaviour\n\na\n\n## Actual behaviour\n\nb\n"
48
+ assert parse_bug_report(body) is None
49
+
50
+ def test_none_when_a_section_is_empty(self) -> None:
51
+ body = (
52
+ "## Expected behaviour\n\na\n\n"
53
+ "## Actual behaviour\n\nb\n\n"
54
+ "## Reproduction\n\n\n\n"
55
+ "## Evidence\n\nd\n"
56
+ )
57
+ assert parse_bug_report(body) is None
58
+
59
+ def test_tolerant_of_heading_level_and_case(self) -> None:
60
+ body = (
61
+ "# expected BEHAVIOUR\na\n"
62
+ "### actual behaviour\nb\n"
63
+ "## reproduction\nc\n"
64
+ "###### evidence\nd\n"
65
+ )
66
+ assert parse_bug_report(body) == BugReport(
67
+ expected="a", actual="b", repro="c", evidence="d",
68
+ )
69
+
70
+ def test_tolerant_of_prose_before_and_after(self) -> None:
71
+ body = (
72
+ "Some intro context an operator added.\n\n"
73
+ "## Expected behaviour\n\na\n\n"
74
+ "## Actual behaviour\n\nb\n\n"
75
+ "## Reproduction\n\nc\n\n"
76
+ "## Evidence\n\nd\n\n"
77
+ "Some trailing note.\n"
78
+ )
79
+ report = parse_bug_report(body)
80
+ assert report.expected == "a"
81
+ assert report.evidence == "d\n\nSome trailing note."
82
+
83
+
84
+ class TestIssueTemplateHeadingsMatchModule:
85
+ """The GitHub-native template (.github/ISSUE_TEMPLATE/bug_report.md)
86
+ must render exactly the same four headings as this module, or a
87
+ hand-filed issue silently fails to `parse_bug_report` even though it
88
+ looks identical to a `coord issue create --expected ...`-authored one."""
89
+
90
+ def test_template_headings_match_and_parse(self) -> None:
91
+ template = (REPO_ROOT / ".github/ISSUE_TEMPLATE/bug_report.md").read_text()
92
+ for _, heading in FIELDS:
93
+ assert f"## {heading}" in template, f"missing heading: {heading!r}"