code-coordinator 0.5.81__tar.gz → 0.5.82__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.81 → code_coordinator-0.5.82}/CLAUDE.md +19 -3
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/PKG-INFO +1 -1
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/code_coordinator.egg-info/SOURCES.txt +3 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/code_coordinator.egg-info/scm_file_list.json +3 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/agent.py +125 -31
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/agent_app.py +80 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/commands/repo.py +131 -5
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/commands/status.py +7 -6
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/graph_health.py +269 -8
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/health/checks/graph.py +15 -1
- code_coordinator-0.5.82/coord/health/checks/graphify_cli.py +87 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/repo_onboard.py +400 -9
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/docs/ARCHITECTURE.md +32 -6
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/docs/GRAPHIFY_SETUP.md +30 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_agent_graph_self_heal.py +11 -2
- code_coordinator-0.5.82/tests/test_graph_selfheal_absent_2237.py +212 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_health_checks.py +74 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_health_context.py +4 -0
- code_coordinator-0.5.82/tests/test_repo_graph_fleet_2237.py +632 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_repo_onboard_2220.py +9 -1
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/.github/workflows/release-tui.yml +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/.gitignore +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/GOAL.md +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/LICENSE +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/MANIFEST.in +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/README.md +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/__init__.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/audit.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/board_bool_guard.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/board_service.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/brain.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/claim.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/cli.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/client.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/comments.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/config.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dao.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/.gitignore +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/components.json +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/dist/assets/Gallery-da3qNiIw.js +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/dist/assets/Terminal-skVFCxPU.js +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/dist/assets/index-DltfZR5f.js +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/dist/index.html +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/dist/sw.js +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/eslint.config.js +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/index.html +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/package-lock.json +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/package.json +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/playwright.config.ts +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/postcss.config.js +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/App.tsx +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/api/client.ts +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/api/generated.ts +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/index.css +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/main.tsx +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/test-setup.ts +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/tailwind.config.js +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/tsconfig.json +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/tsconfig.node.json +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dashboard/webapp/vite.config.ts +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/db.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/deps.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/drive.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/events.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/filelock.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/freshness.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/gates.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/goal.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/health/context.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/health/models.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/health/render.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/health/units.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/hooks.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/interactive.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/models.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/network.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/notify.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/openapi.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/parentage.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/plans.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/progress.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/release_window.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/reports.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/review.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/smoke.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/split_work.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/state.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/test_author.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/test_report.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/usage.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/install-agent.sh +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/pyproject.toml +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/setup.cfg +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/__init__.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/acceptance/ms-33/audit_1039.rs +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/acceptance/ms-33/contract.md +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/acceptance/ms-33/manifest.yml +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/acceptance/ms-38/contract.md +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/acceptance/ms-38/manifest.yml +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/conftest.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_config.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_db.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_events.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_init.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_models.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_network.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_no_direct_gh_calls.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_review.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_session.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_split.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_state.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tui/Cargo.lock +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tui/Cargo.toml +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tui/cargo-config-local-quadraui.toml.example +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tui/src/app/audit.rs +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tui/src/app/chat.rs +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tui/src/app/data.rs +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tui/src/app/dialogs.rs +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tui/src/app/drive.rs +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tui/src/app/drive_queue.rs +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tui/src/app/escalation.rs +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tui/src/app/events.rs +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tui/src/app/fixtures.rs +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tui/src/app/fleet_health.rs +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tui/src/app/fleet_sessions.rs +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tui/src/app/fleet_terminals.rs +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tui/src/app/format.rs +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tui/src/app/milestone_dag.rs +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tui/src/app/mod.rs +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tui/src/app/msv.rs +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tui/src/app/pipeline.rs +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tui/src/app/plans.rs +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tui/src/app/render.rs +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tui/src/app/reports.rs +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tui/src/app/sessions.rs +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tui/src/app/settings_ui.rs +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tui/src/app/sidebar.rs +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tui/src/app/terminal.rs +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tui/src/app/tests.rs +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tui/src/app/types.rs +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tui/src/app/workspace.rs +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tui/src/bin/gtk.rs +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tui/src/commands.rs +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tui/src/lib.rs +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tui/src/main.rs +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tui/src/settings.rs +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tui/tests/acceptance.rs +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tui/tests/cli.rs +0 -0
- {code_coordinator-0.5.81 → code_coordinator-0.5.82}/tui/tests/fixtures/board_sample.json +0 -0
|
@@ -42,13 +42,29 @@ bootstrap only runs where `core.hooksPath` is set: `git config core.hooksPath
|
|
|
42
42
|
rebase/merge/cherry-pick (so the merge agent's proactive rebase never rebuilds),
|
|
43
43
|
nothing fires at all for `git reset --hard`, every failure path is a silent
|
|
44
44
|
`exit 0` behind a detached 600s-timeout background process, concurrent triggers
|
|
45
|
-
coalesce, and their `[ ! -f graphify-out/graph.json ]` guard is
|
|
46
|
-
|
|
45
|
+
coalesce, and their `[ ! -f graphify-out/graph.json ]` guard is an off-switch
|
|
46
|
+
once the graph is purged. Treat the hooks as an optimization and check
|
|
47
47
|
freshness instead — `GRAPH_REPORT.md` records its source commit, and
|
|
48
48
|
**`coord diagnose --graph`** compares that to HEAD for every local checkout (and
|
|
49
49
|
flags an unset `core.hooksPath`). If it reports STALE, `graphify update .` in that
|
|
50
50
|
checkout.
|
|
51
51
|
|
|
52
|
+
**It mostly heals itself now (#1729, #2237).** Each agent's health tick rebuilds
|
|
53
|
+
a checkout whose graph is stale *or absent* — so `rm -rf graphify-out/` is no
|
|
54
|
+
longer permanent — subject to four guards: idle machines only, base checkouts
|
|
55
|
+
only (never a linked worktree), once per HEAD (a build that cannot succeed is
|
|
56
|
+
never a retry loop), and never `--force`. What it cannot do is anything
|
|
57
|
+
versioned: `.githooks/` are tracked files, so porting them to a repo is a PR
|
|
58
|
+
against that repo.
|
|
59
|
+
|
|
60
|
+
**`coord repo doctor <repo>`** reports graph readiness **per machine** (folded
|
|
61
|
+
from each agent's `/health`, no extra round trip) — the operator's laptop is
|
|
62
|
+
usually not where the workers run. `--fix` performs the machine-local half
|
|
63
|
+
(`graphify update .` where absent, `core.hooksPath` where unset) on every
|
|
64
|
+
machine that clones the repo; it is idempotent, never writes a tracked file,
|
|
65
|
+
and refuses on a repo whose `.githooks/` were never ported. A repo with no
|
|
66
|
+
graph on *any* machine that runs workers is CRIT and fails the gate.
|
|
67
|
+
|
|
52
68
|
Setting this up on a new machine: [`docs/GRAPHIFY_SETUP.md`](docs/GRAPHIFY_SETUP.md).
|
|
53
69
|
|
|
54
70
|
## Architecture
|
|
@@ -155,7 +171,7 @@ One line each — the reasoning behind them is in
|
|
|
155
171
|
- **`coordinator.yml` is the single source of truth** for repo topology, machine capabilities, dependencies, concurrency limits, review settings, smoke-test rules, and the pipeline gate order (`pipeline.default_gates`). It lives in `~/.coord/`, **not** the repo checkout.
|
|
156
172
|
- **User approves everything.** `coord plan` proposes, the user reviews, `coord approve` dispatches. No autonomous dispatch.
|
|
157
173
|
- **Claim detection prevents duplicate work.** Before dispatching, the coordinator checks the board for active assignments and the remote for `issue-{N}-*` branches.
|
|
158
|
-
- **Conflict rules are inferred, not configured
|
|
174
|
+
- **Conflict rules are inferred, not configured** — and only on the `coord plan` path. Overlap avoidance is a line in the planning brain's *prompt*, not a mechanism; the drive queue bypasses the brain entirely, so unattended work gets no file-overlap check. There is no `file_groups`/`exclusive_files` config.
|
|
159
175
|
- **Adversarial reviews are rule-enforcing, not rubber-stamping.** On worker completion a fresh `claude -p` session on a *different* machine reviews the PR diff against this file and the review checklist, with zero shared context with the worker — that's the whole point.
|
|
160
176
|
- **The pipeline order is `Work → Test → Review → Merge`.** Test precedes Review; the headless auto-loop holds review dispatch until there is a `passed`/`skipped` test verdict.
|
|
161
177
|
- **Merge is gated on CI checks (#240).** `coord merge` refuses when a check failed or is still running — and a PR with *zero* reported checks is not automatically clear either (#1904).
|
|
@@ -311,6 +311,7 @@ coord/health/checks/fleet_deploy_lanes.py
|
|
|
311
311
|
coord/health/checks/fleet_phantom.py
|
|
312
312
|
coord/health/checks/fleet_unit_drift.py
|
|
313
313
|
coord/health/checks/graph.py
|
|
314
|
+
coord/health/checks/graphify_cli.py
|
|
314
315
|
coord/health/checks/plan_usage.py
|
|
315
316
|
coord/health/checks/repo_state.py
|
|
316
317
|
coord/health/checks/spawned_coord.py
|
|
@@ -577,6 +578,7 @@ tests/test_generated_types_fixture.py
|
|
|
577
578
|
tests/test_github_ops.py
|
|
578
579
|
tests/test_goal.py
|
|
579
580
|
tests/test_graph_health.py
|
|
581
|
+
tests/test_graph_selfheal_absent_2237.py
|
|
580
582
|
tests/test_handoff.py
|
|
581
583
|
tests/test_health_checks.py
|
|
582
584
|
tests/test_health_cli.py
|
|
@@ -673,6 +675,7 @@ tests/test_release_window.py
|
|
|
673
675
|
tests/test_remote_auto_prune.py
|
|
674
676
|
tests/test_remote_interactive_reaper.py
|
|
675
677
|
tests/test_repo_edit_2220.py
|
|
678
|
+
tests/test_repo_graph_fleet_2237.py
|
|
676
679
|
tests/test_repo_onboard_2220.py
|
|
677
680
|
tests/test_report_result_push.py
|
|
678
681
|
tests/test_reports.py
|
{code_coordinator-0.5.81 → code_coordinator-0.5.82}/code_coordinator.egg-info/scm_file_list.json
RENAMED
|
@@ -225,6 +225,7 @@
|
|
|
225
225
|
"coord/health/checks/fleet_phantom.py",
|
|
226
226
|
"coord/health/checks/fleet_unit_drift.py",
|
|
227
227
|
"coord/health/checks/graph.py",
|
|
228
|
+
"coord/health/checks/graphify_cli.py",
|
|
228
229
|
"coord/health/checks/plan_usage.py",
|
|
229
230
|
"coord/health/checks/repo_state.py",
|
|
230
231
|
"coord/health/checks/spawned_coord.py",
|
|
@@ -607,6 +608,7 @@
|
|
|
607
608
|
"tests/test_github_ops.py",
|
|
608
609
|
"tests/test_goal.py",
|
|
609
610
|
"tests/test_graph_health.py",
|
|
611
|
+
"tests/test_graph_selfheal_absent_2237.py",
|
|
610
612
|
"tests/test_handoff.py",
|
|
611
613
|
"tests/test_health_checks.py",
|
|
612
614
|
"tests/test_health_cli.py",
|
|
@@ -703,6 +705,7 @@
|
|
|
703
705
|
"tests/test_remote_auto_prune.py",
|
|
704
706
|
"tests/test_remote_interactive_reaper.py",
|
|
705
707
|
"tests/test_repo_edit_2220.py",
|
|
708
|
+
"tests/test_repo_graph_fleet_2237.py",
|
|
706
709
|
"tests/test_repo_onboard_2220.py",
|
|
707
710
|
"tests/test_report_result_push.py",
|
|
708
711
|
"tests/test_reports.py",
|
|
@@ -715,36 +715,20 @@ def _is_linked_worktree(repo_path: Path) -> bool:
|
|
|
715
715
|
def _graphify_update(repo_path: Path, *, timeout: float = 600.0) -> tuple[bool, str]:
|
|
716
716
|
"""Run ``graphify update .`` in *repo_path* (#1729, H-6's self-heal).
|
|
717
717
|
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
718
|
+
Thin delegate to :func:`coord.graph_health.run_graphify_update` (#2237),
|
|
719
|
+
which is the single place that decides what command coord shells out to
|
|
720
|
+
and with which flags — ``coord repo doctor --fix`` repairs checkouts on
|
|
721
|
+
every machine through the same function, and two copies of "the command
|
|
722
|
+
graphify's hooks run, never ``--force``" is exactly the split-brain that
|
|
723
|
+
would let one of them quietly acquire the flag that caused the
|
|
724
|
+
2026-08-02 incident.
|
|
725
|
+
|
|
726
|
+
Kept as a module-level name here because it is the seam the self-heal
|
|
727
|
+
tests patch. Returns ``(ok, detail)``.
|
|
728
728
|
"""
|
|
729
|
-
|
|
730
|
-
result = subprocess.run(
|
|
731
|
-
["graphify", "update", "."],
|
|
732
|
-
cwd=str(repo_path),
|
|
733
|
-
capture_output=True,
|
|
734
|
-
text=True,
|
|
735
|
-
timeout=timeout,
|
|
736
|
-
)
|
|
737
|
-
except FileNotFoundError:
|
|
738
|
-
return False, "graphify: command not found on this machine's PATH"
|
|
739
|
-
except subprocess.TimeoutExpired:
|
|
740
|
-
return False, f"graphify update . timed out after {timeout:.0f}s"
|
|
741
|
-
except OSError as exc:
|
|
742
|
-
return False, f"graphify update . failed to start: {exc}"
|
|
729
|
+
from coord.graph_health import run_graphify_update # noqa: PLC0415
|
|
743
730
|
|
|
744
|
-
|
|
745
|
-
reason = (result.stderr or result.stdout or "").strip()
|
|
746
|
-
return False, reason or f"graphify update . exited {result.returncode}"
|
|
747
|
-
return True, (result.stdout or "").strip()
|
|
731
|
+
return run_graphify_update(repo_path, timeout=timeout)
|
|
748
732
|
|
|
749
733
|
|
|
750
734
|
# #2212: count how many Bash commands in a worker's leg invoked `graphify` —
|
|
@@ -4151,6 +4135,21 @@ class AgentServer:
|
|
|
4151
4135
|
# already follows.
|
|
4152
4136
|
self._graph_rebuild_in_progress: set[str] = set()
|
|
4153
4137
|
|
|
4138
|
+
# #2237 item 7: guard 1 (the idle-gate) skips the whole self-heal
|
|
4139
|
+
# pass whenever this machine has a RUNNING assignment. Sensible —
|
|
4140
|
+
# a rebuild during a worker's leg fights it for CPU — but it means
|
|
4141
|
+
# the BUSIEST machine in the fleet gets the FEWEST heal windows,
|
|
4142
|
+
# which is the opposite of where drift accumulates. Nothing recorded
|
|
4143
|
+
# that, so "this machine never gets an idle window" was
|
|
4144
|
+
# indistinguishable from "this machine never needed a heal".
|
|
4145
|
+
# Measure before changing the guard: these two counters ride
|
|
4146
|
+
# /health's `graph_self_heal` block so the ratio is observable, and
|
|
4147
|
+
# only if it turns out to be common does the guard need replacing
|
|
4148
|
+
# with a heal window.
|
|
4149
|
+
self._graph_heal_skipped_active: int = 0
|
|
4150
|
+
self._graph_heal_last_skip_at: float | None = None
|
|
4151
|
+
self._graph_heal_passes: int = 0
|
|
4152
|
+
|
|
4154
4153
|
self.state_dir.mkdir(parents=True, exist_ok=True)
|
|
4155
4154
|
self.log_dir.mkdir(parents=True, exist_ok=True)
|
|
4156
4155
|
self._load_state()
|
|
@@ -4224,6 +4223,19 @@ class AgentServer:
|
|
|
4224
4223
|
# block (`_cached_local_health`'s own try/except) rather than
|
|
4225
4224
|
# omitting the key, so an old/new client can always find it.
|
|
4226
4225
|
"health": self._cached_local_health(),
|
|
4226
|
+
# #2237 item 7: how often the graph self-heal pass has actually
|
|
4227
|
+
# run on this machine, and how often guard 1 (the idle-gate)
|
|
4228
|
+
# turned it away because an assignment was RUNNING. The busiest
|
|
4229
|
+
# host in the fleet is the one most likely to drift AND the least
|
|
4230
|
+
# likely to be idle, so "never healed" and "never needed healing"
|
|
4231
|
+
# were indistinguishable until this. Cheap, in-memory, resets on
|
|
4232
|
+
# agent restart — it exists to answer "is the idle-gate starving
|
|
4233
|
+
# this machine", not to be a durable metric.
|
|
4234
|
+
"graph_self_heal": {
|
|
4235
|
+
"passes": self._graph_heal_passes,
|
|
4236
|
+
"skipped_active": self._graph_heal_skipped_active,
|
|
4237
|
+
"last_skip_at": self._graph_heal_last_skip_at,
|
|
4238
|
+
},
|
|
4227
4239
|
}
|
|
4228
4240
|
|
|
4229
4241
|
def _cached_local_health(self) -> dict:
|
|
@@ -4288,6 +4300,19 @@ class AgentServer:
|
|
|
4288
4300
|
"""React to the ``graph`` check's STATE verdict instead of chasing
|
|
4289
4301
|
the git events that produced it (#1729, H-6).
|
|
4290
4302
|
|
|
4303
|
+
Covers a **missing** graph as well as a stale one (#2237 item 5).
|
|
4304
|
+
Ongoing drift was already handled here; absence was not, because
|
|
4305
|
+
``graph_status`` returns early for a checkout with no
|
|
4306
|
+
``graphify-out/graph.json`` and never computes ``stale`` — so this
|
|
4307
|
+
pass skipped it, and so did the graphify hooks' own
|
|
4308
|
+
``[ ! -f graphify-out/graph.json ] && exit 0``. Two independent
|
|
4309
|
+
mechanisms declining to rebuild a graph that is not there made a
|
|
4310
|
+
single ``rm -rf graphify-out/`` (or a fresh clone on a machine that
|
|
4311
|
+
never had one) permanent until a human intervened. The guards below
|
|
4312
|
+
are unchanged and cover the absent case as-is — in particular guard
|
|
4313
|
+
3, which is what stops a repo where ``graphify update .`` genuinely
|
|
4314
|
+
cannot succeed from retrying every poll forever.
|
|
4315
|
+
|
|
4291
4316
|
The git hooks (`.githooks/`) are event-driven and structurally
|
|
4292
4317
|
cannot cover every ref-moving operation — rebase/merge/cherry-pick
|
|
4293
4318
|
`exit 0`, `git reset --hard` fires no hook at all, and every hook
|
|
@@ -4304,8 +4329,13 @@ class AgentServer:
|
|
|
4304
4329
|
1. **Idle-gate.** Only when this machine has no RUNNING assignment.
|
|
4305
4330
|
A rebuild is hundreds of files across many workers; running it
|
|
4306
4331
|
while a worker is mid-build steals the CPU that worker was
|
|
4307
|
-
dispatched for.
|
|
4308
|
-
|
|
4332
|
+
dispatched for. Every skip is counted
|
|
4333
|
+
(`_graph_heal_skipped_active`, surfaced as /health's
|
|
4334
|
+
`graph_self_heal` block) because the guard's cost lands hardest
|
|
4335
|
+
on the busiest machine — the one most likely to drift — and
|
|
4336
|
+
#2237 item 7 asks for that to be measured before the guard is
|
|
4337
|
+
traded for a heal window. This reads `self._assignments` under a
|
|
4338
|
+
brief lock and releases it before the (possibly slow) rebuild runs —
|
|
4309
4339
|
load-bearing for guard-adjacent requirement #1625 decision 3:
|
|
4310
4340
|
health must stay advisory, so a dispatch landing mid-rebuild
|
|
4311
4341
|
must never be delayed by it (see `_graphify_update`, called
|
|
@@ -4360,13 +4390,32 @@ class AgentServer:
|
|
|
4360
4390
|
with self._lock:
|
|
4361
4391
|
active = sum(1 for a in self._assignments.values() if a.status == RUNNING)
|
|
4362
4392
|
if active:
|
|
4393
|
+
# #2237 item 7: count the skip instead of returning silently, so
|
|
4394
|
+
# "the busiest machine never heals" is a number an operator can
|
|
4395
|
+
# read off /health rather than an inference from a graph that
|
|
4396
|
+
# stays stale.
|
|
4397
|
+
self._graph_heal_skipped_active += 1
|
|
4398
|
+
self._graph_heal_last_skip_at = time.time()
|
|
4363
4399
|
return
|
|
4400
|
+
self._graph_heal_passes += 1
|
|
4364
4401
|
|
|
4365
4402
|
for i, result in enumerate(report.results):
|
|
4366
4403
|
if result.check_id != "graph":
|
|
4367
4404
|
continue
|
|
4368
4405
|
values = result.values or {}
|
|
4369
|
-
|
|
4406
|
+
# #2237 item 5: ABSENT counts, not just stale. `graph_status`
|
|
4407
|
+
# returns early with `unknown_reason` when there is no
|
|
4408
|
+
# graphify-out/graph.json, so `stale` is never even computed for a
|
|
4409
|
+
# never-built (or `rm -rf`'d) checkout — which meant two
|
|
4410
|
+
# independent mechanisms declined to rebuild a graph that is not
|
|
4411
|
+
# there: this gate, and the graphify hooks' own
|
|
4412
|
+
# `[ ! -f graphify-out/graph.json ] && exit 0`. Between them, a
|
|
4413
|
+
# single `rm -rf graphify-out/` was permanent. Guard 3's
|
|
4414
|
+
# once-per-HEAD bookkeeping below keys on `head_sha`, which a
|
|
4415
|
+
# never-built checkout now carries (#2237 in `graph_health`), so a
|
|
4416
|
+
# repo where the build genuinely cannot succeed still gets exactly
|
|
4417
|
+
# one attempt per HEAD rather than one per poll.
|
|
4418
|
+
if not values.get("stale") and values.get("present", True):
|
|
4370
4419
|
continue
|
|
4371
4420
|
path_str = values.get("path")
|
|
4372
4421
|
if not path_str:
|
|
@@ -5321,6 +5370,51 @@ class AgentServer:
|
|
|
5321
5370
|
servable.append(repo_name)
|
|
5322
5371
|
return servable, degraded
|
|
5323
5372
|
|
|
5373
|
+
def fix_graph(self, repo_name: str, *, timeout: float = 600.0) -> dict:
|
|
5374
|
+
"""Repair the machine-local half of graphify for *repo_name* here
|
|
5375
|
+
(#2237 item 1 — the agent side of ``coord repo doctor --fix``).
|
|
5376
|
+
|
|
5377
|
+
The whole point of routing this through the agent is that the
|
|
5378
|
+
operator's laptop is *not* where the workers run: layer 5 was the one
|
|
5379
|
+
onboarding layer probed only on the machine running the command, so a
|
|
5380
|
+
repo with a graph on the operator's box and none on dellserver
|
|
5381
|
+
reported clean. Repairing it has the same shape — a fix that only
|
|
5382
|
+
ever repairs the local clone fixes the machine that needed it least.
|
|
5383
|
+
|
|
5384
|
+
Idempotent and never touches a tracked file:
|
|
5385
|
+
:func:`coord.graph_health.apply_local_graph_fix` sets
|
|
5386
|
+
``core.hooksPath`` and builds a missing graph, and refuses outright
|
|
5387
|
+
when the repo does not ship ``.githooks/post-checkout`` (a versioned
|
|
5388
|
+
change, which is a PR against that repo and must never be automated).
|
|
5389
|
+
|
|
5390
|
+
Returns the :meth:`~coord.graph_health.GraphFixResult.to_dict` shape
|
|
5391
|
+
plus ``repo``. An unknown repo, or one with no checkout on this
|
|
5392
|
+
machine, comes back as a ``refused`` result rather than an error —
|
|
5393
|
+
the caller is sweeping every machine and wants a per-machine answer,
|
|
5394
|
+
not an exception that hides the other machines' results.
|
|
5395
|
+
"""
|
|
5396
|
+
from coord.graph_health import GraphFixResult, apply_local_graph_fix # noqa: PLC0415
|
|
5397
|
+
|
|
5398
|
+
path_str = self.repo_paths.get(repo_name)
|
|
5399
|
+
if not path_str:
|
|
5400
|
+
result = GraphFixResult(
|
|
5401
|
+
repo_path="",
|
|
5402
|
+
refused=f"no repo_path configured for {repo_name!r} on this machine",
|
|
5403
|
+
)
|
|
5404
|
+
return {**result.to_dict(), "repo": repo_name}
|
|
5405
|
+
|
|
5406
|
+
repo_path = Path(path_str).expanduser()
|
|
5407
|
+
result = apply_local_graph_fix(repo_path, timeout=timeout)
|
|
5408
|
+
# A rebuild that succeeds here invalidates whatever this HEAD was
|
|
5409
|
+
# last recorded as failing (guard 3's bookkeeping) — otherwise the
|
|
5410
|
+
# self-heal would keep replaying a stale failure reason at an
|
|
5411
|
+
# operator who just fixed it by hand.
|
|
5412
|
+
if result.ok:
|
|
5413
|
+
with self._lock:
|
|
5414
|
+
self._graph_rebuild_failed.pop(str(repo_path), None)
|
|
5415
|
+
self._local_health_cache = None
|
|
5416
|
+
return {**result.to_dict(), "repo": repo_name}
|
|
5417
|
+
|
|
5324
5418
|
def list_repos(self) -> dict[str, dict]:
|
|
5325
5419
|
"""Return local HEAD / branch / dirty flag for each configured repo.
|
|
5326
5420
|
|
|
@@ -980,6 +980,48 @@ def _openapi_spec() -> dict:
|
|
|
980
980
|
"responses": {"200": {"description": "OK"}},
|
|
981
981
|
}
|
|
982
982
|
},
|
|
983
|
+
"/graph-fix": {
|
|
984
|
+
"post": {
|
|
985
|
+
"summary": (
|
|
986
|
+
"Build a missing graphify graph and set core.hooksPath for "
|
|
987
|
+
"one repo on this machine (#2237)"
|
|
988
|
+
),
|
|
989
|
+
"description": (
|
|
990
|
+
"The machine-local half of graphify onboarding only: "
|
|
991
|
+
"`graphify update .` when no graph exists here, plus "
|
|
992
|
+
"`git config core.hooksPath .githooks`. Idempotent. "
|
|
993
|
+
"Refuses (200, `refused` set) when the repo does not ship "
|
|
994
|
+
"`.githooks/post-checkout` — porting those is a versioned "
|
|
995
|
+
"change and is never automated."
|
|
996
|
+
),
|
|
997
|
+
"requestBody": {
|
|
998
|
+
"required": True,
|
|
999
|
+
"content": {
|
|
1000
|
+
"application/json": {
|
|
1001
|
+
"schema": {
|
|
1002
|
+
"type": "object",
|
|
1003
|
+
"required": ["repo"],
|
|
1004
|
+
"properties": {
|
|
1005
|
+
"repo": {"type": "string"},
|
|
1006
|
+
"timeout": {
|
|
1007
|
+
"type": "number",
|
|
1008
|
+
"description": (
|
|
1009
|
+
"seconds for `graphify update .`; a "
|
|
1010
|
+
"first build on a large repo is "
|
|
1011
|
+
"minutes, so this defaults to 600."
|
|
1012
|
+
),
|
|
1013
|
+
},
|
|
1014
|
+
},
|
|
1015
|
+
}
|
|
1016
|
+
}
|
|
1017
|
+
},
|
|
1018
|
+
},
|
|
1019
|
+
"responses": {
|
|
1020
|
+
"200": {"description": "OK (including a refusal)"},
|
|
1021
|
+
"400": {"description": "repo missing from the body"},
|
|
1022
|
+
},
|
|
1023
|
+
}
|
|
1024
|
+
},
|
|
983
1025
|
"/artifact/{repo}/{branch}": {
|
|
984
1026
|
"get": {
|
|
985
1027
|
"summary": "Manifest of stashed build artifacts for a (repo, branch) pair",
|
|
@@ -1874,6 +1916,40 @@ def build_app(
|
|
|
1874
1916
|
}
|
|
1875
1917
|
)
|
|
1876
1918
|
|
|
1919
|
+
async def graph_fix(request: Request) -> JSONResponse:
|
|
1920
|
+
"""Repair graphify's machine-local half for one repo on THIS machine
|
|
1921
|
+
(#2237) — ``coord repo doctor --fix`` fans this out to every machine
|
|
1922
|
+
that clones the repo.
|
|
1923
|
+
|
|
1924
|
+
Body: ``{"repo": "<name>", "timeout": 600}``. ``repo`` is required;
|
|
1925
|
+
anything else is ignored, so an older coordinator posting extra
|
|
1926
|
+
fields and a newer one omitting optional ones both work.
|
|
1927
|
+
|
|
1928
|
+
Idempotent by construction (``git config core.hooksPath`` +
|
|
1929
|
+
``graphify update .``), and it **refuses** rather than acting when
|
|
1930
|
+
the repo does not ship ``.githooks/post-checkout`` — see
|
|
1931
|
+
:func:`coord.graph_health.apply_local_graph_fix`. Never writes a
|
|
1932
|
+
tracked file, so this can never turn into "the tool silently
|
|
1933
|
+
committed hooks into my repo".
|
|
1934
|
+
|
|
1935
|
+
Runs off the event loop: a first build is minutes of AST work, and
|
|
1936
|
+
blocking the loop here would stall /health for the whole fleet.
|
|
1937
|
+
"""
|
|
1938
|
+
body: dict = {}
|
|
1939
|
+
try:
|
|
1940
|
+
body = await request.json()
|
|
1941
|
+
except Exception:
|
|
1942
|
+
pass
|
|
1943
|
+
repo = body.get("repo")
|
|
1944
|
+
if not isinstance(repo, str) or not repo:
|
|
1945
|
+
return JSONResponse({"error": "repo is required"}, status_code=400)
|
|
1946
|
+
try:
|
|
1947
|
+
timeout = float(body.get("timeout", 600.0))
|
|
1948
|
+
except (TypeError, ValueError):
|
|
1949
|
+
timeout = 600.0
|
|
1950
|
+
result = await asyncio.to_thread(server.fix_graph, repo, timeout=timeout)
|
|
1951
|
+
return JSONResponse(result)
|
|
1952
|
+
|
|
1877
1953
|
routes = [
|
|
1878
1954
|
Route("/health", health, methods=["GET"]),
|
|
1879
1955
|
Route("/status", status, methods=["GET"]),
|
|
@@ -1895,6 +1971,10 @@ def build_app(
|
|
|
1895
1971
|
Route("/rollback", rollback, methods=["POST"]),
|
|
1896
1972
|
Route("/restart", restart, methods=["POST"]),
|
|
1897
1973
|
Route("/worktree-clean", worktree_clean, methods=["POST"]),
|
|
1974
|
+
# #2237: `coord repo doctor --fix`'s per-machine leg — build a
|
|
1975
|
+
# missing graph and set core.hooksPath, on the machines that
|
|
1976
|
+
# actually run workers rather than only on the operator's laptop.
|
|
1977
|
+
Route("/graph-fix", graph_fix, methods=["POST"]),
|
|
1898
1978
|
# #305: artifact stash manifest (GET /artifact/<repo>/<branch>)
|
|
1899
1979
|
Route("/artifact/{repo}/{branch}", artifact_manifest, methods=["GET"]),
|
|
1900
1980
|
# #207: CPU + memory snapshot for TUI sparklines
|
|
@@ -293,9 +293,27 @@ def repo_add( # noqa: PLR0913 — one option per thing the command can set
|
|
|
293
293
|
"for this repo's paths, and (if it joins the oracle loop) "
|
|
294
294
|
"`acceptance.drivers`."
|
|
295
295
|
)
|
|
296
|
+
# #2237: layer 5 used to be one vague line here and nothing else — so
|
|
297
|
+
# every repo onboarded from this command started with no graph, and the
|
|
298
|
+
# only thing that would ever say so was a `repo doctor` nobody is obliged
|
|
299
|
+
# to run. Split into the two halves that have genuinely different owners:
|
|
300
|
+
# the versioned port (a PR against the repo, never automated) and the
|
|
301
|
+
# machine-local half (idempotent, and `--fix` does it on every machine).
|
|
296
302
|
click.echo(
|
|
297
|
-
" 7.
|
|
298
|
-
"
|
|
303
|
+
" 7. GRAPH, versioned half — port `.githooks/` (_lib.sh, "
|
|
304
|
+
"post-checkout, post-commit, post-merge) into the repo and commit "
|
|
305
|
+
"them. Tracked files, so one PR reaches every machine. Without them "
|
|
306
|
+
"worktrees get no linked graph and every worker falls back to grep "
|
|
307
|
+
"(docs/GRAPHIFY_SETUP.md)."
|
|
308
|
+
)
|
|
309
|
+
click.echo(
|
|
310
|
+
" 8. GRAPH, machine-local half — once the repo is cloned on each "
|
|
311
|
+
f"machine: `coord repo doctor {name} --fix` builds the graph "
|
|
312
|
+
"(`graphify update .`) and sets `core.hooksPath .githooks` on every "
|
|
313
|
+
"machine that runs workers. Idempotent; safe to re-run. Do it AFTER "
|
|
314
|
+
"step 7 — pointing core.hooksPath at a .githooks/ that does not "
|
|
315
|
+
"exist silently disables every hook in the checkout, so --fix refuses "
|
|
316
|
+
"until the hooks are ported."
|
|
299
317
|
)
|
|
300
318
|
click.echo("")
|
|
301
319
|
click.echo(f"Then: coord repo doctor {name}")
|
|
@@ -306,8 +324,10 @@ def repo_add( # noqa: PLR0913 — one option per thing the command can set
|
|
|
306
324
|
help=(
|
|
307
325
|
"Probe all five onboarding layers for a repo and report per-layer "
|
|
308
326
|
"status. Reads LIVE state — each agent's /health repo list, the labels "
|
|
309
|
-
"that exist on GitHub, whether any workflow triggers on pull_request
|
|
310
|
-
"
|
|
327
|
+
"that exist on GitHub, whether any workflow triggers on pull_request, "
|
|
328
|
+
"and (since #2237) each machine's graph readiness rather than only "
|
|
329
|
+
"this one's — not config. Exits non-zero on any CRIT so it can gate. "
|
|
330
|
+
"Use --fix to repair the machine-local half of the graph layer."
|
|
311
331
|
),
|
|
312
332
|
)
|
|
313
333
|
@click.argument("name")
|
|
@@ -324,12 +344,28 @@ def repo_add( # noqa: PLR0913 — one option per thing the command can set
|
|
|
324
344
|
"--verbose", "-v", is_flag=True, default=False,
|
|
325
345
|
help="Show passing checks too, not just the residue.",
|
|
326
346
|
)
|
|
327
|
-
|
|
347
|
+
@click.option(
|
|
348
|
+
"--fix", "do_fix", is_flag=True, default=False,
|
|
349
|
+
help=(
|
|
350
|
+
"Repair graphify's MACHINE-LOCAL half on every machine that clones "
|
|
351
|
+
"this repo: build a missing graph (`graphify update .`) and set "
|
|
352
|
+
"`core.hooksPath .githooks`. Idempotent, never touches a tracked "
|
|
353
|
+
"file, and refuses on a repo that has not ported `.githooks/` — that "
|
|
354
|
+
"port is a PR against the repo, reported here as remaining work."
|
|
355
|
+
),
|
|
356
|
+
)
|
|
357
|
+
@click.option(
|
|
358
|
+
"--fix-timeout", default=900.0, show_default=True, type=float,
|
|
359
|
+
help="Per-machine timeout for --fix (a first graph build is minutes).",
|
|
360
|
+
)
|
|
361
|
+
def repo_doctor( # noqa: PLR0913 — one option per thing the command can do
|
|
328
362
|
name: str,
|
|
329
363
|
config_path: Path,
|
|
330
364
|
timeout: float,
|
|
331
365
|
probe_github: bool, # noqa: FBT001
|
|
332
366
|
verbose: bool, # noqa: FBT001
|
|
367
|
+
do_fix: bool, # noqa: FBT001
|
|
368
|
+
fix_timeout: float,
|
|
333
369
|
) -> None:
|
|
334
370
|
from coord import repo_onboard # noqa: PLC0415
|
|
335
371
|
from coord.network import check_all # noqa: PLC0415
|
|
@@ -355,6 +391,14 @@ def repo_doctor(
|
|
|
355
391
|
machines = [m for m in cfg.machines if name in (m.repos or [])]
|
|
356
392
|
statuses = check_all(machines, timeout=timeout) if machines else []
|
|
357
393
|
|
|
394
|
+
if do_fix:
|
|
395
|
+
# Repair BEFORE reporting, so the report an operator reads is the
|
|
396
|
+
# state they are actually leaving behind — a --fix run that printed
|
|
397
|
+
# the pre-fix findings would be indistinguishable from one that did
|
|
398
|
+
# nothing.
|
|
399
|
+
_run_graph_fix(cfg, name, machines, statuses, timeout=fix_timeout)
|
|
400
|
+
statuses = check_all(machines, timeout=timeout) if machines else []
|
|
401
|
+
|
|
358
402
|
facts = repo_onboard.gather_facts(
|
|
359
403
|
cfg, name,
|
|
360
404
|
statuses=statuses,
|
|
@@ -366,3 +410,85 @@ def repo_doctor(
|
|
|
366
410
|
click.echo(line)
|
|
367
411
|
if not report.ok:
|
|
368
412
|
sys.exit(1)
|
|
413
|
+
|
|
414
|
+
|
|
415
|
+
def _run_graph_fix(cfg, name: str, machines, statuses, *, timeout: float) -> None:
|
|
416
|
+
"""``--fix``: graphify's machine-local half, on every machine (#2237).
|
|
417
|
+
|
|
418
|
+
Fans out to each machine's agent (``POST /graph-fix``) rather than
|
|
419
|
+
repairing the local clone, because the local clone is the one that
|
|
420
|
+
matters least: workers run on dellserver and precision, the operator runs
|
|
421
|
+
this on elitebook. A fixer that only ever fixed here would recreate
|
|
422
|
+
layer 5's original blind spot one level up.
|
|
423
|
+
|
|
424
|
+
The local clone is still repaired directly when this machine has one that
|
|
425
|
+
no agent covers — an operator's laptop is a legitimate place to want a
|
|
426
|
+
graph, it just isn't a place workers run.
|
|
427
|
+
|
|
428
|
+
Everything it does is idempotent and machine-local (``graphify update .``,
|
|
429
|
+
``git config core.hooksPath``); the versioned ``.githooks/`` port is
|
|
430
|
+
reported as remaining work by the report that follows, never performed.
|
|
431
|
+
"""
|
|
432
|
+
import httpx # noqa: PLC0415
|
|
433
|
+
from coord.network import AGENT_PORT # noqa: PLC0415
|
|
434
|
+
|
|
435
|
+
click.echo(f"--fix: repairing graphify's machine-local half for {name}")
|
|
436
|
+
online = {s.machine.name for s in statuses if s.is_online}
|
|
437
|
+
fixed_paths: set[str] = set()
|
|
438
|
+
|
|
439
|
+
for machine in machines:
|
|
440
|
+
if machine.name not in online:
|
|
441
|
+
click.echo(
|
|
442
|
+
f" ⚠ {machine.name}: skipped — agent not reachable, so nothing "
|
|
443
|
+
f"here could be repaired (it is NOT known to be fine)"
|
|
444
|
+
)
|
|
445
|
+
continue
|
|
446
|
+
try:
|
|
447
|
+
resp = httpx.post(
|
|
448
|
+
f"http://{machine.host}:{AGENT_PORT}/graph-fix",
|
|
449
|
+
json={"repo": name, "timeout": timeout},
|
|
450
|
+
timeout=timeout + 30.0,
|
|
451
|
+
)
|
|
452
|
+
resp.raise_for_status()
|
|
453
|
+
result = resp.json()
|
|
454
|
+
except Exception as exc: # noqa: BLE001 — one machine must not abort the sweep
|
|
455
|
+
click.echo(f" ✗ {machine.name}: /graph-fix failed — {exc}")
|
|
456
|
+
continue
|
|
457
|
+
for line in _format_fix_result(machine.name, result):
|
|
458
|
+
click.echo(line)
|
|
459
|
+
if result.get("repo_path"):
|
|
460
|
+
fixed_paths.add(str(Path(result["repo_path"]).expanduser()))
|
|
461
|
+
|
|
462
|
+
# The local clone, when it is not one of the checkouts just repaired.
|
|
463
|
+
from coord import repo_onboard # noqa: PLC0415
|
|
464
|
+
from coord.graph_health import apply_local_graph_fix # noqa: PLC0415
|
|
465
|
+
|
|
466
|
+
local = repo_onboard.local_clone_path(cfg, name)
|
|
467
|
+
if local is not None and str(local.expanduser()) not in fixed_paths:
|
|
468
|
+
result = apply_local_graph_fix(local, timeout=timeout).to_dict()
|
|
469
|
+
for line in _format_fix_result("this machine", result):
|
|
470
|
+
click.echo(line)
|
|
471
|
+
click.echo("")
|
|
472
|
+
|
|
473
|
+
|
|
474
|
+
def _format_fix_result(where: str, result: dict) -> list[str]:
|
|
475
|
+
"""Render one machine's ``/graph-fix`` result.
|
|
476
|
+
|
|
477
|
+
A refusal reads as a refusal, not a failure and emphatically not a
|
|
478
|
+
success: "no `.githooks/` in this repo" means the fixer deliberately did
|
|
479
|
+
nothing, and the operator's next move is a PR, not a re-run.
|
|
480
|
+
"""
|
|
481
|
+
if result.get("refused"):
|
|
482
|
+
return [f" ⊘ {where}: refused — {result['refused']}"]
|
|
483
|
+
lines: list[str] = []
|
|
484
|
+
for step in result.get("steps") or []:
|
|
485
|
+
if step.get("ok") and step.get("changed"):
|
|
486
|
+
mark = "✓"
|
|
487
|
+
elif step.get("ok"):
|
|
488
|
+
mark = "·" # already in the desired state — the idempotent no-op
|
|
489
|
+
else:
|
|
490
|
+
mark = "✗"
|
|
491
|
+
lines.append(f" {mark} {where}: {step.get('action')} — {step.get('detail')}")
|
|
492
|
+
if not lines:
|
|
493
|
+
lines.append(f" · {where}: nothing to do")
|
|
494
|
+
return lines
|
|
@@ -963,12 +963,13 @@ def _repo_onboarding_lines(cfg, statuses) -> list[tuple[bool, str]]:
|
|
|
963
963
|
two-thirds onboarded for days and the only thing that ever noticed was a
|
|
964
964
|
queue entry dying of it.
|
|
965
965
|
|
|
966
|
-
Runs with ``probe_github=False`` and no graph probe, so it costs
|
|
967
|
-
extra round trips — it re-reads the ``/health`` bodies this
|
|
968
|
-
already fetched. That is enough for the
|
|
969
|
-
#2219 agent/config repo skew
|
|
970
|
-
|
|
971
|
-
|
|
966
|
+
Runs with ``probe_github=False`` and no local-disk graph probe, so it costs
|
|
967
|
+
**zero** extra round trips — it re-reads the ``/health`` bodies this
|
|
968
|
+
command has already fetched. That is enough for the two findings that
|
|
969
|
+
actually bit: the #2219 agent/config repo skew, and (since #2237) a repo
|
|
970
|
+
with no graph on any machine that runs workers — both visible from
|
|
971
|
+
``/health`` alone. The GitHub and repo-contents layers need ``coord repo
|
|
972
|
+
doctor <name>``, which the footer below points at.
|
|
972
973
|
|
|
973
974
|
Mirrors :func:`_unit_drift_lines`/:func:`_release_lag_lines`: same
|
|
974
975
|
computation as the dedicated command (#2096's "two surfaces, one
|