code-coordinator 0.5.73__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.73 → code_coordinator-0.5.74}/CLAUDE.md +2 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/PKG-INFO +1 -1
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/code_coordinator.egg-info/SOURCES.txt +6 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/code_coordinator.egg-info/scm_file_list.json +6 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/cli.py +5 -0
- code_coordinator-0.5.74/coord/commands/repo.py +368 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/commands/status.py +56 -0
- {code_coordinator-0.5.73 → 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.73 → code_coordinator-0.5.74}/docs/AGENT_OPERATIONS.md +63 -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.73 → code_coordinator-0.5.74}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/.github/workflows/release-tui.yml +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/.gitignore +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/GOAL.md +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/LICENSE +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/MANIFEST.in +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/README.md +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/__init__.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/agent.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/audit.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/board_bool_guard.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/board_service.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/brain.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/claim.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/client.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/comments.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/config.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dao.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/.gitignore +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/components.json +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/dist/assets/Gallery-da3qNiIw.js +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/dist/assets/Terminal-skVFCxPU.js +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/dist/assets/index-DltfZR5f.js +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/dist/index.html +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/dist/sw.js +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/eslint.config.js +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/index.html +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/package-lock.json +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/package.json +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/playwright.config.ts +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/postcss.config.js +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/App.tsx +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/api/client.ts +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/api/generated.ts +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/index.css +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/main.tsx +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/test-setup.ts +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/tailwind.config.js +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/tsconfig.json +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/tsconfig.node.json +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dashboard/webapp/vite.config.ts +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/db.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/deps.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/drive.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/events.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/filelock.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/freshness.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/gates.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/goal.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/health/context.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/health/models.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/health/render.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/health/units.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/hooks.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/interactive.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/models.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/network.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/notify.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/openapi.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/parentage.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/plans.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/progress.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/release_window.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/reports.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/review.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/smoke.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/split_work.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/state.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/test_author.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/test_report.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/usage.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/install-agent.sh +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/pyproject.toml +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/setup.cfg +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/__init__.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/acceptance/ms-33/audit_1039.rs +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/acceptance/ms-33/contract.md +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/acceptance/ms-33/manifest.yml +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/acceptance/ms-38/contract.md +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/acceptance/ms-38/manifest.yml +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/conftest.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_config.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_db.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_events.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_init.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_models.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_network.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_no_direct_gh_calls.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_review.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_session.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_split.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_state.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tui/Cargo.lock +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tui/Cargo.toml +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tui/cargo-config-local-quadraui.toml.example +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tui/src/app/audit.rs +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tui/src/app/chat.rs +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tui/src/app/data.rs +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tui/src/app/dialogs.rs +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tui/src/app/drive.rs +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tui/src/app/drive_queue.rs +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tui/src/app/escalation.rs +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tui/src/app/events.rs +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tui/src/app/fixtures.rs +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tui/src/app/fleet_health.rs +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tui/src/app/fleet_sessions.rs +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tui/src/app/fleet_terminals.rs +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tui/src/app/format.rs +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tui/src/app/milestone_dag.rs +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tui/src/app/mod.rs +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tui/src/app/msv.rs +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tui/src/app/pipeline.rs +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tui/src/app/plans.rs +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tui/src/app/render.rs +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tui/src/app/reports.rs +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tui/src/app/sessions.rs +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tui/src/app/settings_ui.rs +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tui/src/app/sidebar.rs +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tui/src/app/terminal.rs +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tui/src/app/tests.rs +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tui/src/app/types.rs +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tui/src/app/workspace.rs +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tui/src/bin/gtk.rs +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tui/src/commands.rs +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tui/src/lib.rs +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tui/src/main.rs +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tui/src/settings.rs +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tui/tests/acceptance.rs +0 -0
- {code_coordinator-0.5.73 → code_coordinator-0.5.74}/tui/tests/cli.rs +0 -0
- {code_coordinator-0.5.73 → 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
|
|
@@ -497,6 +500,7 @@ tests/test_cli_refine_board.py
|
|
|
497
500
|
tests/test_cli_release_preflight.py
|
|
498
501
|
tests/test_cli_release_propagate.py
|
|
499
502
|
tests/test_cli_release_window.py
|
|
503
|
+
tests/test_cli_repo_2220.py
|
|
500
504
|
tests/test_cli_scorecard.py
|
|
501
505
|
tests/test_cli_set_review_findings.py
|
|
502
506
|
tests/test_cli_status_advisory_terminal.py
|
|
@@ -666,6 +670,8 @@ tests/test_release_verify.py
|
|
|
666
670
|
tests/test_release_window.py
|
|
667
671
|
tests/test_remote_auto_prune.py
|
|
668
672
|
tests/test_remote_interactive_reaper.py
|
|
673
|
+
tests/test_repo_edit_2220.py
|
|
674
|
+
tests/test_repo_onboard_2220.py
|
|
669
675
|
tests/test_report_result_push.py
|
|
670
676
|
tests/test_reports.py
|
|
671
677
|
tests/test_retry.py
|
{code_coordinator-0.5.73 → 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",
|
|
@@ -527,6 +530,7 @@
|
|
|
527
530
|
"tests/test_cli_release_preflight.py",
|
|
528
531
|
"tests/test_cli_release_propagate.py",
|
|
529
532
|
"tests/test_cli_release_window.py",
|
|
533
|
+
"tests/test_cli_repo_2220.py",
|
|
530
534
|
"tests/test_cli_scorecard.py",
|
|
531
535
|
"tests/test_cli_set_review_findings.py",
|
|
532
536
|
"tests/test_cli_status_advisory_terminal.py",
|
|
@@ -696,6 +700,8 @@
|
|
|
696
700
|
"tests/test_release_window.py",
|
|
697
701
|
"tests/test_remote_auto_prune.py",
|
|
698
702
|
"tests/test_remote_interactive_reaper.py",
|
|
703
|
+
"tests/test_repo_edit_2220.py",
|
|
704
|
+
"tests/test_repo_onboard_2220.py",
|
|
699
705
|
"tests/test_report_result_push.py",
|
|
700
706
|
"tests/test_reports.py",
|
|
701
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
|
|
|
@@ -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)
|
|
@@ -954,6 +954,42 @@ def _dispatch_blocker_lines_for_config_free(machine, cfg) -> list[tuple[bool, st
|
|
|
954
954
|
return out
|
|
955
955
|
|
|
956
956
|
|
|
957
|
+
def _repo_onboarding_lines(cfg, statuses) -> list[tuple[bool, str]]:
|
|
958
|
+
"""Render every configured repo's onboarding residue as ``coord doctor``
|
|
959
|
+
lines (:mod:`coord.repo_onboard`, #2220).
|
|
960
|
+
|
|
961
|
+
This is the wiring #2220 asks for: a half-onboarded repo shows up in the
|
|
962
|
+
fleet report *without anyone remembering to ask*. ``stick-demo`` sat
|
|
963
|
+
two-thirds onboarded for days and the only thing that ever noticed was a
|
|
964
|
+
queue entry dying of it.
|
|
965
|
+
|
|
966
|
+
Runs with ``probe_github=False`` and no graph probe, so it costs **zero**
|
|
967
|
+
extra round trips — it re-reads the ``/health`` bodies this command has
|
|
968
|
+
already fetched. That is enough for the finding that actually bit: the
|
|
969
|
+
#2219 agent/config repo skew is visible from ``/health`` alone. The GitHub
|
|
970
|
+
and repo-contents layers need ``coord repo doctor <name>``, which the
|
|
971
|
+
footer below points at.
|
|
972
|
+
|
|
973
|
+
Mirrors :func:`_unit_drift_lines`/:func:`_release_lag_lines`: same
|
|
974
|
+
computation as the dedicated command (#2096's "two surfaces, one
|
|
975
|
+
function" rule), projected into doctor's output. Best-effort — a repo whose
|
|
976
|
+
facts can't be gathered is skipped rather than breaking the fleet report.
|
|
977
|
+
"""
|
|
978
|
+
from coord import repo_onboard # noqa: PLC0415
|
|
979
|
+
|
|
980
|
+
out: list[tuple[bool, str]] = []
|
|
981
|
+
for repo in getattr(cfg, "repos", None) or []:
|
|
982
|
+
try:
|
|
983
|
+
facts = repo_onboard.gather_facts(
|
|
984
|
+
cfg, repo.name, statuses=statuses, probe_github=False
|
|
985
|
+
)
|
|
986
|
+
report = repo_onboard.evaluate(facts)
|
|
987
|
+
except Exception: # noqa: BLE001 — never break the fleet report
|
|
988
|
+
continue
|
|
989
|
+
out.extend(repo_onboard.doctor_summary_lines(report))
|
|
990
|
+
return out
|
|
991
|
+
|
|
992
|
+
|
|
957
993
|
def _release_lag_lines(report) -> list[tuple[bool, str]]:
|
|
958
994
|
"""Render a :class:`coord.release_verify.VerifyReport`'s findings as
|
|
959
995
|
``coord doctor`` lines (#2082).
|
|
@@ -1135,6 +1171,26 @@ def doctor(
|
|
|
1135
1171
|
for reason in reasons:
|
|
1136
1172
|
click.echo(f" ✗ capability {cap!r} claimed but unmet — {reason}")
|
|
1137
1173
|
|
|
1174
|
+
# #2220: is any repo only half-onboarded? Costs nothing extra — reuses the
|
|
1175
|
+
# `/health` bodies fetched above. Skipped under `--machine`, where the
|
|
1176
|
+
# per-machine slice would report every OTHER machine's repos as
|
|
1177
|
+
# "unreachable" purely because this run never probed them.
|
|
1178
|
+
if not machine_filter:
|
|
1179
|
+
onboarding_lines = _repo_onboarding_lines(cfg, statuses)
|
|
1180
|
+
if onboarding_lines:
|
|
1181
|
+
click.echo("")
|
|
1182
|
+
click.echo("repo onboarding (coord repo doctor):")
|
|
1183
|
+
for is_problem, line in onboarding_lines:
|
|
1184
|
+
click.echo(line)
|
|
1185
|
+
if is_problem:
|
|
1186
|
+
any_problem = True
|
|
1187
|
+
click.echo(
|
|
1188
|
+
" → this is the LIVE-state layer only. GitHub labels, the "
|
|
1189
|
+
"pull_request trigger, CLAUDE.md, the Test-stage command and "
|
|
1190
|
+
"graph freshness are NOT checked here: run "
|
|
1191
|
+
"`coord repo doctor <name>`"
|
|
1192
|
+
)
|
|
1193
|
+
|
|
1138
1194
|
# #2082: is the fleet actually running the released version? On
|
|
1139
1195
|
# 2026-08-10 it was eleven releases behind (v0.5.15 vs PyPI's v0.5.26)
|
|
1140
1196
|
# and nothing routine said so — `coord release verify` already computed
|
|
@@ -1166,6 +1166,88 @@ def check_branch_exists(repo: str, branch: str) -> bool:
|
|
|
1166
1166
|
return False
|
|
1167
1167
|
|
|
1168
1168
|
|
|
1169
|
+
def get_repo_default_branch(repo: str) -> str:
|
|
1170
|
+
"""The repo's REAL default branch, from GitHub (#2220).
|
|
1171
|
+
|
|
1172
|
+
``coord repo add`` reads this rather than trusting a ``--default-branch``
|
|
1173
|
+
flag, and ``coord repo doctor`` compares it against the configured value:
|
|
1174
|
+
a ``default_branch`` that disagrees with the repo's actual default routes
|
|
1175
|
+
every worker PR to the wrong base, and nothing else in the fleet notices.
|
|
1176
|
+
|
|
1177
|
+
Raises (``RuntimeError``/:class:`GhError`) on any read failure rather than
|
|
1178
|
+
guessing ``"main"`` — a caller that cannot tell "the default is main" from
|
|
1179
|
+
"I could not ask" must not treat the second as the first.
|
|
1180
|
+
"""
|
|
1181
|
+
data = _gh_json("api", f"repos/{repo}", default=None)
|
|
1182
|
+
if not isinstance(data, dict) or not data.get("default_branch"):
|
|
1183
|
+
raise RuntimeError(f"gh api repos/{repo}: no default_branch in response")
|
|
1184
|
+
return str(data["default_branch"])
|
|
1185
|
+
|
|
1186
|
+
|
|
1187
|
+
def list_repo_labels(repo: str) -> list[str]:
|
|
1188
|
+
"""Every label name defined in *repo* (#2220).
|
|
1189
|
+
|
|
1190
|
+
Backs the ``coord`` / ``tier:*`` label checks in ``coord repo doctor``:
|
|
1191
|
+
without the ``coord`` label an issue is live on GitHub but invisible to
|
|
1192
|
+
the Pipeline, which is indistinguishable from "nobody has filed anything
|
|
1193
|
+
yet". Raises on read failure — see :func:`get_repo_default_branch`.
|
|
1194
|
+
"""
|
|
1195
|
+
data = _gh_json(
|
|
1196
|
+
"api", "--paginate", "--slurp", f"repos/{repo}/labels", default=None
|
|
1197
|
+
)
|
|
1198
|
+
# `--paginate --slurp` yields a list of per-page arrays; a single
|
|
1199
|
+
# unpaginated read yields a flat array. Accept both rather than depending
|
|
1200
|
+
# on how many labels the repo happens to have.
|
|
1201
|
+
if not isinstance(data, list):
|
|
1202
|
+
raise RuntimeError(f"gh api repos/{repo}/labels: malformed response")
|
|
1203
|
+
out: list[str] = []
|
|
1204
|
+
for entry in data:
|
|
1205
|
+
if isinstance(entry, list):
|
|
1206
|
+
out.extend(str(e.get("name")) for e in entry if isinstance(e, dict) and e.get("name"))
|
|
1207
|
+
elif isinstance(entry, dict) and entry.get("name"):
|
|
1208
|
+
out.append(str(entry["name"]))
|
|
1209
|
+
return out
|
|
1210
|
+
|
|
1211
|
+
|
|
1212
|
+
def list_repo_workflows(repo: str) -> list[dict]:
|
|
1213
|
+
"""The GitHub Actions workflow definitions GitHub knows about for *repo*.
|
|
1214
|
+
|
|
1215
|
+
Sibling of :func:`get_repo_workflow_count` (which only needs the count for
|
|
1216
|
+
``expects_checks``); this returns the entries themselves so ``coord repo
|
|
1217
|
+
doctor`` can go on and read each one's ``on:`` triggers. Each dict carries
|
|
1218
|
+
at least ``name`` and ``path``.
|
|
1219
|
+
|
|
1220
|
+
Raises on read failure rather than returning ``[]`` — same reasoning as
|
|
1221
|
+
:func:`get_repo_workflow_count`: "no workflows" and "couldn't check" have
|
|
1222
|
+
opposite consequences for the merge gate.
|
|
1223
|
+
"""
|
|
1224
|
+
data = _gh_json("api", f"repos/{repo}/actions/workflows", default=None)
|
|
1225
|
+
if not isinstance(data, dict) or not isinstance(data.get("workflows"), list):
|
|
1226
|
+
raise RuntimeError(
|
|
1227
|
+
f"gh api repos/{repo}/actions/workflows: malformed response"
|
|
1228
|
+
)
|
|
1229
|
+
return [w for w in data["workflows"] if isinstance(w, dict)]
|
|
1230
|
+
|
|
1231
|
+
|
|
1232
|
+
def repo_file_exists(repo: str, path: str, branch: str) -> bool:
|
|
1233
|
+
"""True when *path* exists on *branch* of *repo* (#2220).
|
|
1234
|
+
|
|
1235
|
+
Thin, explicitly-branch-taking wrapper over the Contents API —
|
|
1236
|
+
:func:`get_repo_file` defaults to ``develop``, which is wrong for the
|
|
1237
|
+
majority of repos this is asked about. Returns ``False`` only for a real
|
|
1238
|
+
"not found"; every other failure propagates, so a caller never reads an
|
|
1239
|
+
auth error as a missing ``CLAUDE.md``.
|
|
1240
|
+
"""
|
|
1241
|
+
try:
|
|
1242
|
+
_gh("api", f"repos/{repo}/contents/{path}?ref={branch}")
|
|
1243
|
+
return True
|
|
1244
|
+
except RuntimeError as exc:
|
|
1245
|
+
msg = str(exc).lower()
|
|
1246
|
+
if "not found" in msg or "404" in msg:
|
|
1247
|
+
return False
|
|
1248
|
+
raise
|
|
1249
|
+
|
|
1250
|
+
|
|
1169
1251
|
def list_remote_branch_names(repo: str) -> set[str]:
|
|
1170
1252
|
"""Return the set of branch names that currently exist on `repo` (owner/name).
|
|
1171
1253
|
|