code-coordinator 0.5.70__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.70 → code_coordinator-0.5.72}/PKG-INFO +1 -1
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/commands/status.py +27 -5
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/drive.py +89 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/graph_health.py +83 -4
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/health/checks/graph.py +55 -6
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_cli_diagnose_graph.py +91 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_drive.py +125 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_graph_health.py +79 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_health_checks.py +59 -1
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_health_cli_graph.py +3 -1
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_health_incident_regression.py +4 -2
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/.github/workflows/release-tui.yml +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/.gitignore +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/CLAUDE.md +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/GOAL.md +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/LICENSE +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/MANIFEST.in +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/README.md +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/__init__.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/agent.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/audit.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/board_bool_guard.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/board_service.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/brain.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/claim.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/cli.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/client.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/comments.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/config.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dao.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/.gitignore +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/components.json +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/dist/assets/Gallery-da3qNiIw.js +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/dist/assets/Terminal-skVFCxPU.js +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/dist/assets/index-DltfZR5f.js +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/dist/index.html +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/dist/sw.js +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/eslint.config.js +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/index.html +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/package-lock.json +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/package.json +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/playwright.config.ts +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/postcss.config.js +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/App.tsx +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/api/client.ts +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/api/generated.ts +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/index.css +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/main.tsx +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/test-setup.ts +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/tailwind.config.js +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/tsconfig.json +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/tsconfig.node.json +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dashboard/webapp/vite.config.ts +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/db.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/deps.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/events.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/filelock.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/freshness.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/gates.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/goal.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/health/context.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/health/models.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/health/render.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/health/units.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/hooks.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/interactive.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/models.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/network.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/notify.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/openapi.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/parentage.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/plans.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/progress.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/release_window.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/reports.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/review.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/smoke.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/split_work.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/state.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/test_author.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/test_report.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/usage.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/install-agent.sh +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/pyproject.toml +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/setup.cfg +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/__init__.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/acceptance/ms-33/audit_1039.rs +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/acceptance/ms-33/contract.md +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/acceptance/ms-33/manifest.yml +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/acceptance/ms-38/contract.md +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/acceptance/ms-38/manifest.yml +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/conftest.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_config.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_db.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_events.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_init.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_models.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_network.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_no_direct_gh_calls.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_review.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_session.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_split.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_state.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tui/Cargo.lock +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tui/Cargo.toml +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tui/cargo-config-local-quadraui.toml.example +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tui/src/app/audit.rs +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tui/src/app/chat.rs +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tui/src/app/data.rs +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tui/src/app/dialogs.rs +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tui/src/app/drive.rs +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tui/src/app/drive_queue.rs +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tui/src/app/escalation.rs +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tui/src/app/events.rs +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tui/src/app/fixtures.rs +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tui/src/app/fleet_health.rs +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tui/src/app/fleet_sessions.rs +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tui/src/app/fleet_terminals.rs +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tui/src/app/format.rs +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tui/src/app/milestone_dag.rs +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tui/src/app/mod.rs +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tui/src/app/msv.rs +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tui/src/app/pipeline.rs +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tui/src/app/plans.rs +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tui/src/app/render.rs +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tui/src/app/reports.rs +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tui/src/app/sessions.rs +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tui/src/app/settings_ui.rs +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tui/src/app/sidebar.rs +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tui/src/app/terminal.rs +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tui/src/app/tests.rs +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tui/src/app/types.rs +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tui/src/app/workspace.rs +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tui/src/bin/gtk.rs +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tui/src/commands.rs +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tui/src/lib.rs +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tui/src/main.rs +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tui/src/settings.rs +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tui/tests/acceptance.rs +0 -0
- {code_coordinator-0.5.70 → code_coordinator-0.5.72}/tui/tests/cli.rs +0 -0
- {code_coordinator-0.5.70 → 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
|
|
|
@@ -413,6 +413,10 @@ class AcceptanceGateChecker(Protocol):
|
|
|
413
413
|
issue_labels: tuple[str, ...],
|
|
414
414
|
) -> bool: ...
|
|
415
415
|
|
|
416
|
+
def has_authored_slice(
|
|
417
|
+
self, repo_name: str, milestone_number: int, issue_number: int,
|
|
418
|
+
) -> bool: ...
|
|
419
|
+
|
|
416
420
|
|
|
417
421
|
@dataclass
|
|
418
422
|
class GitHubAcceptanceGateChecker:
|
|
@@ -478,6 +482,35 @@ class GitHubAcceptanceGateChecker:
|
|
|
478
482
|
)
|
|
479
483
|
return readiness.exempt
|
|
480
484
|
|
|
485
|
+
def has_authored_slice(
|
|
486
|
+
self, repo_name: str, milestone_number: int, issue_number: int,
|
|
487
|
+
) -> bool:
|
|
488
|
+
"""#2061: the AUTHORITATIVE answer to "has this issue's JIT slice
|
|
489
|
+
landed?" — the manifest on the repo's default branch, read via the
|
|
490
|
+
identical ``test_ids_for_issue`` check the #1138 hard gate
|
|
491
|
+
(:func:`coord.milestone_dispatch.issue_oracle_ready`) already
|
|
492
|
+
performs, exposed here as ``OracleReadiness.has_slice``.
|
|
493
|
+
|
|
494
|
+
:func:`_decide_acceptance_author` calls this — instead of trusting
|
|
495
|
+
the `type="test-author"` assignment row alone — at every point
|
|
496
|
+
where the row is about to be read as "nothing was authored": no
|
|
497
|
+
row yet, or a terminal (``failed``/``cancelled``/``advisory``/
|
|
498
|
+
``done``) status with no branch commits. The assignment row is a
|
|
499
|
+
PROXY for this question; it can be stale (a drive that died
|
|
500
|
+
mid-run, a retry, or a #2020-mangled row) while an EARLIER attempt
|
|
501
|
+
already merged the slice. The manifest cannot lie about that: if
|
|
502
|
+
the slice is there, it landed, whatever the row says.
|
|
503
|
+
"""
|
|
504
|
+
from coord.milestone_dispatch import issue_oracle_ready # noqa: PLC0415
|
|
505
|
+
|
|
506
|
+
repo_cfg = self.config.repo(repo_name)
|
|
507
|
+
if repo_cfg is None:
|
|
508
|
+
return False
|
|
509
|
+
readiness = issue_oracle_ready(
|
|
510
|
+
repo_cfg, self.config, milestone_number, issue_number,
|
|
511
|
+
)
|
|
512
|
+
return readiness.has_slice
|
|
513
|
+
|
|
481
514
|
|
|
482
515
|
@dataclass(frozen=True)
|
|
483
516
|
class OracleDecision:
|
|
@@ -623,11 +656,47 @@ def _decide_acceptance_author(
|
|
|
623
656
|
Landing that last step is what :func:`_decide_acceptance_landing` does,
|
|
624
657
|
with the same bounded ``coord merge --only <aid>`` call
|
|
625
658
|
:func:`_decide_merge` already makes for the work row.
|
|
659
|
+
|
|
660
|
+
**#2061 — the assignment row is a proxy, the manifest is the answer.**
|
|
661
|
+
Every branch below that would otherwise treat "no row" or "a terminal
|
|
662
|
+
row with no branch commits" as "nothing was authored" first asks
|
|
663
|
+
:func:`_slice_already_landed`, which reads the manifest on the repo's
|
|
664
|
+
default branch — the same ``test_ids_for_issue`` check the #1138 hard
|
|
665
|
+
gate performs. A drive retry re-dispatches this gate without knowing
|
|
666
|
+
whether an EARLIER attempt already merged the slice; the second author
|
|
667
|
+
then correctly does nothing (``DONE`` with zero commits, or a stale
|
|
668
|
+
row that never even started) and, pre-#2061, that correct no-op was
|
|
669
|
+
read as a terminal failure — killing a run whose slice was already
|
|
670
|
+
landed and whose real work was ready to dispatch (coord-portal#13).
|
|
626
671
|
"""
|
|
627
672
|
aid = state.acceptance_author_aid
|
|
628
673
|
status = state.acceptance_author_status
|
|
629
674
|
|
|
675
|
+
def _slice_already_landed() -> bool:
|
|
676
|
+
"""#2061: the `type="test-author"` row above is a PROXY for "has
|
|
677
|
+
this issue's slice landed?" — a drive that died mid-run, a retry,
|
|
678
|
+
or a #2020-mangled row can leave it pointing at nothing (or at a
|
|
679
|
+
genuine failure) while an EARLIER attempt already merged the slice
|
|
680
|
+
from a previous run. Ask the AUTHORITATIVE question — the manifest
|
|
681
|
+
on the default branch, via :meth:`AcceptanceGateChecker.
|
|
682
|
+
has_authored_slice` — whenever the row is about to be read as
|
|
683
|
+
"nothing was authored": right before dispatching a fresh author,
|
|
684
|
+
and right before declaring a terminal, commit-less row a failure.
|
|
685
|
+
Never consulted for "" / "running" (still authoring — the slice
|
|
686
|
+
cannot be on the default branch yet) or "merged" (already the
|
|
687
|
+
strongest signal there is), so this costs one extra fetch at a
|
|
688
|
+
decision point, not one per poll tick.
|
|
689
|
+
"""
|
|
690
|
+
return gate_checker.has_authored_slice(
|
|
691
|
+
state.repo, state.milestone_number, state.issue,
|
|
692
|
+
)
|
|
693
|
+
|
|
630
694
|
if not aid:
|
|
695
|
+
# #2061: a retry (or a drive resuming after this run's own board
|
|
696
|
+
# row went missing/stale) must not re-dispatch an author for a
|
|
697
|
+
# slice that already landed from an earlier attempt.
|
|
698
|
+
if _slice_already_landed():
|
|
699
|
+
return None
|
|
631
700
|
command = [
|
|
632
701
|
"acceptance", "author", state.repo, str(oracle.tracking_issue),
|
|
633
702
|
"--issue", str(state.issue),
|
|
@@ -671,6 +740,12 @@ def _decide_acceptance_author(
|
|
|
671
740
|
return None
|
|
672
741
|
|
|
673
742
|
if status == "failed":
|
|
743
|
+
# #2061: this row's FAILED status describes what happened to THIS
|
|
744
|
+
# author, not whether the issue's slice exists — a retry's row can
|
|
745
|
+
# fail (or simply be stale) while an earlier attempt already merged
|
|
746
|
+
# the slice it was about to re-author.
|
|
747
|
+
if _slice_already_landed():
|
|
748
|
+
return None
|
|
674
749
|
return _die(
|
|
675
750
|
f"acceptance author {aid} failed — inspect: coord log {aid} "
|
|
676
751
|
f"--machine {state.acceptance_author_machine or machine}\n"
|
|
@@ -679,6 +754,8 @@ def _decide_acceptance_author(
|
|
|
679
754
|
)
|
|
680
755
|
|
|
681
756
|
if status == "cancelled":
|
|
757
|
+
if _slice_already_landed():
|
|
758
|
+
return None
|
|
682
759
|
return _die(
|
|
683
760
|
f"acceptance author {aid} was cancelled — re-dispatch by hand: "
|
|
684
761
|
f"coord acceptance author {state.repo} {oracle.tracking_issue} "
|
|
@@ -700,6 +777,11 @@ def _decide_acceptance_author(
|
|
|
700
777
|
branch = state.acceptance_author_branch
|
|
701
778
|
probe = replace(state, work_branch=branch) if branch else state
|
|
702
779
|
if not branch or not verifier.branch_has_commits(probe):
|
|
780
|
+
# #2061: a commit-less ADVISORY row IS what an earlier-landed
|
|
781
|
+
# slice's stale/retried author row looks like — check the
|
|
782
|
+
# manifest before declaring failure.
|
|
783
|
+
if _slice_already_landed():
|
|
784
|
+
return None
|
|
703
785
|
return _die(
|
|
704
786
|
f"acceptance author {aid} exited ADVISORY with no commits on "
|
|
705
787
|
"its branch — nothing was authored, so there is no slice to "
|
|
@@ -741,6 +823,13 @@ def _decide_acceptance_author(
|
|
|
741
823
|
branch = state.acceptance_author_branch
|
|
742
824
|
probe = replace(state, work_branch=branch) if branch else state
|
|
743
825
|
if not branch or not verifier.branch_has_commits(probe):
|
|
826
|
+
# #2061 (coord-portal#13): a re-dispatched author that lands in
|
|
827
|
+
# a world where the slice is ALREADY on the default branch
|
|
828
|
+
# correctly does nothing — DONE with zero commits — and that is
|
|
829
|
+
# not a failure to re-diagnose, it's the terminal case this
|
|
830
|
+
# whole gate exists to detect. Check the manifest before dying.
|
|
831
|
+
if _slice_already_landed():
|
|
832
|
+
return None
|
|
744
833
|
branch_display = repr(branch) if branch else "(none)"
|
|
745
834
|
return _die(
|
|
746
835
|
f"acceptance author {aid} exited DONE, but its branch "
|
|
@@ -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
|