code-coordinator 0.5.76__tar.gz → 0.5.77__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.
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/PKG-INFO +1 -1
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/drive.py +170 -14
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/docs/DRIVE_QUEUE.md +13 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_drive.py +271 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/.github/workflows/release-tui.yml +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/.gitignore +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/CLAUDE.md +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/GOAL.md +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/LICENSE +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/MANIFEST.in +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/README.md +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/__init__.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/agent.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/audit.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/board_bool_guard.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/board_service.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/brain.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/claim.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/cli.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/client.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/comments.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/config.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dao.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/.gitignore +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/components.json +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/dist/assets/Gallery-da3qNiIw.js +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/dist/assets/Terminal-skVFCxPU.js +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/dist/assets/index-DltfZR5f.js +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/dist/index.html +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/dist/sw.js +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/eslint.config.js +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/index.html +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/package-lock.json +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/package.json +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/playwright.config.ts +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/postcss.config.js +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/src/App.tsx +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/src/api/client.ts +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/src/api/generated.ts +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/src/index.css +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/src/main.tsx +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/src/test-setup.ts +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/tailwind.config.js +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/tsconfig.json +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/tsconfig.node.json +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dashboard/webapp/vite.config.ts +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/db.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/deps.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/events.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/filelock.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/freshness.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/gates.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/goal.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/health/context.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/health/models.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/health/render.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/health/units.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/hooks.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/interactive.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/models.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/network.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/notify.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/openapi.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/parentage.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/plans.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/progress.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/release_window.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/reports.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/review.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/smoke.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/split_work.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/state.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/test_author.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/test_report.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/usage.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/install-agent.sh +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/pyproject.toml +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/setup.cfg +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/__init__.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/acceptance/ms-33/audit_1039.rs +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/acceptance/ms-33/contract.md +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/acceptance/ms-33/manifest.yml +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/acceptance/ms-38/contract.md +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/acceptance/ms-38/manifest.yml +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/conftest.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_config.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_db.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_events.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_init.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_models.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_network.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_no_direct_gh_calls.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_review.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_session.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_split.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_state.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tui/Cargo.lock +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tui/Cargo.toml +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tui/cargo-config-local-quadraui.toml.example +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tui/src/app/audit.rs +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tui/src/app/chat.rs +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tui/src/app/data.rs +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tui/src/app/dialogs.rs +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tui/src/app/drive.rs +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tui/src/app/drive_queue.rs +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tui/src/app/escalation.rs +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tui/src/app/events.rs +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tui/src/app/fixtures.rs +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tui/src/app/fleet_health.rs +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tui/src/app/fleet_sessions.rs +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tui/src/app/fleet_terminals.rs +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tui/src/app/format.rs +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tui/src/app/milestone_dag.rs +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tui/src/app/mod.rs +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tui/src/app/msv.rs +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tui/src/app/pipeline.rs +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tui/src/app/plans.rs +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tui/src/app/render.rs +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tui/src/app/reports.rs +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tui/src/app/sessions.rs +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tui/src/app/settings_ui.rs +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tui/src/app/sidebar.rs +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tui/src/app/terminal.rs +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tui/src/app/tests.rs +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tui/src/app/types.rs +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tui/src/app/workspace.rs +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tui/src/bin/gtk.rs +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tui/src/commands.rs +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tui/src/lib.rs +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tui/src/main.rs +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tui/src/settings.rs +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tui/tests/acceptance.rs +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tui/tests/cli.rs +0 -0
- {code_coordinator-0.5.76 → code_coordinator-0.5.77}/tui/tests/fixtures/board_sample.json +0 -0
|
@@ -289,6 +289,21 @@ class DriveCounters:
|
|
|
289
289
|
# capture deserves its own full budget of cheap waits before the next
|
|
290
290
|
# forced retry.
|
|
291
291
|
gate_wait_rounds: int = 0
|
|
292
|
+
# #2229: the value `merge_attempts` held when the #1738 stale-smoke
|
|
293
|
+
# re-test last fired off a reason read out of `last_merge_diagnostic`
|
|
294
|
+
# rather than off the board (`-1` = never). A de-duplication latch in the
|
|
295
|
+
# same spirit as `review_fix_dispatched_for` above, for the same reason:
|
|
296
|
+
# `coord diagnose --stage test --reset` clears `test_state`, but the board
|
|
297
|
+
# this driver polls needs a beat to show it, and until it does the state
|
|
298
|
+
# is byte-for-byte identical to the one that triggered the re-test —
|
|
299
|
+
# except that, unlike a board `merge_reason`, the captured diagnostic is
|
|
300
|
+
# frozen and CANNOT change on its own. Without the latch a lagging board
|
|
301
|
+
# would burn the whole `max_fix_rounds` budget re-testing off one stale
|
|
302
|
+
# snapshot. Releases when `merge_attempts` advances, i.e. when a real
|
|
303
|
+
# `coord merge --only` attempt has re-captured the diagnostic — which is
|
|
304
|
+
# #2149's rule (act on the snapshot, then go re-validate it for real)
|
|
305
|
+
# expressed as a latch rather than a wait counter.
|
|
306
|
+
stale_smoke_diagnostic_attempt: int = -1
|
|
292
307
|
# #2199: bounded retry for the trust gate's OWN dispatch — distinct from
|
|
293
308
|
# `fix_rounds` (which bounds "the work needs another round" once a
|
|
294
309
|
# verdict, passed or failed, actually landed on the board). This counts
|
|
@@ -2377,19 +2392,112 @@ def _merge_gate_kind(reason: str) -> str | None:
|
|
|
2377
2392
|
_STALE_SMOKE_MARKERS = _mq_stale_smoke_markers
|
|
2378
2393
|
_is_stale_smoke_reason = _mq_is_stale_smoke_reason
|
|
2379
2394
|
|
|
2395
|
+
# #2229: `coord merge --only` prints a gate line per REFUSED gate, and the
|
|
2396
|
+
# same run prints a "waived by this run" variant of that line for a gate the
|
|
2397
|
+
# invocation's own `--skip-review`/`--skip-smoke` disarmed
|
|
2398
|
+
# (`coord.commands.merge`, the `_status` ternary). A waived gate did not
|
|
2399
|
+
# refuse anything, so its line must never be read back as a refusal.
|
|
2400
|
+
_GATE_WAIVED_MARKER = "waived by this run"
|
|
2401
|
+
|
|
2402
|
+
|
|
2403
|
+
def _extract_gate_refusal_reason(diagnostic: str | None) -> str:
|
|
2404
|
+
"""The first smoke/review gate refusal named anywhere in a captured
|
|
2405
|
+
`coord merge --only` *diagnostic*, or ``""`` (#2229).
|
|
2406
|
+
|
|
2407
|
+
Unlike :func:`_extract_gate_block_reason` — which matches only
|
|
2408
|
+
`_explain_missing_only_entry`'s "enqueue blocked by <gate>" wording, i.e.
|
|
2409
|
+
the NOT-YET-ENQUEUED shape — this reads the refusal out of a run where
|
|
2410
|
+
the entry *did* resolve. `coord merge --only` echoes one
|
|
2411
|
+
`` gate <name>: <reason> — will block this merge`` line per failing gate
|
|
2412
|
+
before `process()` runs, and `process()`'s own events (``smoke_required
|
|
2413
|
+
— …``) name it again; both are ordinary lines carrying the same gate
|
|
2414
|
+
vocabulary :func:`_merge_gate_kind` already classifies, so this scans
|
|
2415
|
+
lines rather than pinning one exact format that would silently stop
|
|
2416
|
+
matching the day either message is reworded.
|
|
2417
|
+
|
|
2418
|
+
quadraui#309: that text is the ONLY place the refusal existed. The board
|
|
2419
|
+
plan reported ``READY`` with an empty reason (``merge_queue.plan()``'s
|
|
2420
|
+
`_entry_gate_status` degrades to a no-op without live SHA data — the
|
|
2421
|
+
#1640 door, the #1566 "plan says ready, ``--only`` refuses" split), so
|
|
2422
|
+
`_merge_gate_divergence` saw nothing to classify and the drive spent
|
|
2423
|
+
three blind retries and died — printing this very text in its own death
|
|
2424
|
+
message.
|
|
2425
|
+
"""
|
|
2426
|
+
for line in (diagnostic or "").splitlines():
|
|
2427
|
+
if _GATE_WAIVED_MARKER in line.lower():
|
|
2428
|
+
continue
|
|
2429
|
+
if _merge_gate_kind(line) is not None:
|
|
2430
|
+
return line.strip()
|
|
2431
|
+
return ""
|
|
2432
|
+
|
|
2433
|
+
|
|
2434
|
+
def _effective_merge_gate_reason(
|
|
2435
|
+
state: IssueState, counters: DriveCounters
|
|
2436
|
+
) -> tuple[str, bool]:
|
|
2437
|
+
"""The reason to classify the merge gate from, and whether it came from
|
|
2438
|
+
the captured diagnostic rather than the board (#2229).
|
|
2439
|
+
|
|
2440
|
+
Prefers `state.merge_reason` — live, re-read on every poll. Falls back to
|
|
2441
|
+
`counters.last_merge_diagnostic` only when the board reason names no gate
|
|
2442
|
+
this module knows an action for, because that is exactly the quadraui#309
|
|
2443
|
+
shape: the board is silent while this driver's OWN last `coord merge
|
|
2444
|
+
--only` attempt already captured the refusal verbatim.
|
|
2445
|
+
|
|
2446
|
+
The fallback is a LAST resort, taken only when the board offers no
|
|
2447
|
+
competing live signal — a snapshot must never outrank something being
|
|
2448
|
+
re-read every poll. Three cases keep the board's own reading:
|
|
2449
|
+
|
|
2450
|
+
- ``merge_status == ""`` — "no queue entry at all" is #2078's shape, with
|
|
2451
|
+
its own `_extract_gate_block_reason` bounded-wait arm in
|
|
2452
|
+
:func:`_decide_merge`. #2229 is about the case #2078 skips wholesale:
|
|
2453
|
+
an entry that IS enqueued (READY, PENDING, …) whose refusal only a
|
|
2454
|
+
live attempt ever saw.
|
|
2455
|
+
- ``merge_status == "CONFLICT"`` — a live merge-mechanics block with its
|
|
2456
|
+
own resolution path (#1474/#241's conflict-fix dispatch, reached
|
|
2457
|
+
through the bounded retry below). A re-test does not rebase a branch,
|
|
2458
|
+
and diverting to one is the same stall this issue is about, inverted.
|
|
2459
|
+
- a CI reason (#1891/#1892) — `merge_reason` already carries a live,
|
|
2460
|
+
recognised signal whose only resolution is more real time. Those two
|
|
2461
|
+
bare waits sit right after the divergence check and must keep winning.
|
|
2462
|
+
|
|
2463
|
+
The bool is the caller's warning label: a diagnostic-derived reason is a
|
|
2464
|
+
SNAPSHOT of the last real attempt, refreshed by nothing but another
|
|
2465
|
+
attempt (#2149's lesson — coord-portal#50 waited 2h33m on a cached
|
|
2466
|
+
"review required" that had already cleared). It is strictly fresher than
|
|
2467
|
+
an empty board reason, but it must not be re-acted on indefinitely; see
|
|
2468
|
+
`DriveCounters.stale_smoke_diagnostic_attempt`.
|
|
2469
|
+
"""
|
|
2470
|
+
if _merge_gate_kind(state.merge_reason) is not None:
|
|
2471
|
+
return state.merge_reason, False
|
|
2472
|
+
if state.merge_status == "" or state.merge_status.upper() == "CONFLICT":
|
|
2473
|
+
return state.merge_reason, False
|
|
2474
|
+
if is_ci_pending_reason(state.merge_reason) or is_ci_infra_reason(
|
|
2475
|
+
state.merge_reason
|
|
2476
|
+
):
|
|
2477
|
+
return state.merge_reason, False
|
|
2478
|
+
fallback = _extract_gate_refusal_reason(counters.last_merge_diagnostic)
|
|
2479
|
+
if fallback:
|
|
2480
|
+
return fallback, True
|
|
2481
|
+
return state.merge_reason, False
|
|
2380
2482
|
|
|
2381
|
-
|
|
2483
|
+
|
|
2484
|
+
def _merge_gate_divergence(state: IssueState, reason: str | None = None) -> str | None:
|
|
2382
2485
|
"""``"smoke"``/``"review"`` when *state* shows the #1526 divergence,
|
|
2383
2486
|
else ``None``.
|
|
2384
2487
|
|
|
2385
|
-
The divergence:
|
|
2386
|
-
this SAME state's `work_test_state`/`review_verdict` says the
|
|
2387
|
-
That contradiction can only come from `coord merge` checking
|
|
2388
|
-
this driver's view does not (freshness against the CURRENT
|
|
2389
|
-
not just the terminal verdict) — never from a retry, since
|
|
2390
|
-
input changes by running `coord merge` again unchanged.
|
|
2488
|
+
The divergence: the merge gate's *reason* names a smoke/review block
|
|
2489
|
+
while this SAME state's `work_test_state`/`review_verdict` says the
|
|
2490
|
+
opposite. That contradiction can only come from `coord merge` checking
|
|
2491
|
+
something this driver's view does not (freshness against the CURRENT
|
|
2492
|
+
branch/base, not just the terminal verdict) — never from a retry, since
|
|
2493
|
+
neither input changes by running `coord merge` again unchanged.
|
|
2494
|
+
|
|
2495
|
+
*reason* (#2229) defaults to `state.merge_reason`, the board's own text.
|
|
2496
|
+
:func:`_decide_merge` passes :func:`_effective_merge_gate_reason`'s
|
|
2497
|
+
result instead so a refusal that exists ONLY in the last captured
|
|
2498
|
+
`coord merge --only` diagnostic still classifies.
|
|
2391
2499
|
"""
|
|
2392
|
-
kind = _merge_gate_kind(state.merge_reason)
|
|
2500
|
+
kind = _merge_gate_kind(state.merge_reason if reason is None else reason)
|
|
2393
2501
|
if kind == "smoke" and state.work_test_state in ("passed", "skipped"):
|
|
2394
2502
|
return "smoke"
|
|
2395
2503
|
if kind == "review" and state.review_verdict == "approve":
|
|
@@ -2398,7 +2506,11 @@ def _merge_gate_divergence(state: IssueState) -> str | None:
|
|
|
2398
2506
|
|
|
2399
2507
|
|
|
2400
2508
|
def _escalate_merge(
|
|
2401
|
-
state: IssueState,
|
|
2509
|
+
state: IssueState,
|
|
2510
|
+
status: str,
|
|
2511
|
+
*,
|
|
2512
|
+
gate_kind: str | None = None,
|
|
2513
|
+
gate_reason: str | None = None,
|
|
2402
2514
|
) -> Action:
|
|
2403
2515
|
"""Build the EXIT action for a merge status retrying cannot fix (#1505).
|
|
2404
2516
|
|
|
@@ -2422,6 +2534,16 @@ def _escalate_merge(
|
|
|
2422
2534
|
(re-confirm the test verdict, or a scoped/full re-review) rather than the
|
|
2423
2535
|
generic "inspect the plan" fallback below.
|
|
2424
2536
|
|
|
2537
|
+
*gate_reason* (#2229) is the text that gate_kind was classified from,
|
|
2538
|
+
when it is NOT `state.merge_reason` — i.e. when the board carried no
|
|
2539
|
+
reason and :func:`_effective_merge_gate_reason` recovered the refusal
|
|
2540
|
+
from the last captured `coord merge --only` diagnostic instead. The
|
|
2541
|
+
escalation narrative quotes it, because ``reports ''`` is exactly the
|
|
2542
|
+
unactionable escalation quadraui#309 would otherwise have produced. The
|
|
2543
|
+
recorded ``--gate merge_reason=…`` pair still reports the BOARD's own
|
|
2544
|
+
(empty) value — the gates block is a snapshot of board state, and
|
|
2545
|
+
overwriting it here would hide the very divergence being escalated.
|
|
2546
|
+
|
|
2425
2547
|
Otherwise, the proposed command mirrors the #1477 resolution this issue
|
|
2426
2548
|
was opened over: when a PR is known, ``gh pr merge --rebase`` + ``coord
|
|
2427
2549
|
reconcile-merges`` is the sanctioned escape hatch (also documented in
|
|
@@ -2468,9 +2590,10 @@ def _escalate_merge(
|
|
|
2468
2590
|
if gate_kind == "smoke"
|
|
2469
2591
|
else f"review_verdict={state.review_verdict!r}"
|
|
2470
2592
|
)
|
|
2593
|
+
reported = state.merge_reason if gate_reason is None else gate_reason
|
|
2471
2594
|
reason = (
|
|
2472
2595
|
f"{gate_kind}_required — coord merge's own gate reports "
|
|
2473
|
-
f"{
|
|
2596
|
+
f"{reported!r}, but this driver's OWN view already "
|
|
2474
2597
|
f"shows {driver_view} — the two cannot converge by retrying the "
|
|
2475
2598
|
"identical `coord merge` command (#1526); a human must "
|
|
2476
2599
|
"reconcile them"
|
|
@@ -2562,8 +2685,30 @@ def _decide_merge(
|
|
|
2562
2685
|
readings; retrying the identical ``coord merge`` command changes neither
|
|
2563
2686
|
side of the disagreement.
|
|
2564
2687
|
"""
|
|
2565
|
-
|
|
2566
|
-
|
|
2688
|
+
# #2229: classify from the board's `merge_reason` when it names a gate,
|
|
2689
|
+
# and otherwise from this driver's OWN last `coord merge --only` output.
|
|
2690
|
+
# quadraui#309 sat blocked for 11h on a merge that landed first try by
|
|
2691
|
+
# hand because the board reason was empty (#1566/#1640) while the
|
|
2692
|
+
# captured diagnostic said, in as many words, "smoke test verdict is
|
|
2693
|
+
# stale" — the exact string the #1738 auto-repair arm below keys on. It
|
|
2694
|
+
# was used for one thing: being printed into the give-up message.
|
|
2695
|
+
gate_reason, gate_reason_from_diagnostic = _effective_merge_gate_reason(
|
|
2696
|
+
state, counters
|
|
2697
|
+
)
|
|
2698
|
+
divergence = _merge_gate_divergence(state, reason=gate_reason)
|
|
2699
|
+
if (
|
|
2700
|
+
gate_reason_from_diagnostic
|
|
2701
|
+
and divergence == "smoke"
|
|
2702
|
+
and _is_stale_smoke_reason(gate_reason)
|
|
2703
|
+
and counters.stale_smoke_diagnostic_attempt == counters.merge_attempts
|
|
2704
|
+
):
|
|
2705
|
+
# A re-test already fired off THIS snapshot and no real attempt has
|
|
2706
|
+
# re-captured it since, so re-firing would spend a second fix round
|
|
2707
|
+
# on evidence that literally cannot have changed. Drop to the bounded
|
|
2708
|
+
# retry below instead: that attempt refreshes the diagnostic, which
|
|
2709
|
+
# either lands the merge or re-arms this arm against fresh evidence.
|
|
2710
|
+
divergence = None
|
|
2711
|
+
if divergence == "smoke" and _is_stale_smoke_reason(gate_reason):
|
|
2567
2712
|
# #1738: a STALE (not missing) smoke verdict has a safe, bounded
|
|
2568
2713
|
# self-service fix this driver can take without a human — re-run the
|
|
2569
2714
|
# Test stage against the current base via the same non-destructive
|
|
@@ -2575,8 +2720,17 @@ def _decide_merge(
|
|
|
2575
2720
|
# going stale (e.g. a base that keeps moving under it) still
|
|
2576
2721
|
# converges to an escalation instead of spinning forever.
|
|
2577
2722
|
if counters.fix_rounds >= opts.max_fix_rounds:
|
|
2578
|
-
return _escalate_merge(
|
|
2723
|
+
return _escalate_merge(
|
|
2724
|
+
state,
|
|
2725
|
+
state.merge_status,
|
|
2726
|
+
gate_kind=divergence,
|
|
2727
|
+
gate_reason=gate_reason,
|
|
2728
|
+
)
|
|
2579
2729
|
counters.fix_rounds += 1
|
|
2730
|
+
if gate_reason_from_diagnostic:
|
|
2731
|
+
# #2229: arm the latch above — one re-test per captured
|
|
2732
|
+
# diagnostic, then a real attempt has to re-validate it.
|
|
2733
|
+
counters.stale_smoke_diagnostic_attempt = counters.merge_attempts
|
|
2580
2734
|
return Action(
|
|
2581
2735
|
kind=RUN,
|
|
2582
2736
|
label=(
|
|
@@ -2597,7 +2751,9 @@ def _decide_merge(
|
|
|
2597
2751
|
),
|
|
2598
2752
|
)
|
|
2599
2753
|
if divergence is not None:
|
|
2600
|
-
return _escalate_merge(
|
|
2754
|
+
return _escalate_merge(
|
|
2755
|
+
state, state.merge_status, gate_kind=divergence, gate_reason=gate_reason
|
|
2756
|
+
)
|
|
2601
2757
|
|
|
2602
2758
|
# #1891: a CI verdict that has not arrived is not a CI verdict of "no" —
|
|
2603
2759
|
# checked BEFORE the `status` switch below (and regardless of what
|
|
@@ -34,6 +34,19 @@ Three arms have since landed against it:
|
|
|
34
34
|
* **#1738** — `coord drive` re-dispatches the Test stage once, automatically,
|
|
35
35
|
on a STALE (not missing) verdict. Only fires while a **live drive** is
|
|
36
36
|
watching the issue. Measured 2026-08-03: reached 1 of 4 real stalls.
|
|
37
|
+
**#2229** widened what it can see: the arm used to classify the gate from
|
|
38
|
+
the board's `merge_reason` alone, which `merge_queue.plan()` leaves *empty*
|
|
39
|
+
whenever its render-time freshness check has no live SHA data (the #1640
|
|
40
|
+
door / the #1566 "plan says READY, `--only` refuses" split) — so on an
|
|
41
|
+
already-enqueued entry the arm could not arm at all, and the drive spent
|
|
42
|
+
three blind retries and died *printing the refusal it had captured*
|
|
43
|
+
(quadraui#309: 11h blocked on a merge that then landed first try by hand).
|
|
44
|
+
It now falls back to the last `coord merge --only` diagnostic the drive
|
|
45
|
+
itself captured. Still only the STALE arm self-repairs — a *missing*
|
|
46
|
+
verdict is the #1640 lost-write shape and escalates to a human unchanged —
|
|
47
|
+
and, because that diagnostic is a snapshot rather than live state (#2149),
|
|
48
|
+
each capture buys at most one re-test before a real attempt has to
|
|
49
|
+
re-validate it.
|
|
37
50
|
* **#1769** — `coord merge --revalidate` re-tests a stale-but-`passed` entry
|
|
38
51
|
against the current base from the *merge* lane, which is where a branch with
|
|
39
52
|
no live drive actually sits.
|
|
@@ -3413,6 +3413,277 @@ def test_is_stale_smoke_reason_distinguishes_stale_from_missing():
|
|
|
3413
3413
|
assert not _is_stale_smoke_reason(None)
|
|
3414
3414
|
|
|
3415
3415
|
|
|
3416
|
+
# ═══════════════════════════════════════════════════════════════════════════
|
|
3417
|
+
# #2229: the driver captured the exact merge refusal, printed it into its own
|
|
3418
|
+
# death message, and never classified it.
|
|
3419
|
+
#
|
|
3420
|
+
# quadraui#309 sat blocked for 11h on a merge that landed first try by hand.
|
|
3421
|
+
# `merge_queue.plan()` reported READY with NO reason (`_entry_gate_status`
|
|
3422
|
+
# re-derives freshness at board-build time and degrades to a no-op without
|
|
3423
|
+
# live SHA data — the #1640 door / #1566 "plan says ready, --only refuses"
|
|
3424
|
+
# split), so `_merge_gate_divergence` had nothing to classify. Meanwhile every
|
|
3425
|
+
# `coord merge --only` attempt captured "smoke test verdict is stale" into
|
|
3426
|
+
# `counters.last_merge_diagnostic` — the exact string the #1738 auto-repair
|
|
3427
|
+
# arm keys on — and used it for nothing but the give-up message.
|
|
3428
|
+
#
|
|
3429
|
+
# #2078's diagnostic fallback did not cover this: it lives inside the
|
|
3430
|
+
# `status == ""` arm (#309's entry WAS enqueued) and matches only the
|
|
3431
|
+
# not-yet-enqueued `enqueue blocked by <gate>` wording.
|
|
3432
|
+
# ═══════════════════════════════════════════════════════════════════════════
|
|
3433
|
+
|
|
3434
|
+
|
|
3435
|
+
def _stale_smoke_diagnostic() -> str:
|
|
3436
|
+
"""The quadraui#309 diagnostic, verbatim in shape: `coord merge --only`'s
|
|
3437
|
+
own pre-`process()` gate line plus the `smoke_required` event."""
|
|
3438
|
+
return (
|
|
3439
|
+
" gate smoke: test verdict stale (recorded against base f6216e4, "
|
|
3440
|
+
"base now c50e30c) — will block this merge\n"
|
|
3441
|
+
" quadraui #309 (issue-309-drive-queue-bot): smoke_required — smoke "
|
|
3442
|
+
"test verdict is stale: recorded against base f6216e4, base is now "
|
|
3443
|
+
"c50e30c — re-verify against the current base, then `coord test "
|
|
3444
|
+
"41ae4f893239 --passed`"
|
|
3445
|
+
)
|
|
3446
|
+
|
|
3447
|
+
|
|
3448
|
+
def _missing_smoke_diagnostic() -> str:
|
|
3449
|
+
return (
|
|
3450
|
+
" gate smoke: smoke test required but no verdict recorded — will "
|
|
3451
|
+
"block this merge"
|
|
3452
|
+
)
|
|
3453
|
+
|
|
3454
|
+
|
|
3455
|
+
def test_stale_smoke_only_in_the_captured_diagnostic_takes_the_retest_arm():
|
|
3456
|
+
"""THE #2229 regression test. Board: `merge_status='READY'`,
|
|
3457
|
+
`merge_reason=''` — nothing to classify. Diagnostic: this driver's own
|
|
3458
|
+
last `coord merge --only`, saying the smoke verdict is stale. The #1738
|
|
3459
|
+
re-test must arm off that, instead of the three blind retries that ended
|
|
3460
|
+
in `exit_code=1` and an 11h stall."""
|
|
3461
|
+
counters = DriveCounters(last_merge_diagnostic=_stale_smoke_diagnostic())
|
|
3462
|
+
action = step(
|
|
3463
|
+
approved_work(merge_status="READY", merge_reason=""),
|
|
3464
|
+
counters=counters,
|
|
3465
|
+
)
|
|
3466
|
+
assert action.kind == RUN
|
|
3467
|
+
assert action.command == (
|
|
3468
|
+
"diagnose", REPO, str(ISSUE), "--stage", "test", "--reset",
|
|
3469
|
+
)
|
|
3470
|
+
assert counters.fix_rounds == 1
|
|
3471
|
+
assert counters.merge_attempts == 0 # no blind retry spent
|
|
3472
|
+
|
|
3473
|
+
|
|
3474
|
+
def test_missing_verdict_in_the_captured_diagnostic_escalates_and_never_repairs():
|
|
3475
|
+
"""`_STALE_SMOKE_MARKERS` stays a STRICT subset of `_SMOKE_GATE_MARKERS`
|
|
3476
|
+
on the diagnostic path too: a MISSING verdict is the #1640 lost-write
|
|
3477
|
+
shape, which a re-test cannot safely paper over. It escalates to a human
|
|
3478
|
+
on first encounter, exactly as it does off a board reason."""
|
|
3479
|
+
counters = DriveCounters(last_merge_diagnostic=_missing_smoke_diagnostic())
|
|
3480
|
+
action = step(
|
|
3481
|
+
approved_work(merge_status="READY", merge_reason=""),
|
|
3482
|
+
counters=counters,
|
|
3483
|
+
)
|
|
3484
|
+
assert action.is_exit
|
|
3485
|
+
assert action.exit_code == EXIT_ESCALATED
|
|
3486
|
+
assert counters.fix_rounds == 0
|
|
3487
|
+
assert "smoke" in action.message.lower()
|
|
3488
|
+
|
|
3489
|
+
|
|
3490
|
+
def test_diagnostic_derived_escalation_quotes_the_recovered_reason():
|
|
3491
|
+
"""An escalation that says `reports ''` is unactionable — the whole #2229
|
|
3492
|
+
complaint. The recovered gate text has to reach the recorded reason."""
|
|
3493
|
+
action = step(
|
|
3494
|
+
approved_work(merge_status="READY", merge_reason=""),
|
|
3495
|
+
counters=DriveCounters(last_merge_diagnostic=_missing_smoke_diagnostic()),
|
|
3496
|
+
)
|
|
3497
|
+
assert action.is_exit
|
|
3498
|
+
assert "smoke test required but no verdict recorded" in " ".join(action.command)
|
|
3499
|
+
|
|
3500
|
+
|
|
3501
|
+
def test_diagnostic_derived_retest_fires_once_per_captured_snapshot():
|
|
3502
|
+
"""#2149's lesson as a latch: the diagnostic is a SNAPSHOT that nothing
|
|
3503
|
+
but a real attempt refreshes. `coord diagnose --stage test --reset` clears
|
|
3504
|
+
`test_state`, but the board needs a beat to show it — until then the state
|
|
3505
|
+
is byte-for-byte identical. One re-test per snapshot, then a REAL attempt
|
|
3506
|
+
has to re-validate; otherwise a lagging board burns the whole
|
|
3507
|
+
`max_fix_rounds` budget off one frozen line."""
|
|
3508
|
+
counters = DriveCounters(last_merge_diagnostic=_stale_smoke_diagnostic())
|
|
3509
|
+
opts = DriveOptions(machine="precision", max_fix_rounds=3)
|
|
3510
|
+
s = approved_work(merge_status="READY", merge_reason="")
|
|
3511
|
+
|
|
3512
|
+
first = step(s, opts, counters=counters)
|
|
3513
|
+
assert first.command[0] == "diagnose"
|
|
3514
|
+
assert counters.fix_rounds == 1
|
|
3515
|
+
|
|
3516
|
+
# Same frozen diagnostic, same board — must NOT spend a second fix round.
|
|
3517
|
+
second = step(s, opts, counters=counters)
|
|
3518
|
+
assert second.kind == RUN
|
|
3519
|
+
assert second.command == ("merge", "--only", "w1", "--method", "rebase")
|
|
3520
|
+
assert counters.fix_rounds == 1
|
|
3521
|
+
assert counters.merge_attempts == 1
|
|
3522
|
+
|
|
3523
|
+
|
|
3524
|
+
def test_diagnostic_derived_retest_is_bounded_by_max_fix_rounds():
|
|
3525
|
+
"""The re-test arm shares the same `fix_rounds` budget when it arms off
|
|
3526
|
+
the diagnostic — a board that never catches up must converge on an
|
|
3527
|
+
escalation, never spin to the deadline."""
|
|
3528
|
+
counters = DriveCounters(last_merge_diagnostic=_stale_smoke_diagnostic())
|
|
3529
|
+
opts = DriveOptions(machine="precision", max_fix_rounds=2, max_merge_attempts=99)
|
|
3530
|
+
s = approved_work(merge_status="READY", merge_reason="")
|
|
3531
|
+
|
|
3532
|
+
actions = []
|
|
3533
|
+
for _ in range(12):
|
|
3534
|
+
action = step(s, opts, counters=counters)
|
|
3535
|
+
actions.append(action)
|
|
3536
|
+
if action.is_exit:
|
|
3537
|
+
break
|
|
3538
|
+
|
|
3539
|
+
assert actions[-1].is_exit
|
|
3540
|
+
assert actions[-1].exit_code == EXIT_ESCALATED
|
|
3541
|
+
assert counters.fix_rounds == 2
|
|
3542
|
+
retests = [a for a in actions if a.command and a.command[0] == "diagnose"]
|
|
3543
|
+
assert len(retests) == 2
|
|
3544
|
+
|
|
3545
|
+
|
|
3546
|
+
def test_a_board_reason_still_wins_over_the_captured_diagnostic():
|
|
3547
|
+
"""The fallback is a fallback: `merge_reason` is live and re-read every
|
|
3548
|
+
poll, the diagnostic is only as fresh as the last attempt. When the board
|
|
3549
|
+
names a gate, that is what gets classified."""
|
|
3550
|
+
counters = DriveCounters(last_merge_diagnostic=_stale_smoke_diagnostic())
|
|
3551
|
+
action = step(
|
|
3552
|
+
approved_work(
|
|
3553
|
+
merge_status="READY",
|
|
3554
|
+
merge_reason="review required but not approved",
|
|
3555
|
+
),
|
|
3556
|
+
counters=counters,
|
|
3557
|
+
)
|
|
3558
|
+
assert action.is_exit
|
|
3559
|
+
assert action.exit_code == EXIT_ESCALATED
|
|
3560
|
+
assert "review-reaffirm w1" in " ".join(action.command)
|
|
3561
|
+
assert counters.fix_rounds == 0
|
|
3562
|
+
|
|
3563
|
+
|
|
3564
|
+
def test_an_enqueued_status_with_no_gate_in_the_diagnostic_still_retries_blind():
|
|
3565
|
+
"""The companion case: an enqueued entry whose captured diagnostic names
|
|
3566
|
+
no gate at all has nothing to classify — the bounded `--only` retry is
|
|
3567
|
+
still the right move, unchanged."""
|
|
3568
|
+
counters = DriveCounters(
|
|
3569
|
+
last_merge_diagnostic="merge-queue: 1 entry processed; 0 merged"
|
|
3570
|
+
)
|
|
3571
|
+
action = step(
|
|
3572
|
+
approved_work(merge_status="READY", merge_reason=""),
|
|
3573
|
+
counters=counters,
|
|
3574
|
+
)
|
|
3575
|
+
assert action.kind == RUN
|
|
3576
|
+
assert action.command == ("merge", "--only", "w1", "--method", "rebase")
|
|
3577
|
+
assert counters.merge_attempts == 1
|
|
3578
|
+
|
|
3579
|
+
|
|
3580
|
+
def test_the_first_merge_poll_never_classifies_off_an_empty_diagnostic():
|
|
3581
|
+
"""Before any attempt has run there is no diagnostic, so #2229 can never
|
|
3582
|
+
escalate (or re-test) a merge this drive has not even tried once."""
|
|
3583
|
+
counters = DriveCounters()
|
|
3584
|
+
action = step(
|
|
3585
|
+
approved_work(merge_status="READY", merge_reason=""), counters=counters
|
|
3586
|
+
)
|
|
3587
|
+
assert action.kind == RUN
|
|
3588
|
+
assert action.command[0] == "merge"
|
|
3589
|
+
|
|
3590
|
+
|
|
3591
|
+
def test_the_empty_status_enqueue_blocked_path_is_unchanged_by_2229():
|
|
3592
|
+
"""`status == ""` is #2078's shape and keeps #2078's bounded-wait arm:
|
|
3593
|
+
"no queue entry at all" is a different fact from "enqueued and refused",
|
|
3594
|
+
and the cheap wait is what lets a not-yet-enqueued row self-heal without
|
|
3595
|
+
spending a re-test on it."""
|
|
3596
|
+
counters = DriveCounters()
|
|
3597
|
+
opts = DriveOptions(machine="precision", max_merge_attempts=3)
|
|
3598
|
+
counters.last_merge_diagnostic = (
|
|
3599
|
+
"merge-queue: no entry found for 'w1', but 1 done work row(s) on the "
|
|
3600
|
+
"board match it:\n"
|
|
3601
|
+
" claude-coordinator #1392 (assignment w1, branch fix-1392) — "
|
|
3602
|
+
"enqueue blocked by smoke gate — test verdict stale (recorded "
|
|
3603
|
+
"against base 5f34a46, base now ff1bd1f) (waive with --skip-smoke)"
|
|
3604
|
+
)
|
|
3605
|
+
action = step(approved_work(merge_status=""), opts, counters=counters)
|
|
3606
|
+
assert action.kind == WAIT
|
|
3607
|
+
assert "not yet enqueued" in action.label
|
|
3608
|
+
assert counters.fix_rounds == 0
|
|
3609
|
+
assert counters.gate_wait_rounds == 1
|
|
3610
|
+
|
|
3611
|
+
|
|
3612
|
+
def test_a_live_ci_wait_still_wins_over_a_captured_gate_line():
|
|
3613
|
+
"""#1891/#1892's bare waits sit right after the divergence check and must
|
|
3614
|
+
keep winning: `merge_reason` carries a live, recognised signal whose only
|
|
3615
|
+
resolution is more real time. A snapshot from an older attempt must not
|
|
3616
|
+
divert the drive into a re-test while CI is still reporting."""
|
|
3617
|
+
counters = DriveCounters(last_merge_diagnostic=_stale_smoke_diagnostic())
|
|
3618
|
+
action = step(
|
|
3619
|
+
approved_work(
|
|
3620
|
+
merge_status="READY",
|
|
3621
|
+
merge_reason="CI running: build, windows",
|
|
3622
|
+
),
|
|
3623
|
+
counters=counters,
|
|
3624
|
+
)
|
|
3625
|
+
assert action.kind == WAIT
|
|
3626
|
+
assert counters.fix_rounds == 0
|
|
3627
|
+
assert counters.merge_attempts == 0
|
|
3628
|
+
|
|
3629
|
+
|
|
3630
|
+
def test_a_conflict_status_still_reaches_its_own_conflict_fix_dispatch():
|
|
3631
|
+
"""CONFLICT is a live merge-mechanics block with its own resolution path
|
|
3632
|
+
(#1474/#241, reached through the bounded `--only` retry). A re-test does
|
|
3633
|
+
not rebase a branch — diverting to one is this issue's stall, inverted."""
|
|
3634
|
+
counters = DriveCounters(last_merge_diagnostic=_stale_smoke_diagnostic())
|
|
3635
|
+
action = step(
|
|
3636
|
+
approved_work(merge_status="CONFLICT", merge_reason=""),
|
|
3637
|
+
counters=counters,
|
|
3638
|
+
)
|
|
3639
|
+
assert action.kind == RUN
|
|
3640
|
+
assert action.command == ("merge", "--only", "w1", "--method", "rebase")
|
|
3641
|
+
assert counters.fix_rounds == 0
|
|
3642
|
+
|
|
3643
|
+
|
|
3644
|
+
def test_extract_gate_refusal_reason_reads_either_wording():
|
|
3645
|
+
from coord.drive import _extract_gate_refusal_reason
|
|
3646
|
+
|
|
3647
|
+
assert "test verdict stale" in _extract_gate_refusal_reason(
|
|
3648
|
+
_stale_smoke_diagnostic()
|
|
3649
|
+
)
|
|
3650
|
+
assert _extract_gate_refusal_reason(
|
|
3651
|
+
" gate review: review required but not approved — will block this merge"
|
|
3652
|
+
) == "gate review: review required but not approved — will block this merge"
|
|
3653
|
+
# No gate named — nothing to classify.
|
|
3654
|
+
assert _extract_gate_refusal_reason("merge-queue: 1 merged") == ""
|
|
3655
|
+
assert _extract_gate_refusal_reason("") == ""
|
|
3656
|
+
assert _extract_gate_refusal_reason(None) == ""
|
|
3657
|
+
|
|
3658
|
+
|
|
3659
|
+
def test_extract_gate_refusal_reason_ignores_a_gate_this_run_waived():
|
|
3660
|
+
"""`coord merge --only --skip-smoke` prints the SAME gate line with
|
|
3661
|
+
"waived by this run" instead of "will block this merge". A waived gate
|
|
3662
|
+
refused nothing and must never be read back as a refusal."""
|
|
3663
|
+
from coord.drive import _extract_gate_refusal_reason
|
|
3664
|
+
|
|
3665
|
+
waived = (
|
|
3666
|
+
" gate smoke: test verdict stale (base moved) — waived by this run\n"
|
|
3667
|
+
" --skip-smoke: interactive smoke-test gate bypassed (#465)"
|
|
3668
|
+
)
|
|
3669
|
+
assert _extract_gate_refusal_reason(waived) == ""
|
|
3670
|
+
|
|
3671
|
+
|
|
3672
|
+
def test_a_waived_gate_in_the_diagnostic_leaves_the_merge_retryable():
|
|
3673
|
+
"""End to end: the waiver guard above must not turn a merge that this run
|
|
3674
|
+
explicitly un-gated into an escalation or a re-test."""
|
|
3675
|
+
counters = DriveCounters(
|
|
3676
|
+
last_merge_diagnostic=(
|
|
3677
|
+
" gate smoke: test verdict stale (base moved) — waived by this run"
|
|
3678
|
+
)
|
|
3679
|
+
)
|
|
3680
|
+
action = step(
|
|
3681
|
+
approved_work(merge_status="READY", merge_reason=""), counters=counters
|
|
3682
|
+
)
|
|
3683
|
+
assert action.kind == RUN
|
|
3684
|
+
assert action.command[0] == "merge"
|
|
3685
|
+
|
|
3686
|
+
|
|
3416
3687
|
# ── terminal: merged, verified ───────────────────────────────────────────────
|
|
3417
3688
|
|
|
3418
3689
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{code_coordinator-0.5.76 → code_coordinator-0.5.77}/code_coordinator.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{code_coordinator-0.5.76 → code_coordinator-0.5.77}/code_coordinator.egg-info/entry_points.txt
RENAMED
|
File without changes
|
|
File without changes
|
{code_coordinator-0.5.76 → code_coordinator-0.5.77}/code_coordinator.egg-info/scm_file_list.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|