code-coordinator 0.5.72__tar.gz → 0.5.74__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.72 → code_coordinator-0.5.74}/CLAUDE.md +2 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/PKG-INFO +1 -1
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/code_coordinator.egg-info/SOURCES.txt +7 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/code_coordinator.egg-info/scm_file_list.json +7 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/cli.py +5 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/commands/dispatch.py +98 -0
- code_coordinator-0.5.74/coord/commands/repo.py +368 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/commands/status.py +103 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/github_ops.py +82 -0
- code_coordinator-0.5.74/coord/repo_edit.py +211 -0
- code_coordinator-0.5.74/coord/repo_onboard.py +999 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/docs/AGENT_OPERATIONS.md +63 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/conftest.py +18 -0
- code_coordinator-0.5.74/tests/test_cli_assign_repo_drift_2219.py +240 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_doctor_config_mismatch_1712.py +100 -0
- code_coordinator-0.5.74/tests/test_cli_repo_2220.py +468 -0
- code_coordinator-0.5.74/tests/test_repo_edit_2220.py +225 -0
- code_coordinator-0.5.74/tests/test_repo_onboard_2220.py +520 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/.github/workflows/release-tui.yml +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/.gitignore +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/GOAL.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/LICENSE +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/MANIFEST.in +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/README.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/__init__.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/agent.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/audit.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/board_bool_guard.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/board_service.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/brain.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/claim.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/client.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/comments.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/config.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dao.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/.gitignore +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/components.json +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/dist/assets/Gallery-da3qNiIw.js +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/dist/assets/Terminal-skVFCxPU.js +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/dist/assets/index-DltfZR5f.js +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/dist/index.html +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/dist/sw.js +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/eslint.config.js +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/index.html +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/package-lock.json +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/package.json +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/playwright.config.ts +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/postcss.config.js +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/App.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/api/client.ts +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/api/generated.ts +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/index.css +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/main.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/test-setup.ts +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/tailwind.config.js +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/tsconfig.json +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/tsconfig.node.json +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dashboard/webapp/vite.config.ts +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/db.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/deps.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/drive.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/events.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/filelock.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/freshness.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/gates.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/goal.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/health/context.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/health/models.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/health/render.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/health/units.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/hooks.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/interactive.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/models.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/network.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/notify.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/openapi.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/parentage.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/plans.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/progress.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/release_window.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/reports.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/review.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/smoke.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/split_work.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/state.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/test_author.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/test_report.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/usage.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/install-agent.sh +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/pyproject.toml +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/setup.cfg +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/__init__.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/acceptance/ms-33/audit_1039.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/acceptance/ms-33/contract.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/acceptance/ms-33/manifest.yml +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/acceptance/ms-38/contract.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/acceptance/ms-38/manifest.yml +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_config.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_db.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_events.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_init.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_models.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_network.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_no_direct_gh_calls.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_review.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_session.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_split.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_state.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/Cargo.lock +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/Cargo.toml +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/cargo-config-local-quadraui.toml.example +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/src/app/audit.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/src/app/chat.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/src/app/data.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/src/app/dialogs.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/src/app/drive.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/src/app/drive_queue.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/src/app/escalation.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/src/app/events.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/src/app/fixtures.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/src/app/fleet_health.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/src/app/fleet_sessions.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/src/app/fleet_terminals.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/src/app/format.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/src/app/milestone_dag.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/src/app/mod.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/src/app/msv.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/src/app/pipeline.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/src/app/plans.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/src/app/render.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/src/app/reports.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/src/app/sessions.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/src/app/settings_ui.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/src/app/sidebar.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/src/app/terminal.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/src/app/tests.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/src/app/types.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/src/app/workspace.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/src/bin/gtk.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/src/commands.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/src/lib.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/src/main.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/src/settings.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/tests/acceptance.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/tests/cli.rs +0 -0
- {code_coordinator-0.5.72 → code_coordinator-0.5.74}/tui/tests/fixtures/board_sample.json +0 -0
|
@@ -84,6 +84,8 @@ coord retry|stop|resume <id> # Recovery; `coord done` ends th
|
|
|
84
84
|
```
|
|
85
85
|
Setup / diagnostics (discoverable via `--help`): `coord init`, `coord config`, `coord agent`, `coord serve`, `coord web`, `coord diagnose`, `coord sessions [--remote]`, `coord split`, `coord notifier` ([`docs/NOTIFIER.md`](docs/NOTIFIER.md)).
|
|
86
86
|
|
|
87
|
+
**Onboarding a repo is five layers, and every one fails silently (#2220).** `coord repo add <name> --github <owner/repo> --machines a,b,c` does the safely-automatable parts (reads the *real* default branch from GitHub, writes the entry into the coord-settings checkout, adds it to each machine, creates the `coord`/tier labels) and then prints the residue it deliberately did **not** do. `coord repo doctor <name>` is the part that matters: it probes all five layers from **live state, not config** — each agent's `/health` repo list, the clone on each machine, the labels that exist, whether any workflow triggers on `pull_request`, `CLAUDE.md`, graph freshness — and exits non-zero on any CRIT. `coord doctor` folds in the live-state layer for every repo, so a half-onboarded one shows up in the fleet report without anyone remembering to ask. See [`docs/AGENT_OPERATIONS.md`](docs/AGENT_OPERATIONS.md).
|
|
88
|
+
|
|
87
89
|
## Development
|
|
88
90
|
|
|
89
91
|
Always work in a virtualenv. Agent workers are spawned with the agent's own
|
|
@@ -111,6 +111,8 @@ coord/release_cordon.py
|
|
|
111
111
|
coord/release_propagate.py
|
|
112
112
|
coord/release_verify.py
|
|
113
113
|
coord/release_window.py
|
|
114
|
+
coord/repo_edit.py
|
|
115
|
+
coord/repo_onboard.py
|
|
114
116
|
coord/reports.py
|
|
115
117
|
coord/revalidate.py
|
|
116
118
|
coord/review.py
|
|
@@ -153,6 +155,7 @@ coord/commands/plan_followup.py
|
|
|
153
155
|
coord/commands/plans.py
|
|
154
156
|
coord/commands/portal.py
|
|
155
157
|
coord/commands/release.py
|
|
158
|
+
coord/commands/repo.py
|
|
156
159
|
coord/commands/report.py
|
|
157
160
|
coord/commands/review.py
|
|
158
161
|
coord/commands/scorecard.py
|
|
@@ -459,6 +462,7 @@ tests/test_cli_assign.py
|
|
|
459
462
|
tests/test_cli_assign_interactive_oracle_gate.py
|
|
460
463
|
tests/test_cli_assign_interactive_remote.py
|
|
461
464
|
tests/test_cli_assign_provider.py
|
|
465
|
+
tests/test_cli_assign_repo_drift_2219.py
|
|
462
466
|
tests/test_cli_audit.py
|
|
463
467
|
tests/test_cli_chat_continue.py
|
|
464
468
|
tests/test_cli_diagnose_config_provenance.py
|
|
@@ -496,6 +500,7 @@ tests/test_cli_refine_board.py
|
|
|
496
500
|
tests/test_cli_release_preflight.py
|
|
497
501
|
tests/test_cli_release_propagate.py
|
|
498
502
|
tests/test_cli_release_window.py
|
|
503
|
+
tests/test_cli_repo_2220.py
|
|
499
504
|
tests/test_cli_scorecard.py
|
|
500
505
|
tests/test_cli_set_review_findings.py
|
|
501
506
|
tests/test_cli_status_advisory_terminal.py
|
|
@@ -665,6 +670,8 @@ tests/test_release_verify.py
|
|
|
665
670
|
tests/test_release_window.py
|
|
666
671
|
tests/test_remote_auto_prune.py
|
|
667
672
|
tests/test_remote_interactive_reaper.py
|
|
673
|
+
tests/test_repo_edit_2220.py
|
|
674
|
+
tests/test_repo_onboard_2220.py
|
|
668
675
|
tests/test_report_result_push.py
|
|
669
676
|
tests/test_reports.py
|
|
670
677
|
tests/test_retry.py
|
{code_coordinator-0.5.72 → code_coordinator-0.5.74}/code_coordinator.egg-info/scm_file_list.json
RENAMED
|
@@ -64,6 +64,7 @@
|
|
|
64
64
|
"coord/commands/plans.py",
|
|
65
65
|
"coord/commands/portal.py",
|
|
66
66
|
"coord/commands/release.py",
|
|
67
|
+
"coord/commands/repo.py",
|
|
67
68
|
"coord/commands/report.py",
|
|
68
69
|
"coord/commands/review.py",
|
|
69
70
|
"coord/commands/scorecard.py",
|
|
@@ -289,6 +290,8 @@
|
|
|
289
290
|
"coord/release_propagate.py",
|
|
290
291
|
"coord/release_verify.py",
|
|
291
292
|
"coord/release_window.py",
|
|
293
|
+
"coord/repo_edit.py",
|
|
294
|
+
"coord/repo_onboard.py",
|
|
292
295
|
"coord/reports.py",
|
|
293
296
|
"coord/revalidate.py",
|
|
294
297
|
"coord/review.py",
|
|
@@ -489,6 +492,7 @@
|
|
|
489
492
|
"tests/test_cli_assign_interactive_oracle_gate.py",
|
|
490
493
|
"tests/test_cli_assign_interactive_remote.py",
|
|
491
494
|
"tests/test_cli_assign_provider.py",
|
|
495
|
+
"tests/test_cli_assign_repo_drift_2219.py",
|
|
492
496
|
"tests/test_cli_audit.py",
|
|
493
497
|
"tests/test_cli_chat_continue.py",
|
|
494
498
|
"tests/test_cli_diagnose_config_provenance.py",
|
|
@@ -526,6 +530,7 @@
|
|
|
526
530
|
"tests/test_cli_release_preflight.py",
|
|
527
531
|
"tests/test_cli_release_propagate.py",
|
|
528
532
|
"tests/test_cli_release_window.py",
|
|
533
|
+
"tests/test_cli_repo_2220.py",
|
|
529
534
|
"tests/test_cli_scorecard.py",
|
|
530
535
|
"tests/test_cli_set_review_findings.py",
|
|
531
536
|
"tests/test_cli_status_advisory_terminal.py",
|
|
@@ -695,6 +700,8 @@
|
|
|
695
700
|
"tests/test_release_window.py",
|
|
696
701
|
"tests/test_remote_auto_prune.py",
|
|
697
702
|
"tests/test_remote_interactive_reaper.py",
|
|
703
|
+
"tests/test_repo_edit_2220.py",
|
|
704
|
+
"tests/test_repo_onboard_2220.py",
|
|
698
705
|
"tests/test_report_result_push.py",
|
|
699
706
|
"tests/test_reports.py",
|
|
700
707
|
"tests/test_retry.py",
|
|
@@ -141,6 +141,9 @@ from coord.commands.lifecycle import done, housekeeping, notify, resume, serve,
|
|
|
141
141
|
from coord.commands.milestone import milestone_group
|
|
142
142
|
from coord.commands.plans import plans_cmd
|
|
143
143
|
from coord.commands.release import release_group, release_preflight
|
|
144
|
+
# #2220: `coord repo add` / `coord repo doctor` — onboarding a repo, and
|
|
145
|
+
# verifying it actually happened across all five layers.
|
|
146
|
+
from coord.commands.repo import repo_group
|
|
144
147
|
from coord.commands.plan_followup import (
|
|
145
148
|
_dispatch_followup, # noqa: F401 — re-exported for tests
|
|
146
149
|
approve_plan,
|
|
@@ -449,6 +452,8 @@ main.add_command(release_preflight)
|
|
|
449
452
|
# the flat command above), grouped so the pre-tag and post-release halves of
|
|
450
453
|
# the release story are discoverable together.
|
|
451
454
|
main.add_command(release_group)
|
|
455
|
+
# #2220: repo onboarding + its verifier.
|
|
456
|
+
main.add_command(repo_group)
|
|
452
457
|
main.add_command(tui_group)
|
|
453
458
|
|
|
454
459
|
|
|
@@ -9,6 +9,7 @@ import dataclasses
|
|
|
9
9
|
import socket
|
|
10
10
|
import sys
|
|
11
11
|
from pathlib import Path
|
|
12
|
+
from typing import TYPE_CHECKING
|
|
12
13
|
|
|
13
14
|
import click
|
|
14
15
|
import httpx
|
|
@@ -31,6 +32,9 @@ from coord.commands.dispatch_workers import (
|
|
|
31
32
|
_dispatch_troubleshoot,
|
|
32
33
|
)
|
|
33
34
|
|
|
35
|
+
if TYPE_CHECKING:
|
|
36
|
+
from coord.models import Machine
|
|
37
|
+
|
|
34
38
|
|
|
35
39
|
def _stdin_is_tty() -> bool:
|
|
36
40
|
"""Seam over ``sys.stdin.isatty()`` — see ``_require_interactive_tty``
|
|
@@ -89,6 +93,88 @@ def _require_interactive_tty(dry_run: bool) -> None:
|
|
|
89
93
|
)
|
|
90
94
|
|
|
91
95
|
|
|
96
|
+
def _repo_capability_refusal(
|
|
97
|
+
machine_obj: Machine, repo: str, *, timeout: float = 3.0
|
|
98
|
+
) -> str | None:
|
|
99
|
+
"""Cross-check *repo* against the target agent's LIVE ``/health`` repo
|
|
100
|
+
list, returning a refusal message when the two disagree — or ``None``
|
|
101
|
+
when they agree, the agent is unreachable, or the agent is config-free
|
|
102
|
+
(#2219).
|
|
103
|
+
|
|
104
|
+
``assign()``'s ``machine_obj.can_work_on(repo)`` check (just above this
|
|
105
|
+
call site) only ever reads ``coordinator.yml`` — which the operator can
|
|
106
|
+
edit any time — never the agent process actually running on that
|
|
107
|
+
machine. A repo added to config after the agent started stays invisible
|
|
108
|
+
to it until a full ``systemctl --user restart coord-agent`` (there is no
|
|
109
|
+
partial re-read today). Every pre-flight surface an operator would
|
|
110
|
+
check before spending a dispatch reads config too: ``coord config``,
|
|
111
|
+
``coord status``, and — worst of all — ``coord assign ... --dry-run``,
|
|
112
|
+
which is the documented way to sanity-check a dispatch before paying
|
|
113
|
+
for it. All three said this was fine while the live agent rejected it
|
|
114
|
+
outright, and a drive queue burned both retry attempts discovering that
|
|
115
|
+
by trial before landing terminally ``blocked`` (#2219). This is the
|
|
116
|
+
same ``/health`` read ``coord status``/``coord doctor`` already make
|
|
117
|
+
(``coord.network.check_machine``) — reused, not duplicated.
|
|
118
|
+
|
|
119
|
+
``/health``'s ``repos`` field is NOT what ``AgentServer.assign()``
|
|
120
|
+
itself gates on, though — it's ``AgentServer._servable_repos()``'s
|
|
121
|
+
FILTERED list (``coord/agent.py``, #1527), which drops any repo with no
|
|
122
|
+
``repo_paths`` entry or whose configured path is missing on disk.
|
|
123
|
+
``assign()``'s own gate (``coord/agent.py``: ``if self.repos and
|
|
124
|
+
spec.repo_name not in self.repos``) checks the UNFILTERED
|
|
125
|
+
``self.repos``. The two disagree exactly when a repo is configured on
|
|
126
|
+
that machine but degraded (``/health``'s ``degraded`` dict, #1527): in
|
|
127
|
+
that case ``assign()`` would NOT reject with "does not handle repo" —
|
|
128
|
+
it proceeds and fails later with the distinct "repo path does not
|
|
129
|
+
exist" — so this helper checks ``degraded`` FIRST and reports that
|
|
130
|
+
reason (with no restart advice, since restarting coord-agent cannot
|
|
131
|
+
repair a missing/misconfigured ``repo_paths`` entry) before ever
|
|
132
|
+
falling back to the "hasn't re-read config since *repo* was added"
|
|
133
|
+
story, which is only accurate when *repo* is absent from ``/health``
|
|
134
|
+
entirely — not merely degraded.
|
|
135
|
+
|
|
136
|
+
Deliberately narrow otherwise: only refuses when the agent is
|
|
137
|
+
reachable, ANSWERED with a real ``/health`` body, is not running
|
|
138
|
+
config-free (#1801 — a config-free agent's repos come from the dispatch
|
|
139
|
+
payload, not its own config, so an empty/mismatched list there is not a
|
|
140
|
+
capability gap), and either lists *repo* as degraded or published a
|
|
141
|
+
NON-empty repo list that plainly excludes it. Every other case
|
|
142
|
+
(offline, timeout, old agent with no ``repos`` key, empty list) falls
|
|
143
|
+
through to ``None`` — today's behavior, where the POST itself is left
|
|
144
|
+
to surface a real problem — so this never turns a transient network
|
|
145
|
+
hiccup into a new dispatch failure mode.
|
|
146
|
+
"""
|
|
147
|
+
from coord.network import check_machine
|
|
148
|
+
|
|
149
|
+
status = check_machine(machine_obj, timeout=timeout)
|
|
150
|
+
if not status.is_online or status.health is None:
|
|
151
|
+
return None
|
|
152
|
+
health = status.health
|
|
153
|
+
if health.get("config_free"):
|
|
154
|
+
return None
|
|
155
|
+
degraded = health.get("degraded") or {}
|
|
156
|
+
if repo in degraded:
|
|
157
|
+
return (
|
|
158
|
+
f"{machine_obj.name!r} lists {repo!r} in coordinator.yml, and "
|
|
159
|
+
f"the live agent agrees it's configured, but the repo is "
|
|
160
|
+
f"DEGRADED there, not just unrefreshed: {degraded[repo]} "
|
|
161
|
+
f"(#1527). This is not the #2219 stale-config case — "
|
|
162
|
+
f"restarting coord-agent will not fix a missing or "
|
|
163
|
+
f"misconfigured repo_paths entry. Repair repo_paths[{repo!r}] "
|
|
164
|
+
f"on {machine_obj.name!r} instead, then retry."
|
|
165
|
+
)
|
|
166
|
+
live_repos = health.get("repos")
|
|
167
|
+
if not live_repos or repo in live_repos:
|
|
168
|
+
return None
|
|
169
|
+
return (
|
|
170
|
+
f"{machine_obj.name!r} rejected the assignment: this agent does "
|
|
171
|
+
f"not handle repo {repo!r} (supported: {live_repos}) — "
|
|
172
|
+
f"coordinator.yml lists it, but the live agent process hasn't "
|
|
173
|
+
f"re-read its config since {repo!r} was added (#2219). Restart "
|
|
174
|
+
f"coord-agent on {machine_obj.name!r} to pick it up, then retry."
|
|
175
|
+
)
|
|
176
|
+
|
|
177
|
+
|
|
92
178
|
@click.command(help="Brain proposes assignments for idle machines.")
|
|
93
179
|
@_CONFIG_OPTION
|
|
94
180
|
@click.option("--dry-run", is_flag=True, help="Plan without saving proposals.")
|
|
@@ -951,6 +1037,18 @@ def assign(
|
|
|
951
1037
|
)
|
|
952
1038
|
sys.exit(2)
|
|
953
1039
|
|
|
1040
|
+
# #2219: config says this machine handles `repo` — but the LIVE agent
|
|
1041
|
+
# process may not (yet) agree, if `repo` was added to coordinator.yml
|
|
1042
|
+
# after that agent started. Refuse with the agent's real reason here,
|
|
1043
|
+
# before any claim/worktree/network work — including under --dry-run,
|
|
1044
|
+
# which is exactly the surface that used to green-light this. See
|
|
1045
|
+
# _repo_capability_refusal's docstring for the full rationale and what
|
|
1046
|
+
# it deliberately does NOT block on (offline/unreachable/config-free).
|
|
1047
|
+
capability_refusal = _repo_capability_refusal(machine_obj, repo)
|
|
1048
|
+
if capability_refusal is not None:
|
|
1049
|
+
click.echo(f"error: {capability_refusal}", err=True)
|
|
1050
|
+
sys.exit(2)
|
|
1051
|
+
|
|
954
1052
|
# Refuse direct assignment to a paused machine — `coord pause` exists
|
|
955
1053
|
# so the user can explicitly steer work away. If they meant to dispatch
|
|
956
1054
|
# anyway they should `coord unpause` first. #1862: also refuses inside
|
|
@@ -0,0 +1,368 @@
|
|
|
1
|
+
"""``coord repo add`` / ``coord repo doctor`` — onboarding a repo, and
|
|
2
|
+
checking that it actually happened (#2220).
|
|
3
|
+
|
|
4
|
+
Onboarding a repo is ~14 steps across five layers (config, three machines,
|
|
5
|
+
GitHub, the repo's own contents, the graph) with no command, no checklist and
|
|
6
|
+
no verifier — reconstructed from memory each time, and **every layer fails
|
|
7
|
+
silently**. ``stick-demo`` sat two-thirds onboarded until ``stick-demo#1`` died
|
|
8
|
+
of it, having burned both drive attempts, while ``coord config``, ``coord
|
|
9
|
+
status`` and ``coord assign --dry-run`` all reported the dispatch as fine.
|
|
10
|
+
|
|
11
|
+
Of the two commands here the **second is the one that matters**. A runbook is
|
|
12
|
+
the weakest available answer and this codebase already has the proof:
|
|
13
|
+
``docs/GRAPHIFY_SETUP.md`` is exactly that shape, and graphify has still fallen
|
|
14
|
+
by the wayside more than once because nothing checks it. What holds is a
|
|
15
|
+
checkable gate — ``coord diagnose --graph``, ``coord doctor``, ``coord release
|
|
16
|
+
verify`` all work because they answer *is it true right now*, not *did you
|
|
17
|
+
remember*.
|
|
18
|
+
|
|
19
|
+
``coord repo add`` therefore does only the mechanical, safely-automatable parts
|
|
20
|
+
and **prints the residue it deliberately did not do**, rather than pretending
|
|
21
|
+
completeness. The parts it skips (clone, agent restart, CLAUDE.md, CI workflow)
|
|
22
|
+
are the ones a wrong guess makes worse, and they are exactly what ``coord repo
|
|
23
|
+
doctor`` then verifies.
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
from __future__ import annotations
|
|
27
|
+
|
|
28
|
+
import sys
|
|
29
|
+
from pathlib import Path
|
|
30
|
+
|
|
31
|
+
import click
|
|
32
|
+
|
|
33
|
+
from coord.commands._common import _CONFIG_OPTION, _load_config
|
|
34
|
+
|
|
35
|
+
# Reuse the fleet's own definition of where the tracked config lives (#1779) —
|
|
36
|
+
# `~/src/coord-settings/coord/coordinator.yml`, NOT the `~/.coord/` symlink
|
|
37
|
+
# (#1832): edits must land in the checkout so they can be committed, reviewed
|
|
38
|
+
# and pulled onto the daemon host.
|
|
39
|
+
from coord.fleet_config_health import TRACKED_CONFIG_REL, default_settings_dir
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
@click.group("repo", help="Add a repo to the fleet, and verify it is actually onboarded.")
|
|
43
|
+
def repo_group() -> None:
|
|
44
|
+
"""Repo onboarding (#2220)."""
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def _resolve_write_target(explicit: Path | None) -> Path:
|
|
48
|
+
"""Where ``coord repo add`` writes.
|
|
49
|
+
|
|
50
|
+
Defaults to the coord-settings checkout's tracked file rather than
|
|
51
|
+
whatever ``resolve_config_path()`` returns, because the live
|
|
52
|
+
``~/.coord/coordinator.yml`` is a *symlink* into that checkout: writing
|
|
53
|
+
through the symlink produces an untracked, uncommitted change to the
|
|
54
|
+
fleet's governing config with nothing to review and nothing to pull
|
|
55
|
+
(#1779/#1832). Refuses rather than falling back when the checkout is
|
|
56
|
+
absent — a machine with no coord-settings checkout is deliberately not
|
|
57
|
+
allowed to edit the fleet's config.
|
|
58
|
+
"""
|
|
59
|
+
if explicit is not None:
|
|
60
|
+
return explicit
|
|
61
|
+
tracked = default_settings_dir() / TRACKED_CONFIG_REL
|
|
62
|
+
if not tracked.exists():
|
|
63
|
+
raise click.ClickException(
|
|
64
|
+
f"no coord-settings checkout at {default_settings_dir()} (expected "
|
|
65
|
+
f"{tracked}). `coord repo add` writes the TRACKED config so the "
|
|
66
|
+
"change can be committed, reviewed and pulled — it will not write "
|
|
67
|
+
"through the ~/.coord symlink (#1832). Clone coord-settings, set "
|
|
68
|
+
"$COORD_SETTINGS_DIR, or pass --config explicitly."
|
|
69
|
+
)
|
|
70
|
+
return tracked
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
@repo_group.command(
|
|
74
|
+
"add",
|
|
75
|
+
help=(
|
|
76
|
+
"Write a new repo's coordinator.yml entry into the coord-settings "
|
|
77
|
+
"checkout, add it to the named machines, create the `coord` and tier "
|
|
78
|
+
"labels — then print the residue it deliberately did NOT do."
|
|
79
|
+
),
|
|
80
|
+
)
|
|
81
|
+
@click.argument("name")
|
|
82
|
+
@click.option("--github", "github_slug", required=True, help="owner/repo on GitHub.")
|
|
83
|
+
@click.option(
|
|
84
|
+
"--machines", "machines_csv", default=None,
|
|
85
|
+
help="Comma-separated machine names that should serve this repo.",
|
|
86
|
+
)
|
|
87
|
+
@click.option(
|
|
88
|
+
"--repo-path", "repo_path_tmpl", default=None,
|
|
89
|
+
help=(
|
|
90
|
+
"Path to the clone on each machine. Default: ~/src/<name> — the fleet "
|
|
91
|
+
"convention, and the worker WORKTREE BASE, not a convenience checkout."
|
|
92
|
+
),
|
|
93
|
+
)
|
|
94
|
+
@click.option(
|
|
95
|
+
"--default-branch", "default_branch_override", default=None,
|
|
96
|
+
help=(
|
|
97
|
+
"Override the default branch instead of reading the real one from "
|
|
98
|
+
"GitHub. Use only when GitHub is unreachable — a default_branch that "
|
|
99
|
+
"disagrees with the repo's real default silently routes worker PRs to "
|
|
100
|
+
"the wrong base."
|
|
101
|
+
),
|
|
102
|
+
)
|
|
103
|
+
@click.option("--build-command", default=None, help="repos[].build_command.")
|
|
104
|
+
@click.option("--test-command", default=None, help="repos[].test_command.")
|
|
105
|
+
@click.option(
|
|
106
|
+
"--labels/--no-labels", "do_labels", default=True, show_default=True,
|
|
107
|
+
help="Create the `coord` and tier:small/tier:large labels on GitHub.",
|
|
108
|
+
)
|
|
109
|
+
@click.option(
|
|
110
|
+
"--dry-run", is_flag=True, default=False,
|
|
111
|
+
help="Print the edited config and the residue without writing anything.",
|
|
112
|
+
)
|
|
113
|
+
@click.option(
|
|
114
|
+
"--config", "config_path", type=click.Path(path_type=Path), default=None,
|
|
115
|
+
help="coordinator.yml to edit. Default: the coord-settings tracked file.",
|
|
116
|
+
)
|
|
117
|
+
def repo_add( # noqa: PLR0913 — one option per thing the command can set
|
|
118
|
+
name: str,
|
|
119
|
+
github_slug: str,
|
|
120
|
+
machines_csv: str | None,
|
|
121
|
+
repo_path_tmpl: str | None,
|
|
122
|
+
default_branch_override: str | None,
|
|
123
|
+
build_command: str | None,
|
|
124
|
+
test_command: str | None,
|
|
125
|
+
do_labels: bool, # noqa: FBT001
|
|
126
|
+
dry_run: bool, # noqa: FBT001
|
|
127
|
+
config_path: Path | None,
|
|
128
|
+
) -> None:
|
|
129
|
+
from coord.config import load as load_config # noqa: PLC0415
|
|
130
|
+
from coord.repo_edit import ( # noqa: PLC0415
|
|
131
|
+
RepoEditError,
|
|
132
|
+
add_repo_to_machine,
|
|
133
|
+
insert_repo_entry,
|
|
134
|
+
render_repo_entry,
|
|
135
|
+
)
|
|
136
|
+
from coord.repo_onboard import COORD_LABEL, TIER_LABELS # noqa: PLC0415
|
|
137
|
+
|
|
138
|
+
target = _resolve_write_target(config_path)
|
|
139
|
+
original = target.read_text(encoding="utf-8")
|
|
140
|
+
|
|
141
|
+
try:
|
|
142
|
+
cfg = load_config(target)
|
|
143
|
+
except Exception as exc: # noqa: BLE001
|
|
144
|
+
raise click.ClickException(f"{target} does not currently load: {exc}") from exc
|
|
145
|
+
|
|
146
|
+
if cfg.repo(name) is not None:
|
|
147
|
+
raise click.ClickException(
|
|
148
|
+
f"repo {name!r} already has a repos[] entry in {target} — use "
|
|
149
|
+
f"`coord repo doctor {name}` to find what is actually missing."
|
|
150
|
+
)
|
|
151
|
+
|
|
152
|
+
known = {m.name for m in cfg.machines}
|
|
153
|
+
machines = [m.strip() for m in (machines_csv or "").split(",") if m.strip()]
|
|
154
|
+
unknown = [m for m in machines if m not in known]
|
|
155
|
+
if unknown:
|
|
156
|
+
raise click.ClickException(
|
|
157
|
+
f"unknown machine(s) {unknown} — coordinator.yml has {sorted(known)}"
|
|
158
|
+
)
|
|
159
|
+
|
|
160
|
+
# ── The real default branch, read from GitHub rather than trusted ────
|
|
161
|
+
if default_branch_override:
|
|
162
|
+
default_branch = default_branch_override
|
|
163
|
+
branch_source = "--default-branch (NOT verified against GitHub)"
|
|
164
|
+
else:
|
|
165
|
+
from coord import github_ops # noqa: PLC0415
|
|
166
|
+
|
|
167
|
+
try:
|
|
168
|
+
default_branch = github_ops.get_repo_default_branch(github_slug)
|
|
169
|
+
except Exception as exc: # noqa: BLE001
|
|
170
|
+
raise click.ClickException(
|
|
171
|
+
f"could not read {github_slug}'s default branch from GitHub: "
|
|
172
|
+
f"{exc}. Fix `gh` auth, or pass --default-branch explicitly "
|
|
173
|
+
"(and know that an unverified value silently routes worker PRs "
|
|
174
|
+
"to the wrong base)."
|
|
175
|
+
) from exc
|
|
176
|
+
branch_source = f"read from GitHub ({github_slug})"
|
|
177
|
+
|
|
178
|
+
entry = render_repo_entry(
|
|
179
|
+
name, github_slug, default_branch,
|
|
180
|
+
build_command=build_command, test_command=test_command,
|
|
181
|
+
)
|
|
182
|
+
try:
|
|
183
|
+
updated = insert_repo_entry(original, entry)
|
|
184
|
+
path_tmpl = repo_path_tmpl or f"~/src/{name}"
|
|
185
|
+
for machine in machines:
|
|
186
|
+
updated = add_repo_to_machine(updated, machine, name, path_tmpl)
|
|
187
|
+
except RepoEditError as exc:
|
|
188
|
+
raise click.ClickException(str(exc)) from exc
|
|
189
|
+
|
|
190
|
+
# ── Seatbelt: the edit must produce a config that LOADS and contains
|
|
191
|
+
# what we think it contains. A line-level edit that "worked" but left a
|
|
192
|
+
# repo unroutable is worse than no command at all (#2220's whole thesis).
|
|
193
|
+
import tempfile # noqa: PLC0415
|
|
194
|
+
|
|
195
|
+
with tempfile.NamedTemporaryFile(
|
|
196
|
+
"w", suffix=".yml", delete=False, encoding="utf-8"
|
|
197
|
+
) as fh:
|
|
198
|
+
fh.write(updated)
|
|
199
|
+
probe_path = Path(fh.name)
|
|
200
|
+
try:
|
|
201
|
+
new_cfg = load_config(probe_path)
|
|
202
|
+
except Exception as exc: # noqa: BLE001
|
|
203
|
+
raise click.ClickException(
|
|
204
|
+
f"refusing to write: the edited config does not parse ({exc}). "
|
|
205
|
+
f"{target} is unchanged."
|
|
206
|
+
) from exc
|
|
207
|
+
finally:
|
|
208
|
+
probe_path.unlink(missing_ok=True)
|
|
209
|
+
|
|
210
|
+
if new_cfg.repo(name) is None:
|
|
211
|
+
raise click.ClickException(
|
|
212
|
+
f"refusing to write: the edit parsed but repo {name!r} is not in "
|
|
213
|
+
f"the result. {target} is unchanged."
|
|
214
|
+
)
|
|
215
|
+
landed = [m.name for m in new_cfg.machines if name in (m.repos or [])]
|
|
216
|
+
missing = [m for m in machines if m not in landed]
|
|
217
|
+
if missing:
|
|
218
|
+
raise click.ClickException(
|
|
219
|
+
f"refusing to write: the edit parsed but machine(s) {missing} do "
|
|
220
|
+
f"not list {name!r}. {target} is unchanged."
|
|
221
|
+
)
|
|
222
|
+
|
|
223
|
+
if dry_run:
|
|
224
|
+
click.echo(f"--dry-run: would write {target}")
|
|
225
|
+
click.echo(updated)
|
|
226
|
+
else:
|
|
227
|
+
target.write_text(updated, encoding="utf-8")
|
|
228
|
+
click.echo(f"✓ wrote repos[{name}] to {target}")
|
|
229
|
+
click.echo(f" default_branch: {default_branch} ({branch_source})")
|
|
230
|
+
if landed:
|
|
231
|
+
click.echo(f" machines: {', '.join(landed)}")
|
|
232
|
+
|
|
233
|
+
# ── Labels ───────────────────────────────────────────────────────────
|
|
234
|
+
created: list[str] = []
|
|
235
|
+
label_failures: list[str] = []
|
|
236
|
+
if do_labels and not dry_run:
|
|
237
|
+
from coord import github_ops # noqa: PLC0415
|
|
238
|
+
|
|
239
|
+
for label, colour, desc in (
|
|
240
|
+
(COORD_LABEL, "0e8a16", "Managed by the coord Pipeline"),
|
|
241
|
+
(TIER_LABELS[0], "c2e0c6", "Route to the small/cheap model"),
|
|
242
|
+
(TIER_LABELS[1], "5319e7", "Route to the large model"),
|
|
243
|
+
):
|
|
244
|
+
try:
|
|
245
|
+
github_ops.create_label(
|
|
246
|
+
github_slug, label, color=colour, description=desc
|
|
247
|
+
)
|
|
248
|
+
created.append(label)
|
|
249
|
+
except Exception as exc: # noqa: BLE001
|
|
250
|
+
label_failures.append(f"{label}: {exc}")
|
|
251
|
+
if created:
|
|
252
|
+
click.echo(f"✓ labels ensured on {github_slug}: {', '.join(created)}")
|
|
253
|
+
for failure in label_failures:
|
|
254
|
+
click.echo(f"⚠ label creation failed — {failure}", err=True)
|
|
255
|
+
|
|
256
|
+
# ── Residue: what this command deliberately did NOT do ───────────────
|
|
257
|
+
click.echo("")
|
|
258
|
+
click.echo("NOT DONE — these need a human, and `coord repo doctor` checks each:")
|
|
259
|
+
tracked = default_settings_dir() / TRACKED_CONFIG_REL
|
|
260
|
+
if target == tracked:
|
|
261
|
+
click.echo(
|
|
262
|
+
f" 1. commit + push in {default_settings_dir()}, then `git pull` on "
|
|
263
|
+
"the daemon host — the fleet runs the COMMITTED config"
|
|
264
|
+
)
|
|
265
|
+
else:
|
|
266
|
+
click.echo(
|
|
267
|
+
f" 1. commit + push {target} wherever it is tracked, then `git "
|
|
268
|
+
"pull` on the daemon host — the fleet runs the COMMITTED config"
|
|
269
|
+
)
|
|
270
|
+
for machine in machines or ["<each machine>"]:
|
|
271
|
+
click.echo(
|
|
272
|
+
f" 2. clone the repo to {repo_path_tmpl or f'~/src/{name}'} on "
|
|
273
|
+
f"{machine} — this is the worker WORKTREE BASE"
|
|
274
|
+
)
|
|
275
|
+
click.echo(
|
|
276
|
+
" 3. RESTART coord-agent on each of those machines. The repo list is "
|
|
277
|
+
"frozen at process start (#2219), so a running agent will refuse every "
|
|
278
|
+
"dispatch for this repo while config says it is supported. This cannot "
|
|
279
|
+
"run while headless workers are live."
|
|
280
|
+
)
|
|
281
|
+
click.echo(
|
|
282
|
+
" 4. add a CLAUDE.md to the repo — the Test agent auto-loads it and "
|
|
283
|
+
"the adversarial review prompt is assembled from it; without one, "
|
|
284
|
+
"reviews enforce nothing."
|
|
285
|
+
)
|
|
286
|
+
click.echo(
|
|
287
|
+
" 5. make sure at least one CI workflow triggers on `pull_request`. "
|
|
288
|
+
"If none does, expects_checks() reads 'CI exists' while zero checks "
|
|
289
|
+
"arrive and `checks_absent` blocks EVERY merge in this repo, forever."
|
|
290
|
+
)
|
|
291
|
+
click.echo(
|
|
292
|
+
" 6. set `test_command`/`ci_command`, `smoke_tests.capability_rules` "
|
|
293
|
+
"for this repo's paths, and (if it joins the oracle loop) "
|
|
294
|
+
"`acceptance.drivers`."
|
|
295
|
+
)
|
|
296
|
+
click.echo(
|
|
297
|
+
" 7. graphify build + `graphify hook install` + `core.hooksPath`, in "
|
|
298
|
+
"that order, per machine (docs/GRAPHIFY_SETUP.md)."
|
|
299
|
+
)
|
|
300
|
+
click.echo("")
|
|
301
|
+
click.echo(f"Then: coord repo doctor {name}")
|
|
302
|
+
|
|
303
|
+
|
|
304
|
+
@repo_group.command(
|
|
305
|
+
"doctor",
|
|
306
|
+
help=(
|
|
307
|
+
"Probe all five onboarding layers for a repo and report per-layer "
|
|
308
|
+
"status. Reads LIVE state — each agent's /health repo list, the labels "
|
|
309
|
+
"that exist on GitHub, whether any workflow triggers on pull_request — "
|
|
310
|
+
"not config. Exits non-zero on any CRIT so it can gate."
|
|
311
|
+
),
|
|
312
|
+
)
|
|
313
|
+
@click.argument("name")
|
|
314
|
+
@_CONFIG_OPTION
|
|
315
|
+
@click.option(
|
|
316
|
+
"--timeout", default=3.0, show_default=True, type=float,
|
|
317
|
+
help="Per-machine /health timeout (seconds).",
|
|
318
|
+
)
|
|
319
|
+
@click.option(
|
|
320
|
+
"--github/--no-github", "probe_github", default=True, show_default=True,
|
|
321
|
+
help="Probe GitHub (labels, workflows, CLAUDE.md). Off makes this offline.",
|
|
322
|
+
)
|
|
323
|
+
@click.option(
|
|
324
|
+
"--verbose", "-v", is_flag=True, default=False,
|
|
325
|
+
help="Show passing checks too, not just the residue.",
|
|
326
|
+
)
|
|
327
|
+
def repo_doctor(
|
|
328
|
+
name: str,
|
|
329
|
+
config_path: Path,
|
|
330
|
+
timeout: float,
|
|
331
|
+
probe_github: bool, # noqa: FBT001
|
|
332
|
+
verbose: bool, # noqa: FBT001
|
|
333
|
+
) -> None:
|
|
334
|
+
from coord import repo_onboard # noqa: PLC0415
|
|
335
|
+
from coord.network import check_all # noqa: PLC0415
|
|
336
|
+
|
|
337
|
+
cfg = _load_config(config_path)
|
|
338
|
+
|
|
339
|
+
repo = cfg.repo(name)
|
|
340
|
+
if repo is None:
|
|
341
|
+
known = [r.name for r in cfg.repos]
|
|
342
|
+
click.echo(
|
|
343
|
+
f"error: repo {name!r} is not in coordinator.yml (have: {known})",
|
|
344
|
+
err=True,
|
|
345
|
+
)
|
|
346
|
+
# Still render the report — "config.repo_missing" IS the finding, and
|
|
347
|
+
# a caller gating on this deserves the same structured output.
|
|
348
|
+
facts = repo_onboard.RepoFacts(name=name, configured=False)
|
|
349
|
+
for line in repo_onboard.format_report(
|
|
350
|
+
repo_onboard.evaluate(facts), verbose=verbose
|
|
351
|
+
):
|
|
352
|
+
click.echo(line)
|
|
353
|
+
sys.exit(1)
|
|
354
|
+
|
|
355
|
+
machines = [m for m in cfg.machines if name in (m.repos or [])]
|
|
356
|
+
statuses = check_all(machines, timeout=timeout) if machines else []
|
|
357
|
+
|
|
358
|
+
facts = repo_onboard.gather_facts(
|
|
359
|
+
cfg, name,
|
|
360
|
+
statuses=statuses,
|
|
361
|
+
probe_github=probe_github,
|
|
362
|
+
local_clone=repo_onboard.local_clone_path(cfg, name),
|
|
363
|
+
)
|
|
364
|
+
report = repo_onboard.evaluate(facts)
|
|
365
|
+
for line in repo_onboard.format_report(report, verbose=verbose):
|
|
366
|
+
click.echo(line)
|
|
367
|
+
if not report.ok:
|
|
368
|
+
sys.exit(1)
|