code-coordinator 0.5.170__tar.gz → 0.5.172__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.170 → code_coordinator-0.5.172}/PKG-INFO +1 -1
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/client.py +30 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/fixture.py +17 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/server.py +387 -2
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/src/api/generated.ts +37 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/drive_queue.py +152 -6
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/openapi.py +2 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/fixtures/board-pipeline-basic.json +52 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_dashboard.py +373 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_dashboard_fixture.py +164 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_drive_queue.py +42 -2
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/.github/workflows/acceptance-web.yml +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/.github/workflows/release-tui.yml +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/.gitignore +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/CLAUDE.md +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/GOAL.md +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/LICENSE +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/MANIFEST.in +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/README.md +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/__init__.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/agent.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/audit.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/block_log.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/board_bool_guard.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/board_service.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/brain.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/claim.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/cli.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/comments.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/config.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dao.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/.gitignore +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/components.json +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/dist/assets/Gallery-BoKs3mpY.js +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/dist/assets/Terminal-CEsP08iX.js +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/dist/assets/index-CDHPlB6k.js +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/dist/index.html +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/dist/sw.js +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/eslint.config.js +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/index.html +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/package-lock.json +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/package.json +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/playwright.config.ts +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/postcss.config.js +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/src/App.tsx +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/src/api/client.ts +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/src/index.css +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/src/main.tsx +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/src/test-setup.ts +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/tailwind.config.js +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/tsconfig.json +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/tsconfig.node.json +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/vite.config.ts +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/db.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/deps.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/drive.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/events.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/filelock.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/freshness.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/gates.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/goal.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/health/context.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/health/models.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/health/render.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/health/units.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/hooks.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/interactive.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/models.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/network.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/notify.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/parentage.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/plans.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/progress.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/release_window.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/reports.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/review.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/self_health.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/smoke.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/split_work.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/state.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/test_author.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/test_report.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/usage.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/install-agent.sh +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/pyproject.toml +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/setup.cfg +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/__init__.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/acceptance/ms-33/audit_1039.rs +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/acceptance/ms-33/contract.md +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/acceptance/ms-33/manifest.yml +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/acceptance/ms-38/contract.md +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/acceptance/ms-38/manifest.yml +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/acceptance/ms-65/contract.md +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/acceptance/ms-65/manifest.yml +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/conftest.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_cli_diagnose_self.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_config.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_db.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_events.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_init.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_models.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_network.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_no_direct_gh_calls.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_review.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_self_health.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_session.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_split.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_state.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tui/Cargo.lock +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tui/Cargo.toml +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tui/cargo-config-local-quadraui.toml.example +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tui/src/app/audit.rs +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tui/src/app/chat.rs +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tui/src/app/data.rs +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tui/src/app/dialogs.rs +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tui/src/app/doc_tabs.rs +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tui/src/app/drive.rs +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tui/src/app/drive_queue.rs +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tui/src/app/escalation.rs +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tui/src/app/events.rs +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tui/src/app/fixtures.rs +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tui/src/app/fleet_health.rs +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tui/src/app/fleet_sessions.rs +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tui/src/app/fleet_terminals.rs +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tui/src/app/format.rs +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tui/src/app/milestone_dag.rs +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tui/src/app/mod.rs +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tui/src/app/msv.rs +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tui/src/app/pipeline.rs +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tui/src/app/plans.rs +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tui/src/app/render.rs +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tui/src/app/reports.rs +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tui/src/app/sessions.rs +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tui/src/app/settings_ui.rs +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tui/src/app/sidebar.rs +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tui/src/app/terminal.rs +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tui/src/app/tests.rs +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tui/src/app/types.rs +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tui/src/app/workspace.rs +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tui/src/bin/gtk.rs +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tui/src/commands.rs +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tui/src/lib.rs +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tui/src/main.rs +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tui/src/settings.rs +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tui/tests/acceptance.rs +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tui/tests/cli.rs +0 -0
- {code_coordinator-0.5.170 → code_coordinator-0.5.172}/tui/tests/fixtures/board_sample.json +0 -0
|
@@ -510,6 +510,36 @@ def fetch_drive_queue_entry(
|
|
|
510
510
|
return None
|
|
511
511
|
|
|
512
512
|
|
|
513
|
+
def post_drive_queue(
|
|
514
|
+
svc: ServiceConfig,
|
|
515
|
+
action: str,
|
|
516
|
+
*,
|
|
517
|
+
timeout: float = _WRITE_TIMEOUT,
|
|
518
|
+
**fields,
|
|
519
|
+
) -> dict:
|
|
520
|
+
"""POST /drive-queue {action, ...fields} — the write side of
|
|
521
|
+
:func:`fetch_drive_queue` (#2429 DQW-2).
|
|
522
|
+
|
|
523
|
+
*fields* are forwarded verbatim as sibling keys next to ``action``,
|
|
524
|
+
e.g. ``post_drive_queue(svc, "move", repo_name="api", issue_number=1,
|
|
525
|
+
to_position=0)`` or ``post_drive_queue(svc, "update", repo_name="api",
|
|
526
|
+
issue_number=1, fields={"hold_state": "released"})`` — same body shape
|
|
527
|
+
``coord/serve_app.py``'s ``post_drive_queue`` route (``action`` in
|
|
528
|
+
``{enqueue, dequeue, update, move}``) already accepts, so a caller just
|
|
529
|
+
passes through whatever ``coord/dashboard/server.py``'s
|
|
530
|
+
``/api/drive-queue/action`` handler decided to send. Returns the
|
|
531
|
+
decoded per-action response (``{"moved": bool}`` / ``{"deleted": bool}``
|
|
532
|
+
/ ``{"updated": bool}`` / ``{"entry_id": int}``).
|
|
533
|
+
|
|
534
|
+
Unlike :func:`fetch_drive_queue` this is NOT fail-soft: it raises
|
|
535
|
+
``httpx.HTTPError`` on transport/HTTP failure, the same posture as
|
|
536
|
+
:func:`post_cordon`/:func:`post_pause`/:func:`post_quiet_hours` — a
|
|
537
|
+
move/remove/unblock/resume that silently failed to reach the daemon
|
|
538
|
+
would leave the operator believing the queue changed when it didn't.
|
|
539
|
+
"""
|
|
540
|
+
return post_record(svc, "/drive-queue", {"action": action, **fields}, timeout=timeout)
|
|
541
|
+
|
|
542
|
+
|
|
513
543
|
def fetch_gate_a_approval(
|
|
514
544
|
svc: ServiceConfig,
|
|
515
545
|
repo_name: str,
|
|
@@ -35,6 +35,7 @@ Fixture schema (every key optional except ``board``)::
|
|
|
35
35
|
"proposals": [ {...coord.models.Proposal fields...} ],
|
|
36
36
|
"machines": [ {...GET /api/machines entry...} ],
|
|
37
37
|
"sessions": [ {...GET /api/sessions entry...} ],
|
|
38
|
+
"drive_queue": [ {...coord.state._decode_drive_queue_row shape...} ],
|
|
38
39
|
"review_findings": {"rev-1": {"verdict": "approve", "body": "..."}},
|
|
39
40
|
"diffs": {"work-1": "diff --git ..."},
|
|
40
41
|
"chat_reply": "canned /api/chat response text",
|
|
@@ -154,6 +155,7 @@ class FixtureServer:
|
|
|
154
155
|
proposals_raw: list = field(default_factory=list)
|
|
155
156
|
machines_raw: list = field(default_factory=list)
|
|
156
157
|
sessions_raw: list = field(default_factory=list)
|
|
158
|
+
drive_queue_raw: list = field(default_factory=list)
|
|
157
159
|
review_findings_raw: dict = field(default_factory=dict)
|
|
158
160
|
diffs: dict = field(default_factory=dict)
|
|
159
161
|
chat_reply: str = "fixture mode: the coordinator assistant is not wired up."
|
|
@@ -194,6 +196,20 @@ class FixtureServer:
|
|
|
194
196
|
def sessions(self) -> list[dict]:
|
|
195
197
|
return copy.deepcopy(self.sessions_raw)
|
|
196
198
|
|
|
199
|
+
def drive_queue(self, repo_name: str | None = None) -> list[dict]:
|
|
200
|
+
"""The seeded `coord drive` queue rows (#2428 DQW-1).
|
|
201
|
+
|
|
202
|
+
Same raw-row shape ``GET /api/drive-queue`` serves off the real DB
|
|
203
|
+
(``coord.state._decode_drive_queue_row``) — no reshaping, so a
|
|
204
|
+
fixture captured from a live queue (or hand-written to that shape)
|
|
205
|
+
drops in unchanged. ``repo_name`` filters exactly like
|
|
206
|
+
``coord.state._list_drive_queue_local``'s ``WHERE repo_name = ?``.
|
|
207
|
+
"""
|
|
208
|
+
rows = copy.deepcopy(self.drive_queue_raw)
|
|
209
|
+
if repo_name:
|
|
210
|
+
rows = [r for r in rows if r.get("repo_name") == repo_name]
|
|
211
|
+
return rows
|
|
212
|
+
|
|
197
213
|
def review_findings(self, assignment_id: str) -> tuple[str, str] | None:
|
|
198
214
|
"""Stand-in for ``coord.state.load_assignment_review_findings``.
|
|
199
215
|
|
|
@@ -343,6 +359,7 @@ def parse_fixture(raw: Any, *, path: Path | None = None) -> FixtureServer:
|
|
|
343
359
|
proposals_raw=_as_list(raw.get("proposals"), "proposals"),
|
|
344
360
|
machines_raw=_as_list(raw.get("machines"), "machines"),
|
|
345
361
|
sessions_raw=_as_list(raw.get("sessions"), "sessions"),
|
|
362
|
+
drive_queue_raw=_as_list(raw.get("drive_queue"), "drive_queue"),
|
|
346
363
|
review_findings_raw=_as_dict(raw.get("review_findings"), "review_findings"),
|
|
347
364
|
diffs=diffs,
|
|
348
365
|
events=_parse_events(raw.get("events")),
|
|
@@ -4,6 +4,7 @@ from __future__ import annotations
|
|
|
4
4
|
|
|
5
5
|
import asyncio
|
|
6
6
|
import json
|
|
7
|
+
import sqlite3
|
|
7
8
|
import subprocess
|
|
8
9
|
import time
|
|
9
10
|
from concurrent.futures import ThreadPoolExecutor
|
|
@@ -34,11 +35,25 @@ from coord.events import (
|
|
|
34
35
|
build_events_route,
|
|
35
36
|
)
|
|
36
37
|
from coord.board_service import read_board, write_board
|
|
38
|
+
from coord.dao import _JSON_COLUMNS
|
|
39
|
+
from coord.db import _ensure_schema
|
|
40
|
+
from coord.drive_queue import (
|
|
41
|
+
HOLD_FIRED,
|
|
42
|
+
STATE_BLOCKED,
|
|
43
|
+
DriveQueueSummary,
|
|
44
|
+
entries_from_rows,
|
|
45
|
+
summarize_drive_queue,
|
|
46
|
+
)
|
|
37
47
|
from coord.models import Assignment
|
|
38
48
|
from coord.network import check_all, fetch_status
|
|
39
|
-
from coord.openapi import
|
|
49
|
+
from coord.openapi import (
|
|
50
|
+
build_spec,
|
|
51
|
+
dataclass_schema,
|
|
52
|
+
openapi_and_docs_routes,
|
|
53
|
+
sqlite_table_schema,
|
|
54
|
+
)
|
|
40
55
|
from coord.pipeline import PipelineView
|
|
41
|
-
from coord.state import load_proposals
|
|
56
|
+
from coord.state import list_drive_queue, load_proposals
|
|
42
57
|
|
|
43
58
|
DASHBOARD_DIR = Path(__file__).parent
|
|
44
59
|
# Built React webapp lives here after `npm run build` inside coord/dashboard/webapp/.
|
|
@@ -317,6 +332,35 @@ def openapi_spec() -> dict:
|
|
|
317
332
|
components: dict = {}
|
|
318
333
|
assignment_ref = dataclass_schema(Assignment, components)
|
|
319
334
|
pipeline_view_ref = dataclass_schema(PipelineView, components)
|
|
335
|
+
# #2428 DQW-1: the drive-queue entry schema comes straight from the
|
|
336
|
+
# SQLite DDL, the same way coord/serve_app.py's `_board_response_schema`
|
|
337
|
+
# builds `BoardDriveQueueEntry` for `/board` — the wire schema *is* the
|
|
338
|
+
# DDL (coord/db.py), not a hand-maintained field list that can drift from
|
|
339
|
+
# it. `after_json` is JSON-encoded TEXT in SQLite, decoded to an array on
|
|
340
|
+
# the wire — the JSON columns come from `coord.dao._JSON_COLUMNS` itself
|
|
341
|
+
# (the same source `coord/serve_app.py`'s `_board_response_schema` derives
|
|
342
|
+
# its own `frozenset(_JSON_COLUMNS.get(table, ()))` from) rather than a
|
|
343
|
+
# second hand-maintained literal, so a future JSON column on `drive_queue`
|
|
344
|
+
# only needs updating in one place (#2096).
|
|
345
|
+
_schema_conn = sqlite3.connect(":memory:")
|
|
346
|
+
try:
|
|
347
|
+
_ensure_schema(_schema_conn)
|
|
348
|
+
components["BoardDriveQueueEntry"] = sqlite_table_schema(
|
|
349
|
+
_schema_conn,
|
|
350
|
+
"drive_queue",
|
|
351
|
+
json_columns=frozenset(_JSON_COLUMNS.get("drive_queue", ())),
|
|
352
|
+
)
|
|
353
|
+
finally:
|
|
354
|
+
_schema_conn.close()
|
|
355
|
+
drive_queue_entry_ref = {"$ref": "#/components/schemas/BoardDriveQueueEntry"}
|
|
356
|
+
drive_queue_summary_ref = dataclass_schema(DriveQueueSummary, components)
|
|
357
|
+
drive_queue_response = {
|
|
358
|
+
"type": "object",
|
|
359
|
+
"properties": {
|
|
360
|
+
"entries": {"type": "array", "items": drive_queue_entry_ref},
|
|
361
|
+
"summary": drive_queue_summary_ref,
|
|
362
|
+
},
|
|
363
|
+
}
|
|
320
364
|
board_response = {
|
|
321
365
|
"type": "object",
|
|
322
366
|
"properties": {
|
|
@@ -372,6 +416,82 @@ def openapi_spec() -> dict:
|
|
|
372
416
|
"responses": {"200": {"description": "OK"}},
|
|
373
417
|
}
|
|
374
418
|
},
|
|
419
|
+
"/api/drive-queue": {
|
|
420
|
+
"get": {
|
|
421
|
+
"summary": (
|
|
422
|
+
"The `coord drive` work queue in run order, plus a "
|
|
423
|
+
"server-computed pending/running/waiting/eligible/"
|
|
424
|
+
"blocked/held summary (#2428 DQW-1)"
|
|
425
|
+
),
|
|
426
|
+
"parameters": [
|
|
427
|
+
{
|
|
428
|
+
"name": "repo",
|
|
429
|
+
"in": "query",
|
|
430
|
+
"required": False,
|
|
431
|
+
"schema": {"type": "string"},
|
|
432
|
+
"description": (
|
|
433
|
+
"Restrict `entries` to one repo. `summary` is always "
|
|
434
|
+
"computed over the FULL queue, whatever `repo` is set "
|
|
435
|
+
"to — `fleet_held`/`level` are fleet-wide facts (a "
|
|
436
|
+
"fleet-scoped fired deploy gate anywhere stops the "
|
|
437
|
+
"whole tick), so narrowing the summary to one repo "
|
|
438
|
+
"could misreport it as clear."
|
|
439
|
+
),
|
|
440
|
+
}
|
|
441
|
+
],
|
|
442
|
+
"responses": {
|
|
443
|
+
"200": {
|
|
444
|
+
"description": "OK",
|
|
445
|
+
"content": {"application/json": {"schema": drive_queue_response}},
|
|
446
|
+
}
|
|
447
|
+
},
|
|
448
|
+
}
|
|
449
|
+
},
|
|
450
|
+
"/api/drive-queue/action": {
|
|
451
|
+
"post": {
|
|
452
|
+
"summary": (
|
|
453
|
+
"move/remove/unblock/resume a `coord drive` queue row "
|
|
454
|
+
"(#2429 DQW-2)"
|
|
455
|
+
),
|
|
456
|
+
"requestBody": {
|
|
457
|
+
"required": True,
|
|
458
|
+
"content": {
|
|
459
|
+
"application/json": {
|
|
460
|
+
"schema": {
|
|
461
|
+
"type": "object",
|
|
462
|
+
"properties": {
|
|
463
|
+
"repo_name": {"type": "string"},
|
|
464
|
+
"issue_number": {"type": "integer"},
|
|
465
|
+
"action": {
|
|
466
|
+
"type": "string",
|
|
467
|
+
"enum": ["move", "remove", "unblock", "resume"],
|
|
468
|
+
},
|
|
469
|
+
"to_position": {
|
|
470
|
+
"type": "integer",
|
|
471
|
+
"description": "Required when action == 'move'.",
|
|
472
|
+
},
|
|
473
|
+
},
|
|
474
|
+
"required": ["repo_name", "issue_number", "action"],
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
},
|
|
478
|
+
},
|
|
479
|
+
"responses": {
|
|
480
|
+
"200": {
|
|
481
|
+
"description": "OK",
|
|
482
|
+
"content": {"application/json": {"schema": ok_response}},
|
|
483
|
+
},
|
|
484
|
+
"400": {
|
|
485
|
+
"description": (
|
|
486
|
+
"Missing/unknown field, missing to_position for "
|
|
487
|
+
"'move', 'unblock' on a non-blocked row, or "
|
|
488
|
+
"'resume' on a row whose gate hasn't fired"
|
|
489
|
+
)
|
|
490
|
+
},
|
|
491
|
+
"404": {"description": "drive-queue entry not found"},
|
|
492
|
+
},
|
|
493
|
+
}
|
|
494
|
+
},
|
|
375
495
|
"/api/approve": {
|
|
376
496
|
"post": {
|
|
377
497
|
"summary": "Dispatch one or more proposals by id",
|
|
@@ -624,6 +744,85 @@ def build_app(
|
|
|
624
744
|
return
|
|
625
745
|
write_board(board)
|
|
626
746
|
|
|
747
|
+
def _read_drive_queue() -> list[dict]:
|
|
748
|
+
"""Every drive-queue row — seeded fixture or the daemon/local DB (#2428).
|
|
749
|
+
|
|
750
|
+
ALWAYS the full, unfiltered queue, same as ``_read_board()`` for the
|
|
751
|
+
board: ``?repo=`` is applied by ``api_drive_queue`` itself, to the
|
|
752
|
+
response's ``entries`` list only, AFTER this. That is deliberate, not
|
|
753
|
+
an oversight — see ``api_drive_queue``'s docstring for why the
|
|
754
|
+
aggregate summary must never be computed over a repo-filtered subset.
|
|
755
|
+
"""
|
|
756
|
+
if _fixture is not None:
|
|
757
|
+
return _fixture.drive_queue()
|
|
758
|
+
return list_drive_queue()
|
|
759
|
+
|
|
760
|
+
def _drive_queue_write(action: str, **fields) -> dict:
|
|
761
|
+
"""POST /drive-queue's ``{action, ...fields}`` shape (#2429 DQW-2).
|
|
762
|
+
|
|
763
|
+
Live mode only — callers check ``_fixture is not None`` themselves
|
|
764
|
+
(mirrors ``_write_board``, whose fixture no-op lives at the call
|
|
765
|
+
site in ``api_pipeline_action``, not inside ``_write_board`` itself).
|
|
766
|
+
|
|
767
|
+
Resolves daemon-vs-local by hand, the same decision
|
|
768
|
+
``_read_board()``/``_write_board()`` make for the board, rather than
|
|
769
|
+
going through ``coord.state``'s own routed ``enqueue_drive_queue``/
|
|
770
|
+
``dequeue_drive_queue``/``update_drive_queue_entry``/
|
|
771
|
+
``move_drive_queue_entry`` wrappers — those already do this exact
|
|
772
|
+
dance internally, but routing here keeps the dashboard's thin-client
|
|
773
|
+
posture visible in this file instead of buried behind a
|
|
774
|
+
`coord.state` implementation detail.
|
|
775
|
+
|
|
776
|
+
Returns the daemon's per-action response dict verbatim
|
|
777
|
+
(``{"moved": bool}`` / ``{"deleted": bool}`` / ``{"updated": bool}``
|
|
778
|
+
/ ``{"entry_id": int}``), whether it came from the wire or from the
|
|
779
|
+
matching local ``_*_local`` function directly — the same functions
|
|
780
|
+
``coord/serve_app.py``'s own ``post_drive_queue`` route calls.
|
|
781
|
+
"""
|
|
782
|
+
from coord import board_service
|
|
783
|
+
|
|
784
|
+
svc = board_service.resolve()
|
|
785
|
+
if svc is not None:
|
|
786
|
+
from coord.client import post_drive_queue
|
|
787
|
+
|
|
788
|
+
return post_drive_queue(svc, action, **fields)
|
|
789
|
+
|
|
790
|
+
from coord.state import (
|
|
791
|
+
_dequeue_drive_queue_local,
|
|
792
|
+
_enqueue_drive_queue_local,
|
|
793
|
+
_move_drive_queue_entry_local,
|
|
794
|
+
_update_drive_queue_entry_local,
|
|
795
|
+
)
|
|
796
|
+
|
|
797
|
+
if action == "dequeue":
|
|
798
|
+
return {
|
|
799
|
+
"deleted": _dequeue_drive_queue_local(
|
|
800
|
+
fields["repo_name"], fields["issue_number"]
|
|
801
|
+
)
|
|
802
|
+
}
|
|
803
|
+
if action == "enqueue":
|
|
804
|
+
entry_id = _enqueue_drive_queue_local(
|
|
805
|
+
fields["repo_name"],
|
|
806
|
+
fields["issue_number"],
|
|
807
|
+
machine=fields.get("machine"),
|
|
808
|
+
after=fields.get("after") or [],
|
|
809
|
+
position=fields.get("position"),
|
|
810
|
+
)
|
|
811
|
+
return {"entry_id": entry_id}
|
|
812
|
+
if action == "update":
|
|
813
|
+
return {
|
|
814
|
+
"updated": _update_drive_queue_entry_local(
|
|
815
|
+
fields["repo_name"], fields["issue_number"], **fields["fields"]
|
|
816
|
+
)
|
|
817
|
+
}
|
|
818
|
+
if action == "move":
|
|
819
|
+
return {
|
|
820
|
+
"moved": _move_drive_queue_entry_local(
|
|
821
|
+
fields["repo_name"], fields["issue_number"], fields["to_position"]
|
|
822
|
+
)
|
|
823
|
+
}
|
|
824
|
+
raise ValueError(f"unknown drive-queue action: {action!r}")
|
|
825
|
+
|
|
627
826
|
# ── Real-time event bus ────────────────────────────────────────────────
|
|
628
827
|
event_source = EventSource()
|
|
629
828
|
|
|
@@ -902,6 +1101,190 @@ def build_app(
|
|
|
902
1101
|
from dataclasses import asdict
|
|
903
1102
|
return JSONResponse([asdict(p) for p in proposals])
|
|
904
1103
|
|
|
1104
|
+
async def api_drive_queue(request: Request) -> JSONResponse:
|
|
1105
|
+
"""GET /api/drive-queue?repo= — the operator-declared `coord drive`
|
|
1106
|
+
work queue, plus a server-computed aggregate summary (#2428 DQW-1).
|
|
1107
|
+
|
|
1108
|
+
Mirrors ``api_board``'s shape via ``_read_drive_queue()`` (the fixture-
|
|
1109
|
+
vs-live indirection every other handler in this file goes through —
|
|
1110
|
+
see ``_read_board()``), which resolves daemon-vs-local exactly like
|
|
1111
|
+
``coord drive-queue list`` itself does. ``entries`` is the raw row
|
|
1112
|
+
list — optionally narrowed to ``?repo=`` — verbatim: same shape as the
|
|
1113
|
+
daemon's own ``GET /drive-queue`` and ``/board``'s ``drive_queue``
|
|
1114
|
+
field, no reshaping, no new fields.
|
|
1115
|
+
|
|
1116
|
+
``summary`` (:func:`coord.drive_queue.summarize_drive_queue`) is
|
|
1117
|
+
DELIBERATELY computed over the FULL, unfiltered queue, never the
|
|
1118
|
+
``?repo=``-narrowed one — even though only ``entries`` respects the
|
|
1119
|
+
filter. This mirrors the summary's one existing call site
|
|
1120
|
+
(``tui/src/app/mod.rs``'s ``summarize_drive_queue(&self.data.drive_queue)``,
|
|
1121
|
+
always the whole board queue) and is required for correctness, not
|
|
1122
|
+
just consistency: ``fleet_held``/``level == "held"`` is documented as
|
|
1123
|
+
"a non-zero fleet-scoped fired gate stops the tick from launching
|
|
1124
|
+
ANYTHING, whatever repo it's in", and ``summarize_drive_queue``'s
|
|
1125
|
+
``after=`` satisfaction check (``_after_satisfied``) treats a pre-req
|
|
1126
|
+
absent from the entries it's given as already satisfied ("it may have
|
|
1127
|
+
landed long ago"). Summarizing only the filtered subset would let
|
|
1128
|
+
``GET /api/drive-queue?repo=web`` report ``level: "normal"`` while a
|
|
1129
|
+
DIFFERENT repo's entry actually holds the whole fleet queue, and could
|
|
1130
|
+
count a cross-repo ``after=`` dependency as eligible when the real
|
|
1131
|
+
prerequisite is still pending, just filtered out of view. So the
|
|
1132
|
+
Queue panel sidebar's pending/running/waiting/eligible/blocked/held
|
|
1133
|
+
counts are always fleet-wide, exactly like the TUI's; only the visible
|
|
1134
|
+
row list narrows with ``?repo=``.
|
|
1135
|
+
"""
|
|
1136
|
+
from dataclasses import asdict
|
|
1137
|
+
|
|
1138
|
+
repo = request.query_params.get("repo") or None
|
|
1139
|
+
rows = _read_drive_queue()
|
|
1140
|
+
summary = summarize_drive_queue(entries_from_rows(rows))
|
|
1141
|
+
entries = [r for r in rows if r.get("repo_name") == repo] if repo else rows
|
|
1142
|
+
return JSONResponse({"entries": entries, "summary": asdict(summary)})
|
|
1143
|
+
|
|
1144
|
+
async def api_drive_queue_action(request: Request) -> JSONResponse:
|
|
1145
|
+
"""POST /api/drive-queue/action — move/remove/unblock/resume a
|
|
1146
|
+
`coord drive` queue row (#2429 DQW-2).
|
|
1147
|
+
|
|
1148
|
+
Body: ``{"repo_name": "...", "issue_number": N, "action": "move" |
|
|
1149
|
+
"remove" | "unblock" | "resume", ...}``. Response:
|
|
1150
|
+
``{"ok": bool, "error"?: str}`` — the same envelope
|
|
1151
|
+
``api_pipeline_action`` uses, not a new one.
|
|
1152
|
+
|
|
1153
|
+
All four actions ride the daemon's already-implemented
|
|
1154
|
+
``POST /drive-queue`` ops (``coord/serve_app.py``'s
|
|
1155
|
+
``post_drive_queue``) via ``_drive_queue_write`` — no new
|
|
1156
|
+
queue-mutation logic here, just routing plus the two client-side
|
|
1157
|
+
guards the TUI already enforces (``tui/src/app/drive_queue.rs``'s
|
|
1158
|
+
``queue_unblock_selected``/``queue_resume_selected``):
|
|
1159
|
+
|
|
1160
|
+
* ``move`` -> ``{action: "move", to_position}`` -> daemon op ``move``.
|
|
1161
|
+
* ``remove`` -> daemon op ``dequeue``.
|
|
1162
|
+
* ``unblock`` -> dequeue then re-enqueue with the row's ``machine``
|
|
1163
|
+
preserved and ``after`` DROPPED — the exact recipe
|
|
1164
|
+
``dispatch_drive_queue_unblock`` (and its Python precedent,
|
|
1165
|
+
``coord/commands/drive_queue.py``'s ``_requeue_command``) uses: an
|
|
1166
|
+
unsatisfiable pre-req is one of the two things that blocks a row,
|
|
1167
|
+
so re-adding with the same ``after`` would just re-block it.
|
|
1168
|
+
Refused with 400 on anything but a ``state == "blocked"`` row.
|
|
1169
|
+
* ``resume`` -> daemon op ``update`` with
|
|
1170
|
+
``fields={hold_state: "released", hold_probes: 0}``. Refused with
|
|
1171
|
+
400 on a row whose gate hasn't fired (``hold_state != "fired"``).
|
|
1172
|
+
|
|
1173
|
+
In fixture mode (#1538) every one of these is **recorded, not
|
|
1174
|
+
executed** — mirrors ``api_pipeline_action``'s ``_fixture_action``.
|
|
1175
|
+
"""
|
|
1176
|
+
try:
|
|
1177
|
+
body = await request.json()
|
|
1178
|
+
except ValueError:
|
|
1179
|
+
return JSONResponse({"error": "invalid JSON"}, status_code=400)
|
|
1180
|
+
|
|
1181
|
+
repo_name = body.get("repo_name")
|
|
1182
|
+
issue_number = body.get("issue_number")
|
|
1183
|
+
action = body.get("action")
|
|
1184
|
+
if not repo_name or issue_number is None or not action:
|
|
1185
|
+
return JSONResponse(
|
|
1186
|
+
{"error": "repo_name, issue_number and action are required"},
|
|
1187
|
+
status_code=400,
|
|
1188
|
+
)
|
|
1189
|
+
try:
|
|
1190
|
+
issue_number = int(issue_number)
|
|
1191
|
+
except (TypeError, ValueError):
|
|
1192
|
+
return JSONResponse({"error": "issue_number must be an int"}, status_code=400)
|
|
1193
|
+
|
|
1194
|
+
if action not in ("move", "remove", "unblock", "resume"):
|
|
1195
|
+
return JSONResponse({"error": f"unknown action: {action!r}"}, status_code=400)
|
|
1196
|
+
|
|
1197
|
+
to_position = None
|
|
1198
|
+
if action == "move":
|
|
1199
|
+
try:
|
|
1200
|
+
to_position = int(body.get("to_position"))
|
|
1201
|
+
except (TypeError, ValueError):
|
|
1202
|
+
return JSONResponse(
|
|
1203
|
+
{"error": "to_position must be an int"}, status_code=400
|
|
1204
|
+
)
|
|
1205
|
+
|
|
1206
|
+
rows = _fixture.drive_queue() if _fixture is not None else _read_drive_queue()
|
|
1207
|
+
entry = next(
|
|
1208
|
+
(
|
|
1209
|
+
r for r in rows
|
|
1210
|
+
if r.get("repo_name") == repo_name
|
|
1211
|
+
and int(r.get("issue_number", -1)) == issue_number
|
|
1212
|
+
),
|
|
1213
|
+
None,
|
|
1214
|
+
)
|
|
1215
|
+
if entry is None:
|
|
1216
|
+
return JSONResponse({"error": "drive-queue entry not found"}, status_code=404)
|
|
1217
|
+
|
|
1218
|
+
if action == "unblock" and entry.get("state") != STATE_BLOCKED:
|
|
1219
|
+
return JSONResponse(
|
|
1220
|
+
{"ok": False, "error": "only a blocked entry can be unblocked"},
|
|
1221
|
+
status_code=400,
|
|
1222
|
+
)
|
|
1223
|
+
if action == "resume" and entry.get("hold_state") != HOLD_FIRED:
|
|
1224
|
+
return JSONResponse(
|
|
1225
|
+
{
|
|
1226
|
+
"ok": False,
|
|
1227
|
+
"error": "only an entry whose deploy gate has fired can be resumed",
|
|
1228
|
+
},
|
|
1229
|
+
status_code=400,
|
|
1230
|
+
)
|
|
1231
|
+
|
|
1232
|
+
if _fixture is not None:
|
|
1233
|
+
_fixture.record("/api/drive-queue/action", body, action=action)
|
|
1234
|
+
return JSONResponse({"ok": True})
|
|
1235
|
+
|
|
1236
|
+
try:
|
|
1237
|
+
if action == "move":
|
|
1238
|
+
result = _drive_queue_write(
|
|
1239
|
+
"move",
|
|
1240
|
+
repo_name=repo_name,
|
|
1241
|
+
issue_number=issue_number,
|
|
1242
|
+
to_position=to_position,
|
|
1243
|
+
)
|
|
1244
|
+
ok = bool(result.get("moved"))
|
|
1245
|
+
elif action == "remove":
|
|
1246
|
+
result = _drive_queue_write(
|
|
1247
|
+
"dequeue", repo_name=repo_name, issue_number=issue_number
|
|
1248
|
+
)
|
|
1249
|
+
ok = bool(result.get("deleted"))
|
|
1250
|
+
elif action == "unblock":
|
|
1251
|
+
dequeue_result = _drive_queue_write(
|
|
1252
|
+
"dequeue", repo_name=repo_name, issue_number=issue_number
|
|
1253
|
+
)
|
|
1254
|
+
if bool(dequeue_result.get("deleted")):
|
|
1255
|
+
enqueue_result = _drive_queue_write(
|
|
1256
|
+
"enqueue",
|
|
1257
|
+
repo_name=repo_name,
|
|
1258
|
+
issue_number=issue_number,
|
|
1259
|
+
machine=entry.get("machine"),
|
|
1260
|
+
after=[],
|
|
1261
|
+
)
|
|
1262
|
+
ok = enqueue_result.get("entry_id") is not None
|
|
1263
|
+
else:
|
|
1264
|
+
# The guard read above (``_read_drive_queue()``) is not
|
|
1265
|
+
# atomic with this write: the row can be removed/changed
|
|
1266
|
+
# by a concurrent dequeue/resume/daemon tick between the
|
|
1267
|
+
# two. If there was nothing to dequeue, there is nothing
|
|
1268
|
+
# to re-enqueue either — doing so anyway would silently
|
|
1269
|
+
# resurrect a row someone else legitimately removed.
|
|
1270
|
+
ok = False
|
|
1271
|
+
else: # resume
|
|
1272
|
+
result = _drive_queue_write(
|
|
1273
|
+
"update",
|
|
1274
|
+
repo_name=repo_name,
|
|
1275
|
+
issue_number=issue_number,
|
|
1276
|
+
fields={"hold_state": "released", "hold_probes": 0},
|
|
1277
|
+
)
|
|
1278
|
+
ok = bool(result.get("updated"))
|
|
1279
|
+
except Exception as exc: # noqa: BLE001
|
|
1280
|
+
return JSONResponse({"ok": False, "error": str(exc)}, status_code=500)
|
|
1281
|
+
|
|
1282
|
+
if not ok:
|
|
1283
|
+
return JSONResponse(
|
|
1284
|
+
{"ok": False, "error": "drive-queue entry not found"}, status_code=404
|
|
1285
|
+
)
|
|
1286
|
+
return JSONResponse({"ok": True})
|
|
1287
|
+
|
|
905
1288
|
async def api_approve(request: Request) -> JSONResponse:
|
|
906
1289
|
from coord.dispatch import dispatch, post_briefing, compute_do_not_touch
|
|
907
1290
|
from coord.state import (
|
|
@@ -1821,6 +2204,8 @@ def build_app(
|
|
|
1821
2204
|
Route("/api/machines", api_machines, methods=["GET"]),
|
|
1822
2205
|
Route("/api/sessions", api_sessions, methods=["GET"]),
|
|
1823
2206
|
Route("/api/proposals", api_proposals, methods=["GET"]),
|
|
2207
|
+
Route("/api/drive-queue", api_drive_queue, methods=["GET"]),
|
|
2208
|
+
Route("/api/drive-queue/action", api_drive_queue_action, methods=["POST"]),
|
|
1824
2209
|
Route("/api/approve", api_approve, methods=["POST"]),
|
|
1825
2210
|
Route("/api/reject", api_reject, methods=["POST"]),
|
|
1826
2211
|
Route("/api/diff/{id}", api_diff, methods=["GET"]),
|
{code_coordinator-0.5.170 → code_coordinator-0.5.172}/coord/dashboard/webapp/src/api/generated.ts
RENAMED
|
@@ -176,3 +176,40 @@ export interface Assignment {
|
|
|
176
176
|
stop_reason: string | null
|
|
177
177
|
dispatched_by_assignment_id: string | null
|
|
178
178
|
}
|
|
179
|
+
|
|
180
|
+
export interface BoardDriveQueueEntry {
|
|
181
|
+
id: number | null
|
|
182
|
+
repo_name: string
|
|
183
|
+
issue_number: number
|
|
184
|
+
position: number
|
|
185
|
+
machine: string | null
|
|
186
|
+
after_json: string[]
|
|
187
|
+
state: string
|
|
188
|
+
attempts: number
|
|
189
|
+
deferrals: number
|
|
190
|
+
last_reason: string
|
|
191
|
+
reason_at: number | null
|
|
192
|
+
session_name: string | null
|
|
193
|
+
launched_at: number | null
|
|
194
|
+
enqueued_at: number
|
|
195
|
+
hold_after: number
|
|
196
|
+
hold_reason: string
|
|
197
|
+
resume_when: string
|
|
198
|
+
hold_state: string
|
|
199
|
+
hold_probes: number
|
|
200
|
+
launch_host: string
|
|
201
|
+
hold_scope: string
|
|
202
|
+
resumes: number
|
|
203
|
+
retry_backoff_at: number | null
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
export interface DriveQueueSummary {
|
|
207
|
+
level: string
|
|
208
|
+
pending: number
|
|
209
|
+
running: number
|
|
210
|
+
waiting: number
|
|
211
|
+
blocked: number
|
|
212
|
+
eligible: number
|
|
213
|
+
held: number
|
|
214
|
+
fleet_held: number
|
|
215
|
+
}
|