code-coordinator 0.5.71__tar.gz → 0.5.72__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.72}/PKG-INFO +1 -1
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/commands/status.py +27 -5
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/graph_health.py +83 -4
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/health/checks/graph.py +55 -6
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_cli_diagnose_graph.py +91 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_graph_health.py +79 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_health_checks.py +59 -1
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_health_cli_graph.py +3 -1
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_health_incident_regression.py +4 -2
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/.github/workflows/release-tui.yml +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/.gitignore +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/CLAUDE.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/GOAL.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/LICENSE +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/MANIFEST.in +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/README.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/__init__.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/agent.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/audit.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/board_bool_guard.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/board_service.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/brain.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/claim.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/cli.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/client.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/comments.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/config.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dao.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/.gitignore +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/components.json +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/dist/assets/Gallery-da3qNiIw.js +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/dist/assets/Terminal-skVFCxPU.js +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/dist/assets/index-DltfZR5f.js +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/dist/index.html +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/dist/sw.js +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/eslint.config.js +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/index.html +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/package-lock.json +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/package.json +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/playwright.config.ts +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/postcss.config.js +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/App.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/api/client.ts +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/api/generated.ts +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/index.css +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/main.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/test-setup.ts +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/tailwind.config.js +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/tsconfig.json +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/tsconfig.node.json +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dashboard/webapp/vite.config.ts +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/db.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/deps.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/drive.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/events.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/filelock.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/freshness.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/gates.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/goal.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/health/context.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/health/models.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/health/render.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/health/units.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/hooks.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/interactive.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/models.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/network.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/notify.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/openapi.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/parentage.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/plans.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/progress.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/release_window.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/reports.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/review.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/smoke.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/split_work.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/state.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/test_author.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/test_report.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/usage.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/install-agent.sh +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/pyproject.toml +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/setup.cfg +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/__init__.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/acceptance/ms-33/audit_1039.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/acceptance/ms-33/contract.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/acceptance/ms-33/manifest.yml +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/acceptance/ms-38/contract.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/acceptance/ms-38/manifest.yml +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/conftest.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_config.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_db.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_events.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_init.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_models.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_network.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_no_direct_gh_calls.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_review.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_session.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_split.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_state.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tui/Cargo.lock +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tui/Cargo.toml +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tui/cargo-config-local-quadraui.toml.example +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tui/src/app/audit.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tui/src/app/chat.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tui/src/app/data.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tui/src/app/dialogs.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tui/src/app/drive.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tui/src/app/drive_queue.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tui/src/app/escalation.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tui/src/app/events.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tui/src/app/fixtures.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tui/src/app/fleet_health.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tui/src/app/fleet_sessions.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tui/src/app/fleet_terminals.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tui/src/app/format.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tui/src/app/milestone_dag.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tui/src/app/mod.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tui/src/app/msv.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tui/src/app/pipeline.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tui/src/app/plans.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tui/src/app/render.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tui/src/app/reports.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tui/src/app/sessions.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tui/src/app/settings_ui.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tui/src/app/sidebar.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tui/src/app/terminal.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tui/src/app/tests.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tui/src/app/types.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tui/src/app/workspace.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tui/src/bin/gtk.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tui/src/commands.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tui/src/lib.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tui/src/main.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tui/src/settings.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tui/tests/acceptance.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tui/tests/cli.rs +0 -0
- {code_coordinator-0.5.71 → code_coordinator-0.5.72}/tui/tests/fixtures/board_sample.json +0 -0
|
@@ -1464,6 +1464,15 @@ def _diagnose_graph_health(config_path: Path) -> None:
|
|
|
1464
1464
|
checks ``core.hooksPath``, the one-time per-machine setting that decides
|
|
1465
1465
|
whether worktrees on this box get a linked graph at all.
|
|
1466
1466
|
|
|
1467
|
+
#2211: also reports HEAD vs ``origin/<default_branch>``, alongside the
|
|
1468
|
+
existing graph-vs-HEAD comparison. The base checkout is fetched but
|
|
1469
|
+
never pulled by design (worktrees always branch from a fresh
|
|
1470
|
+
``origin/<default>``, so a stale base never breaks dispatch) — which
|
|
1471
|
+
means a graph can match HEAD exactly while HEAD itself sits arbitrarily
|
|
1472
|
+
far behind the remote, and the graph-vs-HEAD check alone reports a clean
|
|
1473
|
+
``✓ in sync`` for it. This never fetches or pulls; it only reads whatever
|
|
1474
|
+
``origin/<default_branch>`` the last fetch left behind.
|
|
1475
|
+
|
|
1467
1476
|
Local-machine only, same scope as ``--orphan-worktrees``: it inspects the
|
|
1468
1477
|
checkouts named in ``coordinator.yml`` that actually exist here.
|
|
1469
1478
|
"""
|
|
@@ -1476,7 +1485,7 @@ def _diagnose_graph_health(config_path: Path) -> None:
|
|
|
1476
1485
|
cfg = _load_config(config_path)
|
|
1477
1486
|
|
|
1478
1487
|
seen: set[Path] = set()
|
|
1479
|
-
checkouts: list[tuple[str, Path]] = []
|
|
1488
|
+
checkouts: list[tuple[str, Path, str]] = []
|
|
1480
1489
|
for machine in cfg.machines:
|
|
1481
1490
|
for repo_cfg in cfg.repos:
|
|
1482
1491
|
rp = machine.repo_path(repo_cfg.name)
|
|
@@ -1486,16 +1495,20 @@ def _diagnose_graph_health(config_path: Path) -> None:
|
|
|
1486
1495
|
if path in seen or not (path / ".git").exists():
|
|
1487
1496
|
continue
|
|
1488
1497
|
seen.add(path)
|
|
1489
|
-
checkouts.append((repo_cfg.name, path))
|
|
1498
|
+
checkouts.append((repo_cfg.name, path, repo_cfg.default_branch or "main"))
|
|
1490
1499
|
|
|
1491
1500
|
if not checkouts:
|
|
1492
1501
|
click.echo("no local checkouts from coordinator.yml exist on this machine.")
|
|
1493
1502
|
return
|
|
1494
1503
|
|
|
1495
1504
|
stale_count = 0
|
|
1496
|
-
|
|
1505
|
+
origin_behind_count = 0
|
|
1506
|
+
for repo_name, path, default_branch in checkouts:
|
|
1497
1507
|
click.echo(f"── {repo_name}")
|
|
1498
|
-
|
|
1508
|
+
# #2211: default_branch drives the HEAD-vs-origin comparison
|
|
1509
|
+
# alongside the existing graph-vs-HEAD one — never fetches, only
|
|
1510
|
+
# reads whatever `origin/<default_branch>` the last fetch left.
|
|
1511
|
+
st = graph_status(path, default_branch)
|
|
1499
1512
|
for line in format_status_lines(st):
|
|
1500
1513
|
click.echo(f" {line}")
|
|
1501
1514
|
if st.stale:
|
|
@@ -1504,11 +1517,20 @@ def _diagnose_graph_health(config_path: Path) -> None:
|
|
|
1504
1517
|
" fix: run `graphify update .` in the checkout "
|
|
1505
1518
|
"(the hooks skip rebase/merge/cherry-pick and reset --hard)"
|
|
1506
1519
|
)
|
|
1520
|
+
if st.origin_behind:
|
|
1521
|
+
origin_behind_count += 1
|
|
1522
|
+
click.echo(
|
|
1523
|
+
f" fix: HEAD is behind origin/{default_branch} — the base "
|
|
1524
|
+
"checkout is fetched but never auto-pulled (by design; "
|
|
1525
|
+
"checkouts are sometimes deliberately parked). Review and "
|
|
1526
|
+
"pull by hand if it isn't."
|
|
1527
|
+
)
|
|
1507
1528
|
ok, detail = hooks_path_status(path)
|
|
1508
1529
|
click.echo(f" {'✓' if ok else '⚠'} {detail}")
|
|
1509
1530
|
|
|
1510
1531
|
click.echo(
|
|
1511
|
-
f"GRAPH_HEALTH: checkouts={len(checkouts)} stale={stale_count}"
|
|
1532
|
+
f"GRAPH_HEALTH: checkouts={len(checkouts)} stale={stale_count} "
|
|
1533
|
+
f"origin_behind={origin_behind_count}"
|
|
1512
1534
|
)
|
|
1513
1535
|
|
|
1514
1536
|
|
|
@@ -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}"
|
|
@@ -47,6 +47,36 @@ def _repo_with_graph(root: Path, *, built_sha: str | None = None) -> Path:
|
|
|
47
47
|
return root
|
|
48
48
|
|
|
49
49
|
|
|
50
|
+
def _add_empty_commits(repo: Path, n: int, *, prefix: str = "extra") -> None:
|
|
51
|
+
for i in range(n):
|
|
52
|
+
_git("commit", "-q", "--allow-empty", "-m", f"{prefix}-{i}", cwd=repo)
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
def _repo_behind_origin(root: Path, tmp_path: Path, *, behind_by: int) -> Path:
|
|
56
|
+
"""A repo whose graph matches its OWN HEAD, but whose HEAD sits
|
|
57
|
+
*behind_by* commits behind ``origin/main`` — the exact shape a base
|
|
58
|
+
checkout accumulates over time, because the agent fetches but
|
|
59
|
+
deliberately never pulls it (``coord/agent.py``, see
|
|
60
|
+
``coord.graph_health``'s module docstring for why).
|
|
61
|
+
|
|
62
|
+
``behind_by=0`` gives a checkout that is in sync on both axes.
|
|
63
|
+
"""
|
|
64
|
+
repo = _repo_with_graph(root)
|
|
65
|
+
caught_up_at = _git("rev-parse", "HEAD", cwd=repo).stdout.strip()
|
|
66
|
+
bare = tmp_path / "origin.git"
|
|
67
|
+
_git("init", "-q", "-b", "main", "--bare", str(bare), cwd=tmp_path)
|
|
68
|
+
_git("remote", "add", "origin", str(bare), cwd=repo)
|
|
69
|
+
_git("push", "-q", "origin", "HEAD:refs/heads/main", cwd=repo)
|
|
70
|
+
if behind_by:
|
|
71
|
+
_add_empty_commits(repo, behind_by)
|
|
72
|
+
_git("push", "-q", "origin", "HEAD:refs/heads/main", cwd=repo)
|
|
73
|
+
_git("reset", "-q", "--hard", caught_up_at, cwd=repo)
|
|
74
|
+
# The agent's own behaviour (fetch, never pull) — populates
|
|
75
|
+
# refs/remotes/origin/main without moving HEAD.
|
|
76
|
+
_git("fetch", "-q", "origin", cwd=repo)
|
|
77
|
+
return repo
|
|
78
|
+
|
|
79
|
+
|
|
50
80
|
def _config_for(tmp_path: Path, repo_path: Path) -> Path:
|
|
51
81
|
cfg = tmp_path / "coordinator.yml"
|
|
52
82
|
cfg.write_text(
|
|
@@ -123,3 +153,64 @@ def test_handles_a_machine_whose_checkout_is_absent(tmp_path: Path) -> None:
|
|
|
123
153
|
out = _run(cfg)
|
|
124
154
|
|
|
125
155
|
assert "no local checkouts" in out
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
# ── #2211: graph == HEAD says nothing about HEAD == origin ──────────────────
|
|
159
|
+
#
|
|
160
|
+
# The agent fetches the base checkout but deliberately never pulls it (see
|
|
161
|
+
# coord.graph_health's module docstring) — worktrees always branch from a
|
|
162
|
+
# freshly-fetched origin/<default>, so a stale base never breaks dispatch.
|
|
163
|
+
# But graphify indexes the base checkout's working tree, not origin, so a
|
|
164
|
+
# graph that matches a stale HEAD used to report a clean '✓ in sync' with no
|
|
165
|
+
# way to tell the checkout was ever behind the remote at all.
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
def test_reports_stale_relative_to_origin_when_graph_matches_a_stale_head(
|
|
169
|
+
tmp_path: Path,
|
|
170
|
+
) -> None:
|
|
171
|
+
"""The exact regression: graph == HEAD, but HEAD is behind origin/main.
|
|
172
|
+
Must NOT render as '✓ in sync' — that is the confidently-correct-looking-
|
|
173
|
+
graph-of-the-past failure mode the issue is about. Must also make no
|
|
174
|
+
writes: HEAD is unchanged after the check runs."""
|
|
175
|
+
repo = _repo_behind_origin(tmp_path / "api", tmp_path, behind_by=3)
|
|
176
|
+
head_before = _git("rev-parse", "HEAD", cwd=repo).stdout.strip()
|
|
177
|
+
|
|
178
|
+
out = _run(_config_for(tmp_path, repo))
|
|
179
|
+
|
|
180
|
+
assert "graph in sync" not in out, (
|
|
181
|
+
"graph == HEAD must not be reported as fully in sync when HEAD "
|
|
182
|
+
"itself is behind origin"
|
|
183
|
+
)
|
|
184
|
+
assert "3 commits behind origin/main" in out
|
|
185
|
+
assert "STALE" not in out, "the graph really does match HEAD — not today's drift"
|
|
186
|
+
|
|
187
|
+
head_after = _git("rev-parse", "HEAD", cwd=repo).stdout.strip()
|
|
188
|
+
assert head_after == head_before, "the check must never write to the checkout"
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
def test_reports_in_sync_when_head_matches_both_graph_and_origin(
|
|
192
|
+
tmp_path: Path,
|
|
193
|
+
) -> None:
|
|
194
|
+
"""A checkout in sync on both axes — graph == HEAD == origin — still
|
|
195
|
+
reports the plain '✓ in sync' with no origin-drift warning."""
|
|
196
|
+
repo = _repo_behind_origin(tmp_path / "api", tmp_path, behind_by=0)
|
|
197
|
+
|
|
198
|
+
out = _run(_config_for(tmp_path, repo))
|
|
199
|
+
|
|
200
|
+
assert "graph in sync" in out
|
|
201
|
+
assert "behind origin" not in out
|
|
202
|
+
assert "GRAPH_HEALTH: checkouts=1 stale=0 origin_behind=0" in out
|
|
203
|
+
|
|
204
|
+
|
|
205
|
+
def test_graph_vs_head_drift_still_reports_stale_regardless_of_origin(
|
|
206
|
+
tmp_path: Path,
|
|
207
|
+
) -> None:
|
|
208
|
+
"""graph != HEAD must still render as today's STALE, unchanged — the
|
|
209
|
+
origin axis is additive, never a replacement for the existing check."""
|
|
210
|
+
repo = _repo_behind_origin(tmp_path / "api", tmp_path, behind_by=0)
|
|
211
|
+
_git("commit", "-q", "--allow-empty", "-m", "moves HEAD past the graph", cwd=repo)
|
|
212
|
+
|
|
213
|
+
out = _run(_config_for(tmp_path, repo))
|
|
214
|
+
|
|
215
|
+
assert "STALE" in out
|
|
216
|
+
assert "GRAPH_HEALTH: checkouts=1 stale=1" in out
|
|
@@ -433,6 +433,85 @@ def test_unknown_freshness_is_not_counted_as_stale(tmp_path: Path) -> None:
|
|
|
433
433
|
assert st.stale is False
|
|
434
434
|
|
|
435
435
|
|
|
436
|
+
# ── #2211: HEAD vs origin/<default_branch> ───────────────────────────────────
|
|
437
|
+
|
|
438
|
+
|
|
439
|
+
def _repo_behind_origin(tmp_path: Path, *, behind_by: int) -> Path:
|
|
440
|
+
"""A repo whose graph matches its OWN HEAD, but whose HEAD sits
|
|
441
|
+
*behind_by* commits behind ``origin/main`` — never fetched-and-pulled,
|
|
442
|
+
only fetched (the agent's own behaviour, see module docstring)."""
|
|
443
|
+
repo = _make_repo(tmp_path / "repo", with_hooks=False)
|
|
444
|
+
_seed_graph(repo, built_sha=_head(repo)[:8])
|
|
445
|
+
caught_up_at = _head(repo)
|
|
446
|
+
bare = tmp_path / "origin.git"
|
|
447
|
+
_git("init", "-q", "-b", "main", "--bare", str(bare), cwd=tmp_path)
|
|
448
|
+
_git("remote", "add", "origin", str(bare), cwd=repo)
|
|
449
|
+
_git("push", "-q", "origin", "HEAD:refs/heads/main", cwd=repo)
|
|
450
|
+
if behind_by:
|
|
451
|
+
for i in range(behind_by):
|
|
452
|
+
_git("commit", "-q", "--allow-empty", "-m", f"extra-{i}", cwd=repo)
|
|
453
|
+
_git("push", "-q", "origin", "HEAD:refs/heads/main", cwd=repo)
|
|
454
|
+
_git("reset", "-q", "--hard", caught_up_at, cwd=repo)
|
|
455
|
+
_git("fetch", "-q", "origin", cwd=repo)
|
|
456
|
+
return repo
|
|
457
|
+
|
|
458
|
+
|
|
459
|
+
def test_graph_status_reports_origin_behind_when_head_matches_the_graph(
|
|
460
|
+
tmp_path: Path,
|
|
461
|
+
) -> None:
|
|
462
|
+
"""The exact #2211 regression: graph == HEAD (``in_sync`` True, ``stale``
|
|
463
|
+
False) tells you nothing about HEAD vs origin — that's a separate axis
|
|
464
|
+
this must expose, not fold into ``stale``."""
|
|
465
|
+
repo = _repo_behind_origin(tmp_path, behind_by=5)
|
|
466
|
+
|
|
467
|
+
st = graph_status(repo, "main")
|
|
468
|
+
assert st.in_sync is True, "graph really does match this checkout's own HEAD"
|
|
469
|
+
assert st.stale is False, "stale is strictly the graph<->HEAD comparison, unchanged"
|
|
470
|
+
assert st.commits_behind_origin == 5
|
|
471
|
+
assert st.origin_behind is True
|
|
472
|
+
|
|
473
|
+
|
|
474
|
+
def test_graph_status_origin_in_sync_when_head_matches_origin_too(
|
|
475
|
+
tmp_path: Path,
|
|
476
|
+
) -> None:
|
|
477
|
+
repo = _repo_behind_origin(tmp_path, behind_by=0)
|
|
478
|
+
|
|
479
|
+
st = graph_status(repo, "main")
|
|
480
|
+
assert st.in_sync is True
|
|
481
|
+
assert st.commits_behind_origin == 0
|
|
482
|
+
assert st.origin_behind is False
|
|
483
|
+
|
|
484
|
+
|
|
485
|
+
def test_graph_status_origin_behind_is_unknown_not_false_without_a_remote(
|
|
486
|
+
tmp_path: Path,
|
|
487
|
+
) -> None:
|
|
488
|
+
"""No ``origin`` remote at all (a local-only repo, e.g. most fixtures in
|
|
489
|
+
this file) must not be reported as "0 commits behind" — that would be a
|
|
490
|
+
fabricated fact. It must stay unproven, hence ``origin_behind`` False for
|
|
491
|
+
a different reason: we simply couldn't check."""
|
|
492
|
+
repo = _make_repo(tmp_path / "repo", with_hooks=False)
|
|
493
|
+
_seed_graph(repo, built_sha=_head(repo)[:8])
|
|
494
|
+
|
|
495
|
+
st = graph_status(repo, "main")
|
|
496
|
+
assert st.origin_sha is None
|
|
497
|
+
assert st.commits_behind_origin is None
|
|
498
|
+
assert st.origin_behind is False
|
|
499
|
+
|
|
500
|
+
|
|
501
|
+
def test_graph_status_makes_no_writes(tmp_path: Path) -> None:
|
|
502
|
+
"""Read-only by design (#2211's acceptance bar): no fetch, no pull — HEAD
|
|
503
|
+
must be exactly what it was before the check ran."""
|
|
504
|
+
repo = _repo_behind_origin(tmp_path, behind_by=5)
|
|
505
|
+
before = _head(repo)
|
|
506
|
+
|
|
507
|
+
graph_status(repo, "main")
|
|
508
|
+
|
|
509
|
+
assert _head(repo) == before
|
|
510
|
+
# Working tree/index likewise untouched.
|
|
511
|
+
status = _git("status", "--porcelain", cwd=repo).stdout
|
|
512
|
+
assert status == ""
|
|
513
|
+
|
|
514
|
+
|
|
436
515
|
def test_hooks_path_status_flags_an_unset_hooks_path(tmp_path: Path) -> None:
|
|
437
516
|
"""The repo ships the bootstrap but this checkout hasn't opted in."""
|
|
438
517
|
repo = _make_repo(tmp_path / "repo", with_hooks=True)
|
|
@@ -629,7 +629,9 @@ def _graph_status(**kwargs):
|
|
|
629
629
|
|
|
630
630
|
|
|
631
631
|
def _fake_graph(monkeypatch, status, hooks: tuple[bool, str]) -> None:
|
|
632
|
-
monkeypatch.setattr(
|
|
632
|
+
monkeypatch.setattr(
|
|
633
|
+
"coord.graph_health.graph_status", lambda p, default_branch="main": status
|
|
634
|
+
)
|
|
633
635
|
monkeypatch.setattr("coord.graph_health.hooks_path_status", lambda p: hooks)
|
|
634
636
|
|
|
635
637
|
|
|
@@ -785,6 +787,62 @@ def test_graph_in_sync_never_computes_commit_distance(tmp_path, monkeypatch) ->
|
|
|
785
787
|
assert result.values["commits_behind"] is None
|
|
786
788
|
|
|
787
789
|
|
|
790
|
+
def test_graph_matches_head_but_head_behind_origin_is_warn(tmp_path, monkeypatch) -> None:
|
|
791
|
+
"""#2211: graph == HEAD (in_sync True, stale False) alone used to render
|
|
792
|
+
OK/"in sync" — a confidently-correct-looking graph of stale code, because
|
|
793
|
+
the base checkout is fetched but never pulled. This axis is independent
|
|
794
|
+
of `stale` and must WARN even though the graph<->HEAD comparison is
|
|
795
|
+
clean."""
|
|
796
|
+
_fake_graph(
|
|
797
|
+
monkeypatch,
|
|
798
|
+
_graph_status(present=True, built_sha="abc12345", head_sha="abc12345",
|
|
799
|
+
in_sync=True, age_seconds=3600.0,
|
|
800
|
+
default_branch="main", commits_behind_origin=7),
|
|
801
|
+
(True, "core.hooksPath=.githooks"),
|
|
802
|
+
)
|
|
803
|
+
ctx = make_ctx(tmp_path, checkouts=(_checkout(tmp_path),))
|
|
804
|
+
(result,) = graph.probe_graph(ctx)
|
|
805
|
+
assert result.severity is Severity.WARN
|
|
806
|
+
assert "7 commit" in result.headroom
|
|
807
|
+
assert "origin/main" in result.headroom
|
|
808
|
+
assert "in sync" not in result.headroom
|
|
809
|
+
assert result.values["origin_behind"] is True
|
|
810
|
+
assert "pull" in result.detail
|
|
811
|
+
|
|
812
|
+
|
|
813
|
+
def test_graph_in_sync_on_both_axes_stays_ok(tmp_path, monkeypatch) -> None:
|
|
814
|
+
"""The companion case: HEAD matches both the graph and origin — still a
|
|
815
|
+
plain OK, no origin-drift warning."""
|
|
816
|
+
_fake_graph(
|
|
817
|
+
monkeypatch,
|
|
818
|
+
_graph_status(present=True, built_sha="abc12345", head_sha="abc12345",
|
|
819
|
+
in_sync=True, age_seconds=3600.0,
|
|
820
|
+
default_branch="main", commits_behind_origin=0),
|
|
821
|
+
(True, "core.hooksPath=.githooks"),
|
|
822
|
+
)
|
|
823
|
+
ctx = make_ctx(tmp_path, checkouts=(_checkout(tmp_path),))
|
|
824
|
+
(result,) = graph.probe_graph(ctx)
|
|
825
|
+
assert result.severity is Severity.OK
|
|
826
|
+
assert "in sync" in result.headroom
|
|
827
|
+
|
|
828
|
+
|
|
829
|
+
def test_graph_stale_takes_precedence_over_origin_drift(tmp_path, monkeypatch) -> None:
|
|
830
|
+
"""When the graph itself is stale (graph != HEAD), that's still reported
|
|
831
|
+
exactly as before — the origin axis is additive, never a replacement,
|
|
832
|
+
and must not soften or relabel an existing STALE/CRIT/WARN verdict."""
|
|
833
|
+
_fake_graph(
|
|
834
|
+
monkeypatch,
|
|
835
|
+
_graph_status(present=True, built_sha="aaaa1111", head_sha="bbbb2222",
|
|
836
|
+
in_sync=False, age_seconds=100 * 3600.0,
|
|
837
|
+
default_branch="main", commits_behind_origin=7),
|
|
838
|
+
(True, "core.hooksPath=.githooks"),
|
|
839
|
+
)
|
|
840
|
+
ctx = make_ctx(tmp_path, checkouts=(_checkout(tmp_path),))
|
|
841
|
+
(result,) = graph.probe_graph(ctx)
|
|
842
|
+
assert result.severity is Severity.CRIT
|
|
843
|
+
assert "stale" in result.headroom
|
|
844
|
+
|
|
845
|
+
|
|
788
846
|
# ── plan usage ───────────────────────────────────────────────────────────────
|
|
789
847
|
|
|
790
848
|
|
|
@@ -26,7 +26,9 @@ def _run(*args):
|
|
|
26
26
|
|
|
27
27
|
def _stub(monkeypatch, tmp_path, *, status, hooks=(True, "core.hooksPath=.githooks")):
|
|
28
28
|
"""Wire ``coord health`` to one fake checkout and one scripted graph_status."""
|
|
29
|
-
monkeypatch.setattr(
|
|
29
|
+
monkeypatch.setattr(
|
|
30
|
+
"coord.graph_health.graph_status", lambda p, default_branch="main": status
|
|
31
|
+
)
|
|
30
32
|
monkeypatch.setattr("coord.graph_health.hooks_path_status", lambda p: hooks)
|
|
31
33
|
|
|
32
34
|
thresholds = HealthConfig()
|
{code_coordinator-0.5.71 → code_coordinator-0.5.72}/tests/test_health_incident_regression.py
RENAMED
|
@@ -213,7 +213,7 @@ def test_vimcode_graph_128h_stale_with_hooks_disabled_is_crit_at_defaults(
|
|
|
213
213
|
) -> None:
|
|
214
214
|
monkeypatch.setattr(
|
|
215
215
|
"coord.graph_health.graph_status",
|
|
216
|
-
lambda p: _stale_graph_status(VIMCODE_GRAPH_STALE_HOURS),
|
|
216
|
+
lambda p, default_branch="main": _stale_graph_status(VIMCODE_GRAPH_STALE_HOURS),
|
|
217
217
|
)
|
|
218
218
|
monkeypatch.setattr(
|
|
219
219
|
"coord.graph_health.hooks_path_status",
|
|
@@ -249,7 +249,9 @@ def test_hooks_disabled_makes_a_stale_graph_crit_at_any_age(
|
|
|
249
249
|
clears. With them disabled it is a permanent wrong answer, so age is
|
|
250
250
|
irrelevant — this is the distinction the incident turned on.
|
|
251
251
|
"""
|
|
252
|
-
monkeypatch.setattr(
|
|
252
|
+
monkeypatch.setattr(
|
|
253
|
+
"coord.graph_health.graph_status", lambda p, default_branch="main": _stale_graph_status(1.0)
|
|
254
|
+
)
|
|
253
255
|
monkeypatch.setattr(
|
|
254
256
|
"coord.graph_health.hooks_path_status", lambda p: (False, "core.hooksPath is unset")
|
|
255
257
|
)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|