code-coordinator 0.5.72__tar.gz → 0.5.73__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.72 → code_coordinator-0.5.73}/PKG-INFO +1 -1
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/code_coordinator.egg-info/SOURCES.txt +1 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/code_coordinator.egg-info/scm_file_list.json +1 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/commands/dispatch.py +98 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/commands/status.py +47 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/conftest.py +18 -0
- code_coordinator-0.5.73/tests/test_cli_assign_repo_drift_2219.py +240 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_cli_doctor_config_mismatch_1712.py +100 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/.github/workflows/release-tui.yml +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/.gitignore +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/CLAUDE.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/GOAL.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/LICENSE +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/MANIFEST.in +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/README.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/__init__.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/agent.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/audit.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/board_bool_guard.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/board_service.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/brain.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/claim.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/cli.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/client.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/comments.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/config.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dao.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/.gitignore +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/components.json +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/dist/assets/Gallery-da3qNiIw.js +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/dist/assets/Terminal-skVFCxPU.js +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/dist/assets/index-DltfZR5f.js +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/dist/index.html +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/dist/sw.js +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/eslint.config.js +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/index.html +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/package-lock.json +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/package.json +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/playwright.config.ts +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/postcss.config.js +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/App.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/api/client.ts +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/api/generated.ts +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/index.css +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/main.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/test-setup.ts +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/tailwind.config.js +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/tsconfig.json +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/tsconfig.node.json +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dashboard/webapp/vite.config.ts +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/db.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/deps.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/drive.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/events.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/filelock.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/freshness.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/gates.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/goal.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/health/context.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/health/models.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/health/render.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/health/units.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/hooks.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/interactive.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/models.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/network.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/notify.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/openapi.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/parentage.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/plans.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/progress.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/release_window.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/reports.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/review.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/smoke.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/split_work.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/state.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/test_author.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/test_report.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/usage.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/install-agent.sh +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/pyproject.toml +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/setup.cfg +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/__init__.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/acceptance/ms-33/audit_1039.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/acceptance/ms-33/contract.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/acceptance/ms-33/manifest.yml +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/acceptance/ms-38/contract.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/acceptance/ms-38/manifest.yml +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_config.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_db.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_events.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_init.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_models.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_network.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_no_direct_gh_calls.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_review.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_session.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_split.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_state.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tui/Cargo.lock +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tui/Cargo.toml +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tui/cargo-config-local-quadraui.toml.example +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tui/src/app/audit.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tui/src/app/chat.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tui/src/app/data.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tui/src/app/dialogs.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tui/src/app/drive.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tui/src/app/drive_queue.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tui/src/app/escalation.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tui/src/app/events.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tui/src/app/fixtures.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tui/src/app/fleet_health.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tui/src/app/fleet_sessions.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tui/src/app/fleet_terminals.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tui/src/app/format.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tui/src/app/milestone_dag.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tui/src/app/mod.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tui/src/app/msv.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tui/src/app/pipeline.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tui/src/app/plans.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tui/src/app/render.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tui/src/app/reports.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tui/src/app/sessions.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tui/src/app/settings_ui.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tui/src/app/sidebar.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tui/src/app/terminal.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tui/src/app/tests.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tui/src/app/types.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tui/src/app/workspace.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tui/src/bin/gtk.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tui/src/commands.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tui/src/lib.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tui/src/main.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tui/src/settings.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tui/tests/acceptance.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tui/tests/cli.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.73}/tui/tests/fixtures/board_sample.json +0 -0
|
@@ -459,6 +459,7 @@ tests/test_cli_assign.py
|
|
|
459
459
|
tests/test_cli_assign_interactive_oracle_gate.py
|
|
460
460
|
tests/test_cli_assign_interactive_remote.py
|
|
461
461
|
tests/test_cli_assign_provider.py
|
|
462
|
+
tests/test_cli_assign_repo_drift_2219.py
|
|
462
463
|
tests/test_cli_audit.py
|
|
463
464
|
tests/test_cli_chat_continue.py
|
|
464
465
|
tests/test_cli_diagnose_config_provenance.py
|
{code_coordinator-0.5.72 → code_coordinator-0.5.73}/code_coordinator.egg-info/scm_file_list.json
RENAMED
|
@@ -489,6 +489,7 @@
|
|
|
489
489
|
"tests/test_cli_assign_interactive_oracle_gate.py",
|
|
490
490
|
"tests/test_cli_assign_interactive_remote.py",
|
|
491
491
|
"tests/test_cli_assign_provider.py",
|
|
492
|
+
"tests/test_cli_assign_repo_drift_2219.py",
|
|
492
493
|
"tests/test_cli_audit.py",
|
|
493
494
|
"tests/test_cli_chat_continue.py",
|
|
494
495
|
"tests/test_cli_diagnose_config_provenance.py",
|
|
@@ -9,6 +9,7 @@ import dataclasses
|
|
|
9
9
|
import socket
|
|
10
10
|
import sys
|
|
11
11
|
from pathlib import Path
|
|
12
|
+
from typing import TYPE_CHECKING
|
|
12
13
|
|
|
13
14
|
import click
|
|
14
15
|
import httpx
|
|
@@ -31,6 +32,9 @@ from coord.commands.dispatch_workers import (
|
|
|
31
32
|
_dispatch_troubleshoot,
|
|
32
33
|
)
|
|
33
34
|
|
|
35
|
+
if TYPE_CHECKING:
|
|
36
|
+
from coord.models import Machine
|
|
37
|
+
|
|
34
38
|
|
|
35
39
|
def _stdin_is_tty() -> bool:
|
|
36
40
|
"""Seam over ``sys.stdin.isatty()`` — see ``_require_interactive_tty``
|
|
@@ -89,6 +93,88 @@ def _require_interactive_tty(dry_run: bool) -> None:
|
|
|
89
93
|
)
|
|
90
94
|
|
|
91
95
|
|
|
96
|
+
def _repo_capability_refusal(
|
|
97
|
+
machine_obj: Machine, repo: str, *, timeout: float = 3.0
|
|
98
|
+
) -> str | None:
|
|
99
|
+
"""Cross-check *repo* against the target agent's LIVE ``/health`` repo
|
|
100
|
+
list, returning a refusal message when the two disagree — or ``None``
|
|
101
|
+
when they agree, the agent is unreachable, or the agent is config-free
|
|
102
|
+
(#2219).
|
|
103
|
+
|
|
104
|
+
``assign()``'s ``machine_obj.can_work_on(repo)`` check (just above this
|
|
105
|
+
call site) only ever reads ``coordinator.yml`` — which the operator can
|
|
106
|
+
edit any time — never the agent process actually running on that
|
|
107
|
+
machine. A repo added to config after the agent started stays invisible
|
|
108
|
+
to it until a full ``systemctl --user restart coord-agent`` (there is no
|
|
109
|
+
partial re-read today). Every pre-flight surface an operator would
|
|
110
|
+
check before spending a dispatch reads config too: ``coord config``,
|
|
111
|
+
``coord status``, and — worst of all — ``coord assign ... --dry-run``,
|
|
112
|
+
which is the documented way to sanity-check a dispatch before paying
|
|
113
|
+
for it. All three said this was fine while the live agent rejected it
|
|
114
|
+
outright, and a drive queue burned both retry attempts discovering that
|
|
115
|
+
by trial before landing terminally ``blocked`` (#2219). This is the
|
|
116
|
+
same ``/health`` read ``coord status``/``coord doctor`` already make
|
|
117
|
+
(``coord.network.check_machine``) — reused, not duplicated.
|
|
118
|
+
|
|
119
|
+
``/health``'s ``repos`` field is NOT what ``AgentServer.assign()``
|
|
120
|
+
itself gates on, though — it's ``AgentServer._servable_repos()``'s
|
|
121
|
+
FILTERED list (``coord/agent.py``, #1527), which drops any repo with no
|
|
122
|
+
``repo_paths`` entry or whose configured path is missing on disk.
|
|
123
|
+
``assign()``'s own gate (``coord/agent.py``: ``if self.repos and
|
|
124
|
+
spec.repo_name not in self.repos``) checks the UNFILTERED
|
|
125
|
+
``self.repos``. The two disagree exactly when a repo is configured on
|
|
126
|
+
that machine but degraded (``/health``'s ``degraded`` dict, #1527): in
|
|
127
|
+
that case ``assign()`` would NOT reject with "does not handle repo" —
|
|
128
|
+
it proceeds and fails later with the distinct "repo path does not
|
|
129
|
+
exist" — so this helper checks ``degraded`` FIRST and reports that
|
|
130
|
+
reason (with no restart advice, since restarting coord-agent cannot
|
|
131
|
+
repair a missing/misconfigured ``repo_paths`` entry) before ever
|
|
132
|
+
falling back to the "hasn't re-read config since *repo* was added"
|
|
133
|
+
story, which is only accurate when *repo* is absent from ``/health``
|
|
134
|
+
entirely — not merely degraded.
|
|
135
|
+
|
|
136
|
+
Deliberately narrow otherwise: only refuses when the agent is
|
|
137
|
+
reachable, ANSWERED with a real ``/health`` body, is not running
|
|
138
|
+
config-free (#1801 — a config-free agent's repos come from the dispatch
|
|
139
|
+
payload, not its own config, so an empty/mismatched list there is not a
|
|
140
|
+
capability gap), and either lists *repo* as degraded or published a
|
|
141
|
+
NON-empty repo list that plainly excludes it. Every other case
|
|
142
|
+
(offline, timeout, old agent with no ``repos`` key, empty list) falls
|
|
143
|
+
through to ``None`` — today's behavior, where the POST itself is left
|
|
144
|
+
to surface a real problem — so this never turns a transient network
|
|
145
|
+
hiccup into a new dispatch failure mode.
|
|
146
|
+
"""
|
|
147
|
+
from coord.network import check_machine
|
|
148
|
+
|
|
149
|
+
status = check_machine(machine_obj, timeout=timeout)
|
|
150
|
+
if not status.is_online or status.health is None:
|
|
151
|
+
return None
|
|
152
|
+
health = status.health
|
|
153
|
+
if health.get("config_free"):
|
|
154
|
+
return None
|
|
155
|
+
degraded = health.get("degraded") or {}
|
|
156
|
+
if repo in degraded:
|
|
157
|
+
return (
|
|
158
|
+
f"{machine_obj.name!r} lists {repo!r} in coordinator.yml, and "
|
|
159
|
+
f"the live agent agrees it's configured, but the repo is "
|
|
160
|
+
f"DEGRADED there, not just unrefreshed: {degraded[repo]} "
|
|
161
|
+
f"(#1527). This is not the #2219 stale-config case — "
|
|
162
|
+
f"restarting coord-agent will not fix a missing or "
|
|
163
|
+
f"misconfigured repo_paths entry. Repair repo_paths[{repo!r}] "
|
|
164
|
+
f"on {machine_obj.name!r} instead, then retry."
|
|
165
|
+
)
|
|
166
|
+
live_repos = health.get("repos")
|
|
167
|
+
if not live_repos or repo in live_repos:
|
|
168
|
+
return None
|
|
169
|
+
return (
|
|
170
|
+
f"{machine_obj.name!r} rejected the assignment: this agent does "
|
|
171
|
+
f"not handle repo {repo!r} (supported: {live_repos}) — "
|
|
172
|
+
f"coordinator.yml lists it, but the live agent process hasn't "
|
|
173
|
+
f"re-read its config since {repo!r} was added (#2219). Restart "
|
|
174
|
+
f"coord-agent on {machine_obj.name!r} to pick it up, then retry."
|
|
175
|
+
)
|
|
176
|
+
|
|
177
|
+
|
|
92
178
|
@click.command(help="Brain proposes assignments for idle machines.")
|
|
93
179
|
@_CONFIG_OPTION
|
|
94
180
|
@click.option("--dry-run", is_flag=True, help="Plan without saving proposals.")
|
|
@@ -951,6 +1037,18 @@ def assign(
|
|
|
951
1037
|
)
|
|
952
1038
|
sys.exit(2)
|
|
953
1039
|
|
|
1040
|
+
# #2219: config says this machine handles `repo` — but the LIVE agent
|
|
1041
|
+
# process may not (yet) agree, if `repo` was added to coordinator.yml
|
|
1042
|
+
# after that agent started. Refuse with the agent's real reason here,
|
|
1043
|
+
# before any claim/worktree/network work — including under --dry-run,
|
|
1044
|
+
# which is exactly the surface that used to green-light this. See
|
|
1045
|
+
# _repo_capability_refusal's docstring for the full rationale and what
|
|
1046
|
+
# it deliberately does NOT block on (offline/unreachable/config-free).
|
|
1047
|
+
capability_refusal = _repo_capability_refusal(machine_obj, repo)
|
|
1048
|
+
if capability_refusal is not None:
|
|
1049
|
+
click.echo(f"error: {capability_refusal}", err=True)
|
|
1050
|
+
sys.exit(2)
|
|
1051
|
+
|
|
954
1052
|
# Refuse direct assignment to a paused machine — `coord pause` exists
|
|
955
1053
|
# so the user can explicitly steer work away. If they meant to dispatch
|
|
956
1054
|
# anyway they should `coord unpause` first. #1862: also refuses inside
|
|
@@ -765,6 +765,53 @@ def _health_vs_config_lines(machine, health: dict) -> list[tuple[bool, str]]:
|
|
|
765
765
|
))
|
|
766
766
|
for repo, reason in sorted(degraded.items()):
|
|
767
767
|
out.append((True, f" {repo}: {reason}"))
|
|
768
|
+
elif declared_repos and published_repos and not config_free:
|
|
769
|
+
# #2219: the ABOVE branch only fires when /health publishes NOTHING
|
|
770
|
+
# — it silently missed the partial-drift shape that actually bit
|
|
771
|
+
# stick-demo#1: a repo added to coordinator.yml after the agent
|
|
772
|
+
# process started stays off /health's list while everything ELSE
|
|
773
|
+
# the agent publishes (including all its OTHER repos) looks
|
|
774
|
+
# perfectly healthy. `coord config`/`coord status` both read
|
|
775
|
+
# config, so both still advertised it; only the live agent —
|
|
776
|
+
# and, at dispatch cost, the drive queue that burned both retry
|
|
777
|
+
# attempts on it — knew better.
|
|
778
|
+
#
|
|
779
|
+
# `published_repos` (``/health``'s ``repos``) is
|
|
780
|
+
# ``AgentServer._servable_repos()``'s FILTERED list (#1527) — it
|
|
781
|
+
# also drops any repo that IS configured on that machine but is
|
|
782
|
+
# DEGRADED (no ``repo_paths`` entry, or the configured path is
|
|
783
|
+
# missing on disk). A drifted repo that's actually degraded is not
|
|
784
|
+
# the #2219 stale-config story: `AgentServer.assign()` gates on the
|
|
785
|
+
# UNFILTERED `self.repos`, so it would still accept that repo and
|
|
786
|
+
# fail later with a distinct "repo path does not exist" error —
|
|
787
|
+
# restarting coord-agent cannot repair a missing/misconfigured
|
|
788
|
+
# `repo_paths` entry. Split on `degraded` so each drifted repo gets
|
|
789
|
+
# the accurate story and remedy.
|
|
790
|
+
drifted = [r for r in declared_repos if r not in published_repos]
|
|
791
|
+
stale = [r for r in drifted if r not in degraded]
|
|
792
|
+
if stale:
|
|
793
|
+
out.append((
|
|
794
|
+
True,
|
|
795
|
+
f" ✗ CRIT repos: coordinator.yml declares {declared_repos} "
|
|
796
|
+
f"but /health only advertises {published_repos} — {stale} "
|
|
797
|
+
"were added to config after this agent process started and "
|
|
798
|
+
"it hasn't re-read them; a dispatch to any of "
|
|
799
|
+
f"{stale} on this machine will be refused despite `coord "
|
|
800
|
+
"config`/`coord status` showing it as supported (#2219). "
|
|
801
|
+
"Restart coord-agent on this machine to pick it up.",
|
|
802
|
+
))
|
|
803
|
+
for repo in drifted:
|
|
804
|
+
if repo in degraded:
|
|
805
|
+
out.append((
|
|
806
|
+
True,
|
|
807
|
+
f" ✗ CRIT repos: coordinator.yml declares {repo!r} for "
|
|
808
|
+
"this machine and the live agent agrees it's "
|
|
809
|
+
f"configured, but it's DEGRADED there, not just "
|
|
810
|
+
f"unrefreshed: {degraded[repo]} (#1527). This is not "
|
|
811
|
+
"the #2219 stale-config case — restarting coord-agent "
|
|
812
|
+
f"will not fix it; repair repo_paths[{repo!r}] on this "
|
|
813
|
+
"machine instead.",
|
|
814
|
+
))
|
|
768
815
|
|
|
769
816
|
return out
|
|
770
817
|
|
|
@@ -68,6 +68,24 @@ def _no_agent_health_probe(monkeypatch):
|
|
|
68
68
|
)
|
|
69
69
|
|
|
70
70
|
|
|
71
|
+
@pytest.fixture(autouse=True)
|
|
72
|
+
def _no_assign_repo_drift_probe(monkeypatch):
|
|
73
|
+
"""#2219: default `coord assign`'s live-agent repo-capability cross-check
|
|
74
|
+
(``coord.commands.dispatch._repo_capability_refusal``) to fail-open
|
|
75
|
+
(``None`` — never refuse) so tests that don't care about it don't make a
|
|
76
|
+
real ``httpx.get(".../health")`` call keyed off whatever bogus
|
|
77
|
+
``host.tailnet`` hostnames the fixture configs use. Mirrors
|
|
78
|
+
``_no_agent_health_probe`` (#904) for the same reason: the suite's
|
|
79
|
+
default behavior must not depend on network/DNS timing. Tests exercising
|
|
80
|
+
the drift check itself monkeypatch this function to return a message
|
|
81
|
+
(or call the real one against a stubbed ``coord.network.check_machine``),
|
|
82
|
+
which takes priority over this default and is unaffected by it.
|
|
83
|
+
"""
|
|
84
|
+
monkeypatch.setattr(
|
|
85
|
+
"coord.commands.dispatch._repo_capability_refusal", lambda *a, **k: None
|
|
86
|
+
)
|
|
87
|
+
|
|
88
|
+
|
|
71
89
|
@pytest.fixture(autouse=True)
|
|
72
90
|
def _no_worktree_writable_deny_scan(monkeypatch):
|
|
73
91
|
"""#1445 review: keep `check_worktree_writable`'s deny-rule scan from
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
"""#2219: `coord assign` (`--dry-run` especially) must refuse a dispatch the
|
|
2
|
+
LIVE agent will reject, not just one `coordinator.yml` happens to still list.
|
|
3
|
+
|
|
4
|
+
Before this, every pre-flight surface — `coord config`, `coord status`, and
|
|
5
|
+
`coord assign ... --dry-run` — read config only. A repo added to
|
|
6
|
+
coordinator.yml after the target agent process started stayed invisible to
|
|
7
|
+
that agent (no partial config re-read short of a full restart), so all three
|
|
8
|
+
said the dispatch was fine while the live `/health` repo list, and the
|
|
9
|
+
agent's own `assign()`, disagreed. `--dry-run` green-lit a dispatch that
|
|
10
|
+
could not succeed, and the drive queue burned both retry attempts
|
|
11
|
+
discovering that by trial before landing terminally `blocked`.
|
|
12
|
+
|
|
13
|
+
`_repo_capability_refusal` (coord/commands/dispatch.py) is the fix: a
|
|
14
|
+
pre-flight cross-check against the SAME `/health` read `coord doctor`/`coord
|
|
15
|
+
status` already make, reused via `coord.network.check_machine`. The autouse
|
|
16
|
+
`_no_assign_repo_drift_probe` fixture (tests/conftest.py) stubs it to `None`
|
|
17
|
+
by default for every other test in the suite; these tests exercise it
|
|
18
|
+
directly.
|
|
19
|
+
"""
|
|
20
|
+
|
|
21
|
+
from __future__ import annotations
|
|
22
|
+
|
|
23
|
+
from pathlib import Path
|
|
24
|
+
from unittest.mock import patch
|
|
25
|
+
|
|
26
|
+
import pytest
|
|
27
|
+
from click.testing import CliRunner
|
|
28
|
+
|
|
29
|
+
from coord.cli import main
|
|
30
|
+
from coord.commands.dispatch import _repo_capability_refusal
|
|
31
|
+
from coord.models import Machine
|
|
32
|
+
from coord.network import ONLINE, OFFLINE, MachineStatus
|
|
33
|
+
|
|
34
|
+
CONFIG_YAML = """\
|
|
35
|
+
repos:
|
|
36
|
+
- name: api
|
|
37
|
+
github: acme/api
|
|
38
|
+
default_branch: main
|
|
39
|
+
- name: stick-demo
|
|
40
|
+
github: acme/stick-demo
|
|
41
|
+
default_branch: main
|
|
42
|
+
machines:
|
|
43
|
+
- name: dellserver
|
|
44
|
+
host: dellserver.tailnet
|
|
45
|
+
repos: [api, stick-demo]
|
|
46
|
+
repo_paths:
|
|
47
|
+
api: /tmp/api
|
|
48
|
+
stick-demo: /tmp/stick-demo
|
|
49
|
+
"""
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
@pytest.fixture
|
|
53
|
+
def config_file(tmp_path: Path) -> Path:
|
|
54
|
+
p = tmp_path / "coordinator.yml"
|
|
55
|
+
p.write_text(CONFIG_YAML)
|
|
56
|
+
return p
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
@pytest.fixture
|
|
60
|
+
def coord_dir(tmp_path: Path, coord_db):
|
|
61
|
+
d = tmp_path / "state"
|
|
62
|
+
d.mkdir(parents=True, exist_ok=True)
|
|
63
|
+
return d
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
def _machine(**kwargs) -> Machine:
|
|
67
|
+
base = dict(
|
|
68
|
+
name="dellserver", host="dellserver.tailnet",
|
|
69
|
+
repos=["api", "stick-demo"],
|
|
70
|
+
)
|
|
71
|
+
base.update(kwargs)
|
|
72
|
+
return Machine(**base)
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
class TestRepoCapabilityRefusalUnit:
|
|
76
|
+
"""Pure unit coverage of the cross-check helper (network mocked)."""
|
|
77
|
+
|
|
78
|
+
def test_refuses_when_live_repos_exclude_the_target(self, monkeypatch) -> None:
|
|
79
|
+
monkeypatch.setattr(
|
|
80
|
+
"coord.network.check_machine",
|
|
81
|
+
lambda *a, **k: MachineStatus(
|
|
82
|
+
machine=_machine(), state=ONLINE, latency_ms=5.0,
|
|
83
|
+
health={
|
|
84
|
+
"machine": "dellserver",
|
|
85
|
+
"repos": ["api"], # stick-demo missing — the #2219 shape
|
|
86
|
+
},
|
|
87
|
+
),
|
|
88
|
+
)
|
|
89
|
+
reason = _repo_capability_refusal(_machine(), "stick-demo")
|
|
90
|
+
assert reason is not None
|
|
91
|
+
assert "stick-demo" in reason
|
|
92
|
+
assert "does not handle repo" in reason
|
|
93
|
+
assert "['api']" in reason
|
|
94
|
+
|
|
95
|
+
def test_none_when_live_repos_include_the_target(self, monkeypatch) -> None:
|
|
96
|
+
monkeypatch.setattr(
|
|
97
|
+
"coord.network.check_machine",
|
|
98
|
+
lambda *a, **k: MachineStatus(
|
|
99
|
+
machine=_machine(), state=ONLINE, latency_ms=5.0,
|
|
100
|
+
health={"machine": "dellserver", "repos": ["api", "stick-demo"]},
|
|
101
|
+
),
|
|
102
|
+
)
|
|
103
|
+
assert _repo_capability_refusal(_machine(), "stick-demo") is None
|
|
104
|
+
|
|
105
|
+
def test_none_when_agent_is_offline(self, monkeypatch) -> None:
|
|
106
|
+
"""A transient/unreachable agent must not become a NEW dispatch
|
|
107
|
+
failure mode — that's still left to the POST itself."""
|
|
108
|
+
monkeypatch.setattr(
|
|
109
|
+
"coord.network.check_machine",
|
|
110
|
+
lambda *a, **k: MachineStatus(
|
|
111
|
+
machine=_machine(), state=OFFLINE, reason="connection refused",
|
|
112
|
+
),
|
|
113
|
+
)
|
|
114
|
+
assert _repo_capability_refusal(_machine(), "stick-demo") is None
|
|
115
|
+
|
|
116
|
+
def test_none_when_agent_publishes_no_repos_key(self, monkeypatch) -> None:
|
|
117
|
+
"""An agent old enough to predate the `repos` field in /health."""
|
|
118
|
+
monkeypatch.setattr(
|
|
119
|
+
"coord.network.check_machine",
|
|
120
|
+
lambda *a, **k: MachineStatus(
|
|
121
|
+
machine=_machine(), state=ONLINE, latency_ms=5.0,
|
|
122
|
+
health={"machine": "dellserver"},
|
|
123
|
+
),
|
|
124
|
+
)
|
|
125
|
+
assert _repo_capability_refusal(_machine(), "stick-demo") is None
|
|
126
|
+
|
|
127
|
+
def test_degraded_repo_gets_its_own_reason_not_the_stale_config_story(
|
|
128
|
+
self, monkeypatch
|
|
129
|
+
) -> None:
|
|
130
|
+
"""A repo missing from /health's `repos` because it's DEGRADED
|
|
131
|
+
(#1527 — no repo_path entry, or the configured path doesn't exist)
|
|
132
|
+
is not the #2219 stale-config shape: `AgentServer.assign()` gates
|
|
133
|
+
on the UNFILTERED `self.repos`, which still contains a degraded
|
|
134
|
+
repo, so it would NOT reject with "does not handle repo" — it
|
|
135
|
+
would proceed and fail later with a distinct "repo path does not
|
|
136
|
+
exist" error. The refusal message must say so and must not tell
|
|
137
|
+
the operator to restart coord-agent, which cannot fix a missing
|
|
138
|
+
repo_paths entry."""
|
|
139
|
+
monkeypatch.setattr(
|
|
140
|
+
"coord.network.check_machine",
|
|
141
|
+
lambda *a, **k: MachineStatus(
|
|
142
|
+
machine=_machine(), state=ONLINE, latency_ms=5.0,
|
|
143
|
+
health={
|
|
144
|
+
"machine": "dellserver",
|
|
145
|
+
"repos": ["api"],
|
|
146
|
+
"degraded": {
|
|
147
|
+
"stick-demo": "no repo_path configured for this machine",
|
|
148
|
+
},
|
|
149
|
+
},
|
|
150
|
+
),
|
|
151
|
+
)
|
|
152
|
+
reason = _repo_capability_refusal(_machine(), "stick-demo")
|
|
153
|
+
assert reason is not None
|
|
154
|
+
assert "no repo_path configured for this machine" in reason
|
|
155
|
+
assert "does not handle repo" not in reason
|
|
156
|
+
assert "hasn't re-read its config" not in reason
|
|
157
|
+
assert "Restart coord-agent" not in reason
|
|
158
|
+
|
|
159
|
+
def test_none_when_agent_is_config_free(self, monkeypatch) -> None:
|
|
160
|
+
"""#1801: a config-free agent's repos come from the dispatch
|
|
161
|
+
payload, not its own config — a mismatch there is not a capability
|
|
162
|
+
gap."""
|
|
163
|
+
monkeypatch.setattr(
|
|
164
|
+
"coord.network.check_machine",
|
|
165
|
+
lambda *a, **k: MachineStatus(
|
|
166
|
+
machine=_machine(), state=ONLINE, latency_ms=5.0,
|
|
167
|
+
health={
|
|
168
|
+
"machine": "dellserver", "repos": ["api"],
|
|
169
|
+
"config_free": "no local coordinator.yml and no board service",
|
|
170
|
+
},
|
|
171
|
+
),
|
|
172
|
+
)
|
|
173
|
+
assert _repo_capability_refusal(_machine(), "stick-demo") is None
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
class TestAssignRefusesOnLiveDrift:
|
|
177
|
+
"""CLI-level: `coord assign` (including --dry-run) must surface the
|
|
178
|
+
live refusal before any network/claim work."""
|
|
179
|
+
|
|
180
|
+
def test_dry_run_refuses_on_live_repo_drift(
|
|
181
|
+
self, config_file: Path, coord_dir: Path
|
|
182
|
+
) -> None:
|
|
183
|
+
with patch(
|
|
184
|
+
"coord.commands.dispatch._repo_capability_refusal",
|
|
185
|
+
return_value=(
|
|
186
|
+
"'dellserver' rejected the assignment: this agent does not "
|
|
187
|
+
"handle repo 'stick-demo' (supported: ['api'])"
|
|
188
|
+
),
|
|
189
|
+
), patch("coord.github_ops.get_issue") as mock_get_issue:
|
|
190
|
+
result = CliRunner().invoke(
|
|
191
|
+
main,
|
|
192
|
+
[
|
|
193
|
+
"assign", "dellserver", "stick-demo", "1",
|
|
194
|
+
"--config", str(config_file), "--dry-run",
|
|
195
|
+
],
|
|
196
|
+
)
|
|
197
|
+
assert result.exit_code == 2
|
|
198
|
+
assert "does not handle repo" in result.output
|
|
199
|
+
assert "stick-demo" in result.output
|
|
200
|
+
# #2219's whole point: refuse BEFORE spending the (harmless but
|
|
201
|
+
# unnecessary) GitHub round-trip a dry run would otherwise still make.
|
|
202
|
+
mock_get_issue.assert_not_called()
|
|
203
|
+
|
|
204
|
+
def test_real_dispatch_also_refuses_on_live_repo_drift(
|
|
205
|
+
self, config_file: Path, coord_dir: Path
|
|
206
|
+
) -> None:
|
|
207
|
+
with patch(
|
|
208
|
+
"coord.commands.dispatch._repo_capability_refusal",
|
|
209
|
+
return_value=(
|
|
210
|
+
"'dellserver' rejected the assignment: this agent does not "
|
|
211
|
+
"handle repo 'stick-demo' (supported: ['api'])"
|
|
212
|
+
),
|
|
213
|
+
), patch("coord.github_ops.get_issue") as mock_get_issue, \
|
|
214
|
+
patch("coord.dispatch.dispatch") as mock_dispatch:
|
|
215
|
+
result = CliRunner().invoke(
|
|
216
|
+
main,
|
|
217
|
+
[
|
|
218
|
+
"assign", "dellserver", "stick-demo", "1",
|
|
219
|
+
"--config", str(config_file),
|
|
220
|
+
],
|
|
221
|
+
)
|
|
222
|
+
assert result.exit_code == 2
|
|
223
|
+
mock_get_issue.assert_not_called()
|
|
224
|
+
mock_dispatch.assert_not_called()
|
|
225
|
+
|
|
226
|
+
def test_dry_run_proceeds_when_no_live_drift(
|
|
227
|
+
self, config_file: Path, coord_dir: Path
|
|
228
|
+
) -> None:
|
|
229
|
+
"""Sanity check: the default (autouse-stubbed) fail-open path still
|
|
230
|
+
lets a genuinely healthy dispatch through --dry-run."""
|
|
231
|
+
with patch("coord.github_ops.get_issue", return_value={"title": "t"}):
|
|
232
|
+
result = CliRunner().invoke(
|
|
233
|
+
main,
|
|
234
|
+
[
|
|
235
|
+
"assign", "dellserver", "stick-demo", "1",
|
|
236
|
+
"--config", str(config_file), "--dry-run",
|
|
237
|
+
],
|
|
238
|
+
)
|
|
239
|
+
assert result.exit_code == 0
|
|
240
|
+
assert "dry run" in result.output
|
{code_coordinator-0.5.72 → code_coordinator-0.5.73}/tests/test_cli_doctor_config_mismatch_1712.py
RENAMED
|
@@ -211,3 +211,103 @@ class TestHealthVsConfigLines:
|
|
|
211
211
|
)
|
|
212
212
|
== []
|
|
213
213
|
)
|
|
214
|
+
|
|
215
|
+
def test_partial_repo_drift_is_a_problem_even_when_health_is_nonempty(self) -> None:
|
|
216
|
+
"""#2219: stick-demo's actual shape — /health still publishes
|
|
217
|
+
something (unlike the all-repos-missing #1485 case above), just not
|
|
218
|
+
the ONE repo added to coordinator.yml after this agent process
|
|
219
|
+
started. The `not published_repos` branch above never fires here,
|
|
220
|
+
so this needs its own check."""
|
|
221
|
+
lines = _health_vs_config_lines(
|
|
222
|
+
self._machine(repos=["vimcode", "quadraui", "stick-demo"]),
|
|
223
|
+
{
|
|
224
|
+
"capabilities": ["gtk", "rust", "python"],
|
|
225
|
+
"repos": ["vimcode", "quadraui"],
|
|
226
|
+
},
|
|
227
|
+
)
|
|
228
|
+
assert any(is_problem for is_problem, _ in lines)
|
|
229
|
+
assert any(
|
|
230
|
+
"CRIT repos" in text and "stick-demo" in text for _, text in lines
|
|
231
|
+
)
|
|
232
|
+
|
|
233
|
+
def test_partial_repo_drift_is_degraded_not_stale_when_in_degraded_dict(
|
|
234
|
+
self,
|
|
235
|
+
) -> None:
|
|
236
|
+
"""#2219 follow-up: a repo missing from `/health`'s `repos` because
|
|
237
|
+
it's DEGRADED (#1527 — no repo_path entry, or the configured path
|
|
238
|
+
doesn't exist) is not the "hasn't re-read config" story —
|
|
239
|
+
`AgentServer.assign()` gates on the UNFILTERED `self.repos`, which
|
|
240
|
+
still contains a degraded repo, so it would NOT reject with "does
|
|
241
|
+
not handle repo"; it would proceed and fail later with a distinct
|
|
242
|
+
"repo path does not exist" error. `coord doctor` must say so and
|
|
243
|
+
must not tell the operator to restart coord-agent, which cannot fix
|
|
244
|
+
a missing/misconfigured repo_paths entry."""
|
|
245
|
+
lines = _health_vs_config_lines(
|
|
246
|
+
self._machine(repos=["vimcode", "quadraui", "stick-demo"]),
|
|
247
|
+
{
|
|
248
|
+
"capabilities": ["gtk", "rust", "python"],
|
|
249
|
+
"repos": ["vimcode", "quadraui"],
|
|
250
|
+
"degraded": {
|
|
251
|
+
"stick-demo": "no repo_path configured for this machine",
|
|
252
|
+
},
|
|
253
|
+
},
|
|
254
|
+
)
|
|
255
|
+
assert any(is_problem for is_problem, _ in lines)
|
|
256
|
+
assert any(
|
|
257
|
+
"stick-demo" in text and "no repo_path configured" in text
|
|
258
|
+
for _, text in lines
|
|
259
|
+
)
|
|
260
|
+
joined = "\n".join(text for _, text in lines)
|
|
261
|
+
assert "hasn't re-read them" not in joined
|
|
262
|
+
assert "Restart coord-agent" not in joined
|
|
263
|
+
|
|
264
|
+
def test_partial_repo_drift_mixed_stale_and_degraded_repos(self) -> None:
|
|
265
|
+
"""One repo genuinely stale (missing from /health, not degraded)
|
|
266
|
+
and one degraded (missing from /health, present in `degraded`) —
|
|
267
|
+
each must get its own accurate story, not be lumped together."""
|
|
268
|
+
lines = _health_vs_config_lines(
|
|
269
|
+
self._machine(repos=["vimcode", "quadraui", "stick-demo", "tui"]),
|
|
270
|
+
{
|
|
271
|
+
"capabilities": ["gtk", "rust", "python"],
|
|
272
|
+
"repos": ["vimcode", "quadraui"],
|
|
273
|
+
"degraded": {
|
|
274
|
+
"tui": "repo_path /home/x/src/tui does not exist",
|
|
275
|
+
},
|
|
276
|
+
},
|
|
277
|
+
)
|
|
278
|
+
joined = "\n".join(text for _, text in lines)
|
|
279
|
+
assert "stick-demo" in joined and "hasn't re-read them" in joined
|
|
280
|
+
assert "tui" in joined and "repo_path /home/x/src/tui does not exist" in joined
|
|
281
|
+
# The stale-config CRIT's *drifted-repos* list — the part actually
|
|
282
|
+
# blamed on staleness — must name only the truly-stale repo, not
|
|
283
|
+
# the degraded one (which `declared_repos` also mentions, harmlessly,
|
|
284
|
+
# in the same line's leading "coordinator.yml declares [...]" clause).
|
|
285
|
+
stale_lines = [t for _, t in lines if "hasn't re-read them" in t]
|
|
286
|
+
assert len(stale_lines) == 1
|
|
287
|
+
assert "['stick-demo'] were added to config" in stale_lines[0]
|
|
288
|
+
|
|
289
|
+
def test_partial_repo_drift_is_silent_when_agent_is_config_free(self) -> None:
|
|
290
|
+
"""A config-free agent's repos come from the dispatch payload, not
|
|
291
|
+
its own coordinator.yml (#1801) — a mismatch against the
|
|
292
|
+
coordinator's OWN machine entry for it is not a capability gap."""
|
|
293
|
+
lines = _health_vs_config_lines(
|
|
294
|
+
self._machine(repos=["vimcode", "quadraui", "stick-demo"]),
|
|
295
|
+
{
|
|
296
|
+
"capabilities": [],
|
|
297
|
+
"repos": ["vimcode", "quadraui"],
|
|
298
|
+
"config_free": "no local coordinator.yml and no board service",
|
|
299
|
+
},
|
|
300
|
+
)
|
|
301
|
+
assert not any("stick-demo" in text for _, text in lines)
|
|
302
|
+
|
|
303
|
+
def test_no_partial_drift_line_when_published_repos_match_declared(self) -> None:
|
|
304
|
+
assert (
|
|
305
|
+
_health_vs_config_lines(
|
|
306
|
+
self._machine(repos=["vimcode", "quadraui"]),
|
|
307
|
+
{
|
|
308
|
+
"capabilities": ["gtk", "rust", "python"],
|
|
309
|
+
"repos": ["vimcode", "quadraui", "extra-repo-agent-also-serves"],
|
|
310
|
+
},
|
|
311
|
+
)
|
|
312
|
+
== []
|
|
313
|
+
)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{code_coordinator-0.5.72 → code_coordinator-0.5.73}/code_coordinator.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{code_coordinator-0.5.72 → code_coordinator-0.5.73}/code_coordinator.egg-info/entry_points.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|