code-coordinator 0.5.80__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.80 → code_coordinator-0.5.82}/CLAUDE.md +19 -3
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/PKG-INFO +1 -1
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/code_coordinator.egg-info/SOURCES.txt +3 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/code_coordinator.egg-info/scm_file_list.json +3 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/agent.py +211 -40
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/agent_app.py +80 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/commands/repo.py +131 -5
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/commands/status.py +7 -6
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/graph_health.py +282 -9
- {code_coordinator-0.5.80 → 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.80 → code_coordinator-0.5.82}/coord/providers/opencode.py +13 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/repo_onboard.py +438 -10
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/worker_events.py +225 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/docs/ARCHITECTURE.md +32 -6
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/docs/GRAPHIFY_SETUP.md +74 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_agent.py +144 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_agent_graph_self_heal.py +11 -2
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_graph_health.py +37 -0
- code_coordinator-0.5.82/tests/test_graph_selfheal_absent_2237.py +212 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_health_checks.py +74 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_health_context.py +4 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_providers.py +41 -0
- code_coordinator-0.5.82/tests/test_repo_graph_fleet_2237.py +632 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_repo_onboard_2220.py +32 -1
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_worker_events.py +239 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/.github/workflows/release-tui.yml +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/.gitignore +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/GOAL.md +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/LICENSE +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/MANIFEST.in +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/README.md +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/__init__.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/audit.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/board_bool_guard.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/board_service.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/brain.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/claim.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/cli.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/client.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/comments.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/config.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dao.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/.gitignore +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/components.json +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/dist/assets/Gallery-da3qNiIw.js +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/dist/assets/Terminal-skVFCxPU.js +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/dist/assets/index-DltfZR5f.js +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/dist/index.html +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/dist/sw.js +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/eslint.config.js +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/index.html +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/package-lock.json +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/package.json +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/playwright.config.ts +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/postcss.config.js +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/App.tsx +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/api/client.ts +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/api/generated.ts +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/index.css +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/main.tsx +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/test-setup.ts +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/tailwind.config.js +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/tsconfig.json +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/tsconfig.node.json +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dashboard/webapp/vite.config.ts +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/db.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/deps.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/drive.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/events.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/filelock.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/freshness.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/gates.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/goal.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/health/context.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/health/models.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/health/render.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/health/units.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/hooks.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/interactive.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/models.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/network.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/notify.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/openapi.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/parentage.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/plans.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/progress.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/release_window.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/reports.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/review.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/smoke.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/split_work.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/state.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/test_author.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/test_report.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/usage.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/install-agent.sh +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/pyproject.toml +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/setup.cfg +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/__init__.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/acceptance/ms-33/audit_1039.rs +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/acceptance/ms-33/contract.md +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/acceptance/ms-33/manifest.yml +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/acceptance/ms-38/contract.md +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/acceptance/ms-38/manifest.yml +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/conftest.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_config.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_db.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_events.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_init.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_models.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_network.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_no_direct_gh_calls.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_review.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_session.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_split.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_state.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tui/Cargo.lock +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tui/Cargo.toml +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tui/cargo-config-local-quadraui.toml.example +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tui/src/app/audit.rs +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tui/src/app/chat.rs +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tui/src/app/data.rs +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tui/src/app/dialogs.rs +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tui/src/app/drive.rs +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tui/src/app/drive_queue.rs +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tui/src/app/escalation.rs +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tui/src/app/events.rs +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tui/src/app/fixtures.rs +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tui/src/app/fleet_health.rs +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tui/src/app/fleet_sessions.rs +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tui/src/app/fleet_terminals.rs +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tui/src/app/format.rs +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tui/src/app/milestone_dag.rs +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tui/src/app/mod.rs +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tui/src/app/msv.rs +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tui/src/app/pipeline.rs +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tui/src/app/plans.rs +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tui/src/app/render.rs +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tui/src/app/reports.rs +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tui/src/app/sessions.rs +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tui/src/app/settings_ui.rs +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tui/src/app/sidebar.rs +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tui/src/app/terminal.rs +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tui/src/app/tests.rs +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tui/src/app/types.rs +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tui/src/app/workspace.rs +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tui/src/bin/gtk.rs +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tui/src/commands.rs +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tui/src/lib.rs +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tui/src/main.rs +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tui/src/settings.rs +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tui/tests/acceptance.rs +0 -0
- {code_coordinator-0.5.80 → code_coordinator-0.5.82}/tui/tests/cli.rs +0 -0
- {code_coordinator-0.5.80 → 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.80 → 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` —
|
|
@@ -756,13 +740,11 @@ def _graphify_update(repo_path: Path, *, timeout: float = 600.0) -> tuple[bool,
|
|
|
756
740
|
# across N consecutive legs means the prompt instruction isn't landing.
|
|
757
741
|
# Deliberately NOT a DB column: this is a cheap, best-effort signal, not a
|
|
758
742
|
# gate anything blocks on, so it stays out of the Assignment schema/migrations.
|
|
759
|
-
#
|
|
760
|
-
#
|
|
761
|
-
#
|
|
762
|
-
#
|
|
763
|
-
#
|
|
764
|
-
# undercount to 0 (#2212 review).
|
|
765
|
-
_GRAPHIFY_INVOCATION_RE = re.compile(r"(?:^|[\n;&|]\s*)graphify(?:\s|$)")
|
|
743
|
+
# #2236: the pattern itself now lives in `coord.worker_events`, which grew a
|
|
744
|
+
# need for it when the summary parser started recording each query's OUTCOME
|
|
745
|
+
# and not just the count. Imported lazily (like every other
|
|
746
|
+
# `coord.worker_events` use in this module) rather than duplicated, so the two
|
|
747
|
+
# halves of the measurement can never drift apart on what counts as a query.
|
|
766
748
|
|
|
767
749
|
|
|
768
750
|
def _count_graphify_invocations(bash_commands: list[str]) -> int:
|
|
@@ -781,7 +763,68 @@ def _count_graphify_invocations(bash_commands: list[str]) -> int:
|
|
|
781
763
|
b"`` counts once, not twice. Treat the result as an "at least one graph
|
|
782
764
|
query this leg" signal, not an exact invocation tally.
|
|
783
765
|
"""
|
|
784
|
-
|
|
766
|
+
from coord.worker_events import is_graphify_command # noqa: PLC0415
|
|
767
|
+
|
|
768
|
+
return sum(1 for cmd in bash_commands if is_graphify_command(cmd))
|
|
769
|
+
|
|
770
|
+
|
|
771
|
+
def _worktree_graph_present(
|
|
772
|
+
worktree_path: str | None, repo_path_fallback: str | None = None
|
|
773
|
+
) -> bool:
|
|
774
|
+
"""True iff the worker's checkout has a **resolvable** ``graphify-out/graph.json``.
|
|
775
|
+
|
|
776
|
+
#2236: ``graphify_invocations=0`` is ambiguous on its own. Two of five
|
|
777
|
+
repos ship no graph and no ``.githooks/post-checkout``, so their worktrees
|
|
778
|
+
get an empty ``graphify-out/`` — and the worker prompt's own escape hatch
|
|
779
|
+
("no graph? skip straight to grep, silently") then fires correctly and
|
|
780
|
+
says nothing. Those workers were *obeying* the rule, not ignoring it, and
|
|
781
|
+
the counter cannot tell them apart from a worker that had a graph and
|
|
782
|
+
never asked. Recording this alongside the count is what disambiguates.
|
|
783
|
+
|
|
784
|
+
*repo_path_fallback* mirrors the branch-capture logic a few hundred
|
|
785
|
+
lines up in ``_reap`` ("for legacy assignments (no worktree_path) we
|
|
786
|
+
fall back to the main repo clone"): a legacy/non-worktree assignment has
|
|
787
|
+
no ``worktree_path`` at all, but its worker still ran against
|
|
788
|
+
``spec.repo_path`` directly, which may have a perfectly good graph.
|
|
789
|
+
Without this fallback, every legacy assignment logs ``graph_present=0``
|
|
790
|
+
regardless — conflating "no worktree" with "no graph".
|
|
791
|
+
|
|
792
|
+
``exists()`` follows symlinks deliberately: a linked worktree's
|
|
793
|
+
``graph.json`` is a symlink into the base checkout (see
|
|
794
|
+
``coord/graph_health.py``), and a *dangling* symlink is exactly as
|
|
795
|
+
graph-blind as no file at all — so both must read as absent.
|
|
796
|
+
"""
|
|
797
|
+
path = worktree_path or repo_path_fallback
|
|
798
|
+
if not path:
|
|
799
|
+
return False
|
|
800
|
+
try:
|
|
801
|
+
return (Path(path) / "graphify-out" / "graph.json").exists()
|
|
802
|
+
except OSError:
|
|
803
|
+
return False
|
|
804
|
+
|
|
805
|
+
|
|
806
|
+
def _format_graphify_query_lines(queries: Iterable[Any]) -> list[str]:
|
|
807
|
+
"""Render per-query ``# graphify_query …`` log lines (#2236).
|
|
808
|
+
|
|
809
|
+
``graphify_invocations=N`` counts attempts but cannot distinguish
|
|
810
|
+
"queried and got a useful answer" from "queried, got nothing, fell back to
|
|
811
|
+
grep" — and those imply opposite fixes (a habit problem the prompt can
|
|
812
|
+
move, vs. a graph coverage/quality problem no amount of prompting helps).
|
|
813
|
+
One line per query, ``grep``-able on ``outcome=``, with the command text
|
|
814
|
+
last because it is the only free-form field.
|
|
815
|
+
"""
|
|
816
|
+
lines: list[str] = []
|
|
817
|
+
for q in queries:
|
|
818
|
+
results = getattr(q, "results", None)
|
|
819
|
+
# `worker_events._truncate` already newline-strips and trims this
|
|
820
|
+
# when the `GraphifyQuery` entry is built — no need to redo it here.
|
|
821
|
+
command = str(getattr(q, "command", ""))
|
|
822
|
+
lines.append(
|
|
823
|
+
f"# graphify_query: outcome={getattr(q, 'outcome', 'unknown')} "
|
|
824
|
+
f"results={results if results is not None else '?'} "
|
|
825
|
+
f"cmd={command!r}\n"
|
|
826
|
+
)
|
|
827
|
+
return lines
|
|
785
828
|
|
|
786
829
|
|
|
787
830
|
def _infer_repo_github_slug(repo_path: str) -> str | None:
|
|
@@ -4092,6 +4135,21 @@ class AgentServer:
|
|
|
4092
4135
|
# already follows.
|
|
4093
4136
|
self._graph_rebuild_in_progress: set[str] = set()
|
|
4094
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
|
+
|
|
4095
4153
|
self.state_dir.mkdir(parents=True, exist_ok=True)
|
|
4096
4154
|
self.log_dir.mkdir(parents=True, exist_ok=True)
|
|
4097
4155
|
self._load_state()
|
|
@@ -4165,6 +4223,19 @@ class AgentServer:
|
|
|
4165
4223
|
# block (`_cached_local_health`'s own try/except) rather than
|
|
4166
4224
|
# omitting the key, so an old/new client can always find it.
|
|
4167
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
|
+
},
|
|
4168
4239
|
}
|
|
4169
4240
|
|
|
4170
4241
|
def _cached_local_health(self) -> dict:
|
|
@@ -4229,6 +4300,19 @@ class AgentServer:
|
|
|
4229
4300
|
"""React to the ``graph`` check's STATE verdict instead of chasing
|
|
4230
4301
|
the git events that produced it (#1729, H-6).
|
|
4231
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
|
+
|
|
4232
4316
|
The git hooks (`.githooks/`) are event-driven and structurally
|
|
4233
4317
|
cannot cover every ref-moving operation — rebase/merge/cherry-pick
|
|
4234
4318
|
`exit 0`, `git reset --hard` fires no hook at all, and every hook
|
|
@@ -4245,8 +4329,13 @@ class AgentServer:
|
|
|
4245
4329
|
1. **Idle-gate.** Only when this machine has no RUNNING assignment.
|
|
4246
4330
|
A rebuild is hundreds of files across many workers; running it
|
|
4247
4331
|
while a worker is mid-build steals the CPU that worker was
|
|
4248
|
-
dispatched for.
|
|
4249
|
-
|
|
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 —
|
|
4250
4339
|
load-bearing for guard-adjacent requirement #1625 decision 3:
|
|
4251
4340
|
health must stay advisory, so a dispatch landing mid-rebuild
|
|
4252
4341
|
must never be delayed by it (see `_graphify_update`, called
|
|
@@ -4301,13 +4390,32 @@ class AgentServer:
|
|
|
4301
4390
|
with self._lock:
|
|
4302
4391
|
active = sum(1 for a in self._assignments.values() if a.status == RUNNING)
|
|
4303
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()
|
|
4304
4399
|
return
|
|
4400
|
+
self._graph_heal_passes += 1
|
|
4305
4401
|
|
|
4306
4402
|
for i, result in enumerate(report.results):
|
|
4307
4403
|
if result.check_id != "graph":
|
|
4308
4404
|
continue
|
|
4309
4405
|
values = result.values or {}
|
|
4310
|
-
|
|
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):
|
|
4311
4419
|
continue
|
|
4312
4420
|
path_str = values.get("path")
|
|
4313
4421
|
if not path_str:
|
|
@@ -5262,6 +5370,51 @@ class AgentServer:
|
|
|
5262
5370
|
servable.append(repo_name)
|
|
5263
5371
|
return servable, degraded
|
|
5264
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
|
+
|
|
5265
5418
|
def list_repos(self) -> dict[str, dict]:
|
|
5266
5419
|
"""Return local HEAD / branch / dirty flag for each configured repo.
|
|
5267
5420
|
|
|
@@ -7511,9 +7664,27 @@ class AgentServer:
|
|
|
7511
7664
|
_graphify_invocations = _count_graphify_invocations(
|
|
7512
7665
|
_worker_summary.bash_commands if _worker_summary is not None else []
|
|
7513
7666
|
)
|
|
7667
|
+
# #2236: the count alone can't separate "didn't try" from
|
|
7668
|
+
# "couldn't try" (no graph in this worktree — the prompt's own
|
|
7669
|
+
# escape hatch fires silently) or from "tried, got nothing".
|
|
7670
|
+
# `graph_present` answers the first; the per-query lines below
|
|
7671
|
+
# answer the second. Read while the worktree still exists —
|
|
7672
|
+
# `_cleanup_worktree` runs further down this same function.
|
|
7673
|
+
_graph_present = _worktree_graph_present(
|
|
7674
|
+
getattr(assignment, "worktree_path", None) if assignment else None,
|
|
7675
|
+
getattr(assignment.spec, "repo_path", None) if assignment else None,
|
|
7676
|
+
)
|
|
7514
7677
|
reopen.write(
|
|
7515
7678
|
f"# reap: done (exit_code={exit_code} status={final_status} "
|
|
7516
|
-
f"graphify_invocations={_graphify_invocations}
|
|
7679
|
+
f"graphify_invocations={_graphify_invocations} "
|
|
7680
|
+
f"graph_present={int(_graph_present)})\n"
|
|
7681
|
+
)
|
|
7682
|
+
reopen.writelines(
|
|
7683
|
+
_format_graphify_query_lines(
|
|
7684
|
+
_worker_summary.graphify_queries
|
|
7685
|
+
if _worker_summary is not None
|
|
7686
|
+
else []
|
|
7687
|
+
)
|
|
7517
7688
|
)
|
|
7518
7689
|
except (OSError, AttributeError):
|
|
7519
7690
|
pass
|
|
@@ -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
|