code-coordinator 0.5.71__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.71 → code_coordinator-0.5.73}/PKG-INFO +1 -1
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/code_coordinator.egg-info/SOURCES.txt +1 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/code_coordinator.egg-info/scm_file_list.json +1 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/commands/dispatch.py +98 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/commands/status.py +74 -5
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/graph_health.py +83 -4
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/health/checks/graph.py +55 -6
- {code_coordinator-0.5.71 → 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.71 → code_coordinator-0.5.73}/tests/test_cli_diagnose_graph.py +91 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_doctor_config_mismatch_1712.py +100 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_graph_health.py +79 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_health_checks.py +59 -1
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_health_cli_graph.py +3 -1
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_health_incident_regression.py +4 -2
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/.github/workflows/release-tui.yml +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/.gitignore +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/CLAUDE.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/GOAL.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/LICENSE +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/MANIFEST.in +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/README.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/__init__.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/agent.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/audit.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/board_bool_guard.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/board_service.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/brain.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/claim.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/cli.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/client.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/comments.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/config.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dao.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/.gitignore +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/components.json +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/dist/assets/Gallery-da3qNiIw.js +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/dist/assets/Terminal-skVFCxPU.js +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/dist/assets/index-DltfZR5f.js +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/dist/index.html +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/dist/sw.js +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/eslint.config.js +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/index.html +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/package-lock.json +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/package.json +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/playwright.config.ts +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/postcss.config.js +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/App.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/api/client.ts +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/api/generated.ts +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/index.css +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/main.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/test-setup.ts +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/tailwind.config.js +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/tsconfig.json +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/tsconfig.node.json +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dashboard/webapp/vite.config.ts +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/db.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/deps.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/drive.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/events.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/filelock.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/freshness.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/gates.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/goal.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/health/context.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/health/models.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/health/render.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/health/units.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/hooks.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/interactive.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/models.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/network.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/notify.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/openapi.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/parentage.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/plans.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/progress.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/release_window.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/reports.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/review.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/smoke.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/split_work.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/state.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/test_author.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/test_report.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/usage.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/install-agent.sh +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/pyproject.toml +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/setup.cfg +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/__init__.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/acceptance/ms-33/audit_1039.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/acceptance/ms-33/contract.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/acceptance/ms-33/manifest.yml +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/acceptance/ms-38/contract.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/acceptance/ms-38/manifest.yml +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_config.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_db.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_events.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_init.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_models.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_network.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_no_direct_gh_calls.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_review.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_session.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_split.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_state.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tui/Cargo.lock +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tui/Cargo.toml +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tui/cargo-config-local-quadraui.toml.example +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tui/src/app/audit.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tui/src/app/chat.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tui/src/app/data.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tui/src/app/dialogs.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tui/src/app/drive.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tui/src/app/drive_queue.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tui/src/app/escalation.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tui/src/app/events.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tui/src/app/fixtures.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tui/src/app/fleet_health.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tui/src/app/fleet_sessions.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tui/src/app/fleet_terminals.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tui/src/app/format.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tui/src/app/milestone_dag.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tui/src/app/mod.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tui/src/app/msv.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tui/src/app/pipeline.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tui/src/app/plans.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tui/src/app/render.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tui/src/app/reports.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tui/src/app/sessions.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tui/src/app/settings_ui.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tui/src/app/sidebar.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tui/src/app/terminal.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tui/src/app/tests.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tui/src/app/types.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tui/src/app/workspace.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tui/src/bin/gtk.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tui/src/commands.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tui/src/lib.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tui/src/main.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tui/src/settings.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tui/tests/acceptance.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.73}/tui/tests/cli.rs +0 -0
- {code_coordinator-0.5.71 → 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.71 → 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
|
|
|
@@ -1464,6 +1511,15 @@ def _diagnose_graph_health(config_path: Path) -> None:
|
|
|
1464
1511
|
checks ``core.hooksPath``, the one-time per-machine setting that decides
|
|
1465
1512
|
whether worktrees on this box get a linked graph at all.
|
|
1466
1513
|
|
|
1514
|
+
#2211: also reports HEAD vs ``origin/<default_branch>``, alongside the
|
|
1515
|
+
existing graph-vs-HEAD comparison. The base checkout is fetched but
|
|
1516
|
+
never pulled by design (worktrees always branch from a fresh
|
|
1517
|
+
``origin/<default>``, so a stale base never breaks dispatch) — which
|
|
1518
|
+
means a graph can match HEAD exactly while HEAD itself sits arbitrarily
|
|
1519
|
+
far behind the remote, and the graph-vs-HEAD check alone reports a clean
|
|
1520
|
+
``✓ in sync`` for it. This never fetches or pulls; it only reads whatever
|
|
1521
|
+
``origin/<default_branch>`` the last fetch left behind.
|
|
1522
|
+
|
|
1467
1523
|
Local-machine only, same scope as ``--orphan-worktrees``: it inspects the
|
|
1468
1524
|
checkouts named in ``coordinator.yml`` that actually exist here.
|
|
1469
1525
|
"""
|
|
@@ -1476,7 +1532,7 @@ def _diagnose_graph_health(config_path: Path) -> None:
|
|
|
1476
1532
|
cfg = _load_config(config_path)
|
|
1477
1533
|
|
|
1478
1534
|
seen: set[Path] = set()
|
|
1479
|
-
checkouts: list[tuple[str, Path]] = []
|
|
1535
|
+
checkouts: list[tuple[str, Path, str]] = []
|
|
1480
1536
|
for machine in cfg.machines:
|
|
1481
1537
|
for repo_cfg in cfg.repos:
|
|
1482
1538
|
rp = machine.repo_path(repo_cfg.name)
|
|
@@ -1486,16 +1542,20 @@ def _diagnose_graph_health(config_path: Path) -> None:
|
|
|
1486
1542
|
if path in seen or not (path / ".git").exists():
|
|
1487
1543
|
continue
|
|
1488
1544
|
seen.add(path)
|
|
1489
|
-
checkouts.append((repo_cfg.name, path))
|
|
1545
|
+
checkouts.append((repo_cfg.name, path, repo_cfg.default_branch or "main"))
|
|
1490
1546
|
|
|
1491
1547
|
if not checkouts:
|
|
1492
1548
|
click.echo("no local checkouts from coordinator.yml exist on this machine.")
|
|
1493
1549
|
return
|
|
1494
1550
|
|
|
1495
1551
|
stale_count = 0
|
|
1496
|
-
|
|
1552
|
+
origin_behind_count = 0
|
|
1553
|
+
for repo_name, path, default_branch in checkouts:
|
|
1497
1554
|
click.echo(f"── {repo_name}")
|
|
1498
|
-
|
|
1555
|
+
# #2211: default_branch drives the HEAD-vs-origin comparison
|
|
1556
|
+
# alongside the existing graph-vs-HEAD one — never fetches, only
|
|
1557
|
+
# reads whatever `origin/<default_branch>` the last fetch left.
|
|
1558
|
+
st = graph_status(path, default_branch)
|
|
1499
1559
|
for line in format_status_lines(st):
|
|
1500
1560
|
click.echo(f" {line}")
|
|
1501
1561
|
if st.stale:
|
|
@@ -1504,11 +1564,20 @@ def _diagnose_graph_health(config_path: Path) -> None:
|
|
|
1504
1564
|
" fix: run `graphify update .` in the checkout "
|
|
1505
1565
|
"(the hooks skip rebase/merge/cherry-pick and reset --hard)"
|
|
1506
1566
|
)
|
|
1567
|
+
if st.origin_behind:
|
|
1568
|
+
origin_behind_count += 1
|
|
1569
|
+
click.echo(
|
|
1570
|
+
f" fix: HEAD is behind origin/{default_branch} — the base "
|
|
1571
|
+
"checkout is fetched but never auto-pulled (by design; "
|
|
1572
|
+
"checkouts are sometimes deliberately parked). Review and "
|
|
1573
|
+
"pull by hand if it isn't."
|
|
1574
|
+
)
|
|
1507
1575
|
ok, detail = hooks_path_status(path)
|
|
1508
1576
|
click.echo(f" {'✓' if ok else '⚠'} {detail}")
|
|
1509
1577
|
|
|
1510
1578
|
click.echo(
|
|
1511
|
-
f"GRAPH_HEALTH: checkouts={len(checkouts)} stale={stale_count}"
|
|
1579
|
+
f"GRAPH_HEALTH: checkouts={len(checkouts)} stale={stale_count} "
|
|
1580
|
+
f"origin_behind={origin_behind_count}"
|
|
1512
1581
|
)
|
|
1513
1582
|
|
|
1514
1583
|
|
|
@@ -81,6 +81,16 @@ class GraphStatus:
|
|
|
81
81
|
built_sha: str | None = None
|
|
82
82
|
head_sha: str | None = None
|
|
83
83
|
in_sync: bool = False
|
|
84
|
+
# HEAD vs origin/<default_branch> — the axis graph<->HEAD alone cannot see
|
|
85
|
+
# (#2211). The base checkout is fetched but never pulled by design (see
|
|
86
|
+
# module docstring), so HEAD can sit arbitrarily far behind origin while
|
|
87
|
+
# graph == HEAD reports a clean bill of health. ``default_branch`` is the
|
|
88
|
+
# branch name the comparison used; ``origin_sha`` / ``commits_behind_origin``
|
|
89
|
+
# are ``None`` when it could not be determined (no remote, ref never
|
|
90
|
+
# fetched, or the git call failed) rather than treated as "0 behind".
|
|
91
|
+
default_branch: str | None = None
|
|
92
|
+
origin_sha: str | None = None
|
|
93
|
+
commits_behind_origin: int | None = None
|
|
84
94
|
age_seconds: float | None = None
|
|
85
95
|
# mtime of graphify-out/manifest.json — the last time graphify *checked* the
|
|
86
96
|
# graph against the working tree, whether or not it rewrote anything.
|
|
@@ -122,6 +132,19 @@ class GraphStatus:
|
|
|
122
132
|
*unknown* — an unknown is reported separately, not counted as drift."""
|
|
123
133
|
return self.stamp_behind and not self.verified_current
|
|
124
134
|
|
|
135
|
+
@property
|
|
136
|
+
def origin_behind(self) -> bool:
|
|
137
|
+
"""HEAD (of the checkout that owns the graph) is behind
|
|
138
|
+
``origin/<default_branch>`` by at least one commit — i.e. the graph
|
|
139
|
+
may match HEAD exactly and still describe stale code, because HEAD
|
|
140
|
+
itself is stale relative to the remote (#2211).
|
|
141
|
+
|
|
142
|
+
False — not True — when this could not be proven (no remote, the ref
|
|
143
|
+
was never fetched, or the git call failed): mirrors ``stale``'s rule
|
|
144
|
+
that an unknown must never be counted as drift.
|
|
145
|
+
"""
|
|
146
|
+
return bool(self.commits_behind_origin)
|
|
147
|
+
|
|
125
148
|
|
|
126
149
|
def read_built_sha(report_path: Path) -> str | None:
|
|
127
150
|
"""The commit ``GRAPH_REPORT.md`` says the graph was built from."""
|
|
@@ -161,6 +184,22 @@ def _head_committed_at(repo_path: Path) -> float | None:
|
|
|
161
184
|
return None
|
|
162
185
|
|
|
163
186
|
|
|
187
|
+
def _commits_ahead(repo_path: Path, base: str, ahead_of: str) -> int | None:
|
|
188
|
+
"""Count of commits reachable from *ahead_of* that are not in *base*
|
|
189
|
+
(``git rev-list --count base..ahead_of``).
|
|
190
|
+
|
|
191
|
+
Best-effort like the rest of this module: ``None`` (never raised) when
|
|
192
|
+
git can't answer — an unproven comparison must not be reported as drift.
|
|
193
|
+
"""
|
|
194
|
+
out = _git_out(repo_path, "rev-list", "--count", f"{base}..{ahead_of}")
|
|
195
|
+
if out is None:
|
|
196
|
+
return None
|
|
197
|
+
try:
|
|
198
|
+
return int(out)
|
|
199
|
+
except ValueError:
|
|
200
|
+
return None
|
|
201
|
+
|
|
202
|
+
|
|
164
203
|
def _shas_agree(built: str, head: str) -> bool:
|
|
165
204
|
"""Compare on the shorter of the two — the report abbreviates (8 chars by
|
|
166
205
|
default) while ``git rev-parse HEAD`` is full-length."""
|
|
@@ -170,12 +209,20 @@ def _shas_agree(built: str, head: str) -> bool:
|
|
|
170
209
|
return built[:n].lower() == head[:n].lower()
|
|
171
210
|
|
|
172
211
|
|
|
173
|
-
def graph_status(repo_path: Path) -> GraphStatus:
|
|
212
|
+
def graph_status(repo_path: Path, default_branch: str = "main") -> GraphStatus:
|
|
174
213
|
"""Freshness of the graphify graph for the checkout at *repo_path*.
|
|
175
214
|
|
|
176
215
|
Read-only and best-effort: a missing graph, a missing report, or a repo
|
|
177
216
|
git can't read all return a populated :class:`GraphStatus` with
|
|
178
217
|
``unknown_reason`` set rather than raising.
|
|
218
|
+
|
|
219
|
+
*default_branch* names the branch to compare HEAD against on
|
|
220
|
+
``origin`` (#2211) — pass the repo's configured default branch
|
|
221
|
+
(``coordinator.yml``'s ``default_branch``, "main" if unset). Never
|
|
222
|
+
fetches: it only reads whatever ``origin/<default_branch>`` the last
|
|
223
|
+
``git fetch`` left behind, so a checkout that was never fetched or has
|
|
224
|
+
no ``origin`` remote simply leaves ``origin_sha``/``commits_behind_origin``
|
|
225
|
+
unset rather than reporting drift it can't prove.
|
|
179
226
|
"""
|
|
180
227
|
st = GraphStatus(repo_path=repo_path)
|
|
181
228
|
out_dir = repo_path / "graphify-out"
|
|
@@ -213,6 +260,7 @@ def graph_status(repo_path: Path) -> GraphStatus:
|
|
|
213
260
|
owner = st.link_target.parent if (st.is_symlink and st.link_target) else repo_path
|
|
214
261
|
st.head_sha = _head_sha(owner)
|
|
215
262
|
st.head_committed_at = _head_committed_at(owner)
|
|
263
|
+
st.default_branch = default_branch
|
|
216
264
|
|
|
217
265
|
if not st.built_sha:
|
|
218
266
|
st.unknown_reason = "GRAPH_REPORT.md has no 'Built from commit' line"
|
|
@@ -220,6 +268,15 @@ def graph_status(repo_path: Path) -> GraphStatus:
|
|
|
220
268
|
st.unknown_reason = f"could not read HEAD of {owner}"
|
|
221
269
|
else:
|
|
222
270
|
st.in_sync = _shas_agree(st.built_sha, st.head_sha)
|
|
271
|
+
|
|
272
|
+
# HEAD vs origin/<default_branch> — independent of the graph<->HEAD
|
|
273
|
+
# comparison above. Best-effort: no remote, or the ref not fetched yet,
|
|
274
|
+
# just leaves this unset (see docstring).
|
|
275
|
+
if st.head_sha:
|
|
276
|
+
origin_sha = _git_out(owner, "rev-parse", f"origin/{default_branch}")
|
|
277
|
+
if origin_sha:
|
|
278
|
+
st.origin_sha = origin_sha
|
|
279
|
+
st.commits_behind_origin = _commits_ahead(owner, st.head_sha, origin_sha)
|
|
223
280
|
return st
|
|
224
281
|
|
|
225
282
|
|
|
@@ -326,17 +383,39 @@ def format_status_lines(st: GraphStatus) -> list[str]:
|
|
|
326
383
|
if st.is_symlink:
|
|
327
384
|
lines.append(f"↳ {where}/graphify-out → {st.link_target} (linked worktree)")
|
|
328
385
|
|
|
386
|
+
# #2211: graph == HEAD only proves the graph matches the checkout's own
|
|
387
|
+
# HEAD — it says nothing about whether that HEAD itself is stale relative
|
|
388
|
+
# to origin (the base checkout is fetched but never pulled, by design;
|
|
389
|
+
# see module docstring). Shared by both "graph matches HEAD" branches
|
|
390
|
+
# below so a genuinely-current-but-unpushed-tracking checkout doesn't
|
|
391
|
+
# report a false ✓.
|
|
392
|
+
origin_note = ""
|
|
393
|
+
if st.origin_behind:
|
|
394
|
+
n = st.commits_behind_origin or 0
|
|
395
|
+
origin_note = (
|
|
396
|
+
f" — HEAD is {n} commit{'' if n == 1 else 's'} behind "
|
|
397
|
+
f"origin/{st.default_branch}; the graph describes stale code "
|
|
398
|
+
f"(fix: review + pull — not automatic, see #2211)"
|
|
399
|
+
)
|
|
400
|
+
|
|
329
401
|
if st.unknown_reason:
|
|
330
402
|
lines.append(f"? {where}: freshness unknown — {st.unknown_reason}")
|
|
331
403
|
elif st.in_sync:
|
|
332
|
-
|
|
404
|
+
if origin_note:
|
|
405
|
+
lines.append(
|
|
406
|
+
f"⚠ {where}: graph matches HEAD (built from {st.built_sha}){origin_note}"
|
|
407
|
+
)
|
|
408
|
+
else:
|
|
409
|
+
lines.append(f"✓ {where}: graph in sync (built from {st.built_sha})")
|
|
333
410
|
elif st.verified_current:
|
|
334
411
|
# Stamp behind, but graphify has re-checked the tree since HEAD landed
|
|
335
412
|
# and found no topology change — the graph content is current.
|
|
413
|
+
mark = "⚠" if origin_note else "✓"
|
|
336
414
|
lines.append(
|
|
337
|
-
f"
|
|
415
|
+
f"{mark} {where}: graph content current — stamp says {st.built_sha} "
|
|
338
416
|
f"(HEAD {(st.head_sha or '')[:8]}), but verified against the tree "
|
|
339
|
-
f"since; graphify leaves outputs untouched when topology is
|
|
417
|
+
f"since; graphify leaves outputs untouched when topology is "
|
|
418
|
+
f"unchanged{origin_note}"
|
|
340
419
|
)
|
|
341
420
|
else:
|
|
342
421
|
lines.append(
|
|
@@ -23,6 +23,14 @@ longer HEAD. That is the 2026-07-30 vimcode incident: 128.8h stale, hooks
|
|
|
23
23
|
disabled, and nothing in the fleet said so. Age escalates a
|
|
24
24
|
hooks-working checkout from WARN to CRIT at ``graph_stale_crit_hours``;
|
|
25
25
|
hooks-disabled skips straight to CRIT because time cannot fix it.
|
|
26
|
+
|
|
27
|
+
**graph == HEAD is not the whole story (#2211).** ``status.stale`` only
|
|
28
|
+
compares the graph to this checkout's OWN HEAD. The base checkout is fetched
|
|
29
|
+
but never pulled (see ``coord.graph_health``'s module docstring), so HEAD can
|
|
30
|
+
sit arbitrarily far behind ``origin/<default_branch>`` while the graph
|
|
31
|
+
matches it exactly — a confidently-correct-looking graph of stale code. This
|
|
32
|
+
module reports that as its own WARN (``status.origin_behind``), independent
|
|
33
|
+
of and never overriding ``status.stale``'s verdict.
|
|
26
34
|
"""
|
|
27
35
|
|
|
28
36
|
from __future__ import annotations
|
|
@@ -79,7 +87,10 @@ def probe_graph(ctx: HealthContext) -> list[CheckResult]:
|
|
|
79
87
|
results: list[CheckResult] = []
|
|
80
88
|
|
|
81
89
|
for checkout in ctx.checkouts:
|
|
82
|
-
|
|
90
|
+
# #2211: default_branch drives the HEAD-vs-origin comparison
|
|
91
|
+
# alongside the existing graph-vs-HEAD one. Never fetches — only
|
|
92
|
+
# reads whatever origin/<default_branch> the last `git fetch` left.
|
|
93
|
+
status = graph_status(checkout.path, checkout.default_branch)
|
|
83
94
|
hooks_ok, hooks_detail = hooks_path_status(checkout.path)
|
|
84
95
|
|
|
85
96
|
values = {
|
|
@@ -91,6 +102,10 @@ def probe_graph(ctx: HealthContext) -> list[CheckResult]:
|
|
|
91
102
|
"verified_current": status.verified_current,
|
|
92
103
|
"built_sha": status.built_sha,
|
|
93
104
|
"head_sha": status.head_sha,
|
|
105
|
+
"default_branch": status.default_branch,
|
|
106
|
+
"origin_sha": status.origin_sha,
|
|
107
|
+
"commits_behind_origin": status.commits_behind_origin,
|
|
108
|
+
"origin_behind": status.origin_behind,
|
|
94
109
|
"age_seconds": status.age_seconds,
|
|
95
110
|
"age_hours": (
|
|
96
111
|
round(status.age_seconds / 3600.0, 1) if status.age_seconds is not None else None
|
|
@@ -153,11 +168,35 @@ def probe_graph(ctx: HealthContext) -> list[CheckResult]:
|
|
|
153
168
|
else f", {commits_behind} commit{'' if commits_behind == 1 else 's'} behind"
|
|
154
169
|
)
|
|
155
170
|
|
|
171
|
+
# #2211: graph == HEAD only proves the graph matches this checkout's
|
|
172
|
+
# OWN HEAD — it says nothing about whether HEAD itself is behind
|
|
173
|
+
# origin. The base checkout is fetched but never pulled by design
|
|
174
|
+
# (see coord.graph_health module docstring), so this must be judged
|
|
175
|
+
# independently of `status.stale`, not folded into it.
|
|
176
|
+
origin_suffix = (
|
|
177
|
+
""
|
|
178
|
+
if not status.origin_behind
|
|
179
|
+
else (
|
|
180
|
+
f", {status.commits_behind_origin} commit"
|
|
181
|
+
f"{'' if status.commits_behind_origin == 1 else 's'} behind "
|
|
182
|
+
f"origin/{status.default_branch}"
|
|
183
|
+
)
|
|
184
|
+
)
|
|
185
|
+
|
|
156
186
|
if not status.stale:
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
187
|
+
if status.origin_behind:
|
|
188
|
+
severity = Severity.WARN
|
|
189
|
+
headroom = (
|
|
190
|
+
f"graph matches HEAD ({(status.built_sha or '')[:8]}){origin_suffix} "
|
|
191
|
+
"— describes stale code"
|
|
192
|
+
)
|
|
193
|
+
else:
|
|
194
|
+
severity = Severity.OK
|
|
195
|
+
headroom = f"in sync ({(status.built_sha or '')[:8]}), {age_text} old"
|
|
196
|
+
if status.verified_current and status.stamp_behind:
|
|
197
|
+
headroom = (
|
|
198
|
+
f"content current (stamp {(status.built_sha or '')[:8]}), {age_text} old"
|
|
199
|
+
)
|
|
161
200
|
elif not hooks_ok:
|
|
162
201
|
severity = Severity.CRIT
|
|
163
202
|
headroom = f"{age_text} stale{commits_suffix}, hooks disabled -> will not self-heal"
|
|
@@ -172,7 +211,17 @@ def probe_graph(ctx: HealthContext) -> list[CheckResult]:
|
|
|
172
211
|
headroom = f"stale, {age_text} old{commits_suffix} (HEAD {(status.head_sha or '')[:8]})"
|
|
173
212
|
|
|
174
213
|
detail = ""
|
|
175
|
-
if
|
|
214
|
+
if not status.stale and status.origin_behind:
|
|
215
|
+
# Not a graph problem — `graphify update` would rebuild from the
|
|
216
|
+
# same stale HEAD. Naming a `git pull` here deliberately, but not
|
|
217
|
+
# running one: automatic pulls are unsafe for a base checkout
|
|
218
|
+
# (see coord.graph_health module docstring — deliberately-parked
|
|
219
|
+
# branches, stale .git/index.lock, etc).
|
|
220
|
+
detail = (
|
|
221
|
+
f"fix: review, then pull {checkout.path} to catch it up to "
|
|
222
|
+
f"origin/{status.default_branch} (not automatic)"
|
|
223
|
+
)
|
|
224
|
+
elif severity is not Severity.OK:
|
|
176
225
|
detail = f"fix: graphify update {checkout.path}"
|
|
177
226
|
if not hooks_ok:
|
|
178
227
|
detail = f"{detail} — {hooks_detail}"
|
|
@@ -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
|