code-coordinator 0.5.129__tar.gz → 0.5.131__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.129 → code_coordinator-0.5.131}/PKG-INFO +1 -1
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/code_coordinator.egg-info/SOURCES.txt +1 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/code_coordinator.egg-info/scm_file_list.json +1 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/agent.py +90 -3
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/scripts/coord-test-runner.sh +189 -4
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_agent_push_failure.py +186 -0
- code_coordinator-0.5.131/tests/test_coord_test_runner_populated_home.py +665 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_coord_test_runner_routing.py +9 -3
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/.github/workflows/release-tui.yml +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/.gitignore +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/CLAUDE.md +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/GOAL.md +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/LICENSE +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/MANIFEST.in +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/README.md +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/__init__.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/audit.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/block_log.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/board_bool_guard.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/board_service.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/brain.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/claim.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/cli.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/client.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/comments.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/config.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dao.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/.gitignore +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/components.json +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/dist/assets/Gallery-BoKs3mpY.js +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/dist/assets/Terminal-CEsP08iX.js +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/dist/assets/index-CDHPlB6k.js +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/dist/index.html +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/dist/sw.js +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/eslint.config.js +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/index.html +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/package-lock.json +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/package.json +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/playwright.config.ts +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/postcss.config.js +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/App.tsx +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/api/client.ts +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/api/generated.ts +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/index.css +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/main.tsx +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/test-setup.ts +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/tailwind.config.js +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/tsconfig.json +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/tsconfig.node.json +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dashboard/webapp/vite.config.ts +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/db.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/deps.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/drive.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/events.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/filelock.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/freshness.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/gates.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/goal.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/health/context.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/health/models.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/health/render.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/health/units.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/hooks.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/interactive.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/models.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/network.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/notify.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/openapi.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/parentage.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/plans.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/progress.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/release_window.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/reports.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/review.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/smoke.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/split_work.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/state.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/test_author.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/test_report.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/usage.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/install-agent.sh +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/pyproject.toml +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/setup.cfg +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/__init__.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-33/audit_1039.rs +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-33/contract.md +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-33/manifest.yml +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-38/contract.md +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-38/manifest.yml +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-65/contract.md +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-65/manifest.yml +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/conftest.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_config.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_db.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_events.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_init.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_models.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_network.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_no_direct_gh_calls.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_review.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_session.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_split.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_state.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/Cargo.lock +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/Cargo.toml +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/cargo-config-local-quadraui.toml.example +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/src/app/audit.rs +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/src/app/chat.rs +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/src/app/data.rs +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/src/app/dialogs.rs +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/src/app/doc_tabs.rs +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/src/app/drive.rs +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/src/app/drive_queue.rs +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/src/app/escalation.rs +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/src/app/events.rs +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/src/app/fixtures.rs +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/src/app/fleet_health.rs +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/src/app/fleet_sessions.rs +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/src/app/fleet_terminals.rs +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/src/app/format.rs +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/src/app/milestone_dag.rs +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/src/app/mod.rs +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/src/app/msv.rs +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/src/app/pipeline.rs +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/src/app/plans.rs +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/src/app/render.rs +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/src/app/reports.rs +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/src/app/sessions.rs +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/src/app/settings_ui.rs +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/src/app/sidebar.rs +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/src/app/terminal.rs +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/src/app/tests.rs +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/src/app/types.rs +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/src/app/workspace.rs +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/src/bin/gtk.rs +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/src/commands.rs +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/src/lib.rs +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/src/main.rs +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/src/settings.rs +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/tests/acceptance.rs +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/tests/cli.rs +0 -0
- {code_coordinator-0.5.129 → code_coordinator-0.5.131}/tui/tests/fixtures/board_sample.json +0 -0
|
@@ -539,6 +539,7 @@ tests/test_conflict_fix.py
|
|
|
539
539
|
tests/test_conflict_fix_semantic.py
|
|
540
540
|
tests/test_coord_test.py
|
|
541
541
|
tests/test_coord_test_runner_baseline.py
|
|
542
|
+
tests/test_coord_test_runner_populated_home.py
|
|
542
543
|
tests/test_coord_test_runner_routing.py
|
|
543
544
|
tests/test_coord_test_runner_toolchain.py
|
|
544
545
|
tests/test_coord_web_sse_restart_live.py
|
{code_coordinator-0.5.129 → code_coordinator-0.5.131}/code_coordinator.egg-info/scm_file_list.json
RENAMED
|
@@ -581,6 +581,7 @@
|
|
|
581
581
|
"tests/test_conflict_fix_semantic.py",
|
|
582
582
|
"tests/test_coord_test.py",
|
|
583
583
|
"tests/test_coord_test_runner_baseline.py",
|
|
584
|
+
"tests/test_coord_test_runner_populated_home.py",
|
|
584
585
|
"tests/test_coord_test_runner_routing.py",
|
|
585
586
|
"tests/test_coord_test_runner_toolchain.py",
|
|
586
587
|
"tests/test_coord_web_sse_restart_live.py",
|
|
@@ -785,6 +785,44 @@ def _git(cwd: Path, *args: str, timeout: float = 15.0) -> str:
|
|
|
785
785
|
return result.stdout.strip()
|
|
786
786
|
|
|
787
787
|
|
|
788
|
+
def _remote_already_has_head(
|
|
789
|
+
wt_path: Path, remote: str, branch: str, *, timeout: float = 30.0
|
|
790
|
+
) -> bool:
|
|
791
|
+
"""True when *remote*'s copy of *branch* already contains the worktree's
|
|
792
|
+
current ``HEAD`` as an ancestor (#2356).
|
|
793
|
+
|
|
794
|
+
Used by `_reap`'s belt-and-suspenders push-failure handling: an
|
|
795
|
+
auth-shaped failure pushing to *remote* does NOT necessarily mean the
|
|
796
|
+
worker's commits never reached it — a worker that hit the same broken
|
|
797
|
+
write-credential wall (e.g. an HTTPS credential helper with nothing to
|
|
798
|
+
expand in a non-interactive shell) may have already worked around it by
|
|
799
|
+
pushing the same commit over a different remote/protocol, most commonly
|
|
800
|
+
an explicit ``git@github.com:...`` SSH URL (the #2269 incident). That
|
|
801
|
+
push landed on the SAME GitHub-hosted branch this function now checks —
|
|
802
|
+
it never touches a second remote name in the worktree's own git config.
|
|
803
|
+
|
|
804
|
+
Fetching *branch* is a READ operation (``git fetch`` invokes
|
|
805
|
+
upload-pack, not receive-pack), which commonly still succeeds — via
|
|
806
|
+
anonymous access on a public repo, or a still-valid read-scoped
|
|
807
|
+
credential — even when the WRITE credential that just failed the push
|
|
808
|
+
is broken or missing entirely. So this is a meaningfully independent
|
|
809
|
+
signal from the push that just failed, not a re-run of the same failing
|
|
810
|
+
operation.
|
|
811
|
+
|
|
812
|
+
Returns ``False`` — never raises — on any git failure: the branch
|
|
813
|
+
missing on the remote, a network error, or `merge-base` reporting "not
|
|
814
|
+
an ancestor" all resolve to "unknown/genuinely behind", and an unknown
|
|
815
|
+
remote state must never suppress the real #1797 failure signal (nothing
|
|
816
|
+
ever reached the remote).
|
|
817
|
+
"""
|
|
818
|
+
try:
|
|
819
|
+
_git(wt_path, "fetch", remote, branch, timeout=timeout)
|
|
820
|
+
_git(wt_path, "merge-base", "--is-ancestor", "HEAD", "FETCH_HEAD")
|
|
821
|
+
return True
|
|
822
|
+
except (_GitError, subprocess.TimeoutExpired):
|
|
823
|
+
return False
|
|
824
|
+
|
|
825
|
+
|
|
788
826
|
def _is_linked_worktree(repo_path: Path) -> bool:
|
|
789
827
|
"""True when *repo_path* is a linked ``git worktree`` rather than the
|
|
790
828
|
checkout that owns its ``.git`` directory (#1729, H-6's guard 2).
|
|
@@ -2988,7 +3026,14 @@ class AgentAssignment:
|
|
|
2988
3026
|
# alongside `status == FAILED`; `None` on every other outcome —
|
|
2989
3027
|
# including a push failure for an unrelated reason (no `origin`
|
|
2990
3028
|
# configured, network blip), which stays non-fatal exactly as before
|
|
2991
|
-
# this field was introduced
|
|
3029
|
+
# this field was introduced, AND (#2356) including an auth-shaped
|
|
3030
|
+
# failure on THIS push that turns out to be superseded: when
|
|
3031
|
+
# `_remote_already_has_head` confirms the content already reached
|
|
3032
|
+
# `origin` via some other remote/protocol (e.g. the #2269 SSH-
|
|
3033
|
+
# workaround case), the push failure is logged but this field stays
|
|
3034
|
+
# `None` and the assignment keeps its normal (non-FAILED) outcome —
|
|
3035
|
+
# the work is where it needs to be, so the failed push here is a
|
|
3036
|
+
# non-event, not a signal.
|
|
2992
3037
|
#
|
|
2993
3038
|
# Exists to keep an auth break from being silently absorbed into either
|
|
2994
3039
|
# DONE (worker had local commits that never reached origin) or the
|
|
@@ -8146,12 +8191,54 @@ class AgentServer:
|
|
|
8146
8191
|
# against repos with no `origin` at all (every test
|
|
8147
8192
|
# fixture, and any local-only deployment), and that
|
|
8148
8193
|
# failure mode must stay non-fatal exactly as before.
|
|
8194
|
+
#
|
|
8195
|
+
# #2356: an auth-shaped failure on THIS push doesn't
|
|
8196
|
+
# necessarily mean the content never reached origin
|
|
8197
|
+
# — a worker that hit the same broken-credential
|
|
8198
|
+
# wall may have already landed the same commit via
|
|
8199
|
+
# an alternate remote/protocol (#2269: an explicit
|
|
8200
|
+
# SSH URL, worked around a missing HTTPS
|
|
8201
|
+
# credential). Before promoting to FAILED, check
|
|
8202
|
+
# whether origin already has local HEAD as an
|
|
8203
|
+
# ancestor (`_remote_already_has_head` fetches — a
|
|
8204
|
+
# read, which commonly still works even when the
|
|
8205
|
+
# write credential just failed). Only genuinely
|
|
8206
|
+
# missing content — origin behind local HEAD, or the
|
|
8207
|
+
# check itself failing — is promoted, so #1797's
|
|
8208
|
+
# original "nothing ever reached origin" case is
|
|
8209
|
+
# unaffected.
|
|
8149
8210
|
_reason = str(e)
|
|
8211
|
+
_suppressed_as_already_pushed = False
|
|
8150
8212
|
if _is_auth_push_failure(_reason):
|
|
8151
|
-
|
|
8213
|
+
_branch_for_check = (
|
|
8214
|
+
head if head and head != "HEAD" else None
|
|
8215
|
+
)
|
|
8216
|
+
if _branch_for_check and _remote_already_has_head(
|
|
8217
|
+
wt_path, "origin", _branch_for_check
|
|
8218
|
+
):
|
|
8219
|
+
_suppressed_as_already_pushed = True
|
|
8220
|
+
else:
|
|
8221
|
+
_push_failure_reason = _reason
|
|
8152
8222
|
try:
|
|
8153
8223
|
with open(assignment.log_path, "a") as reopen:
|
|
8154
|
-
|
|
8224
|
+
if _suppressed_as_already_pushed:
|
|
8225
|
+
# Deliberately NOT the generic "push
|
|
8226
|
+
# failed" line below: that line reads as
|
|
8227
|
+
# a live failure signal, which this
|
|
8228
|
+
# isn't — origin already has HEAD, so
|
|
8229
|
+
# the failed push here is a non-event
|
|
8230
|
+
# (#2356).
|
|
8231
|
+
reopen.write(
|
|
8232
|
+
"# reap: push failed but origin "
|
|
8233
|
+
"already has HEAD as an ancestor "
|
|
8234
|
+
"(pushed via another remote/"
|
|
8235
|
+
"protocol?) — treating as success "
|
|
8236
|
+
f"({_reason}) (#2356)\n"
|
|
8237
|
+
)
|
|
8238
|
+
else:
|
|
8239
|
+
reopen.write(
|
|
8240
|
+
f"# reap: push failed ({_reason})\n"
|
|
8241
|
+
)
|
|
8155
8242
|
except OSError:
|
|
8156
8243
|
pass
|
|
8157
8244
|
|
|
@@ -91,6 +91,24 @@
|
|
|
91
91
|
# see the long note above `ensure_baseline_worktree` for why the fallback
|
|
92
92
|
# arm is excluded rather than "not done yet".
|
|
93
93
|
#
|
|
94
|
+
# 7. THE POPULATED-$HOME ARM (#2269). A branch can be green here and red in
|
|
95
|
+
# CI's `populated-home` job, and until #2269 whether that was caught
|
|
96
|
+
# depended on WHICH MACHINE the Test stage landed on. That job's
|
|
97
|
+
# environment is SYNTHESIZED by scripts/run_tests_in_populated_home.sh (a
|
|
98
|
+
# thin-client ~/.coord with no coordinator.yml, no `sqlite3` on PATH, a
|
|
99
|
+
# $TMPDIR under an ancestor pytest config); this runner otherwise inherits
|
|
100
|
+
# whatever environment the assigned machine happens to have. dellserver —
|
|
101
|
+
# the daemon host — is structurally incapable of reproducing knob 1, so
|
|
102
|
+
# #2174 passed the Test gate, spent a full adversarial review, and was
|
|
103
|
+
# caught only when `coord fix` noticed CI disagreed. So once the ordinary
|
|
104
|
+
# python arm is green, the test files THE DIFF TOUCHED are re-run through
|
|
105
|
+
# that same harness. Diff-scoped because running the suite twice is not
|
|
106
|
+
# affordable (#2169). This arm can only ever FAIL, never downgrade: the
|
|
107
|
+
# harness's own `exit 2` ("a knob failed to take effect") is a
|
|
108
|
+
# FAIL-with-warning, never a skip. Python arm only, and it names itself
|
|
109
|
+
# (`python-populated-home`) in every verdict line it emits, so a red result
|
|
110
|
+
# is attributable rather than a mystery.
|
|
111
|
+
#
|
|
94
112
|
# Exit codes: 0 pass (or skip — nothing to test), 1 genuine failure or refusal
|
|
95
113
|
# (cannot determine what to test), 2 usage, 3 INFRASTRUCTURE — the suite could
|
|
96
114
|
# not run at all (a required toolchain is missing); no verdict may be inferred
|
|
@@ -215,9 +233,77 @@ else
|
|
|
215
233
|
log "routing: repo=$REPO_NAME — no path rule and no --fallback-command"
|
|
216
234
|
fi
|
|
217
235
|
|
|
236
|
+
# ── populated-$HOME arm scoping (#2269) ─────────────────────────────────────
|
|
237
|
+
#
|
|
238
|
+
# WHICH FILES. Only the python test files THIS DIFF touched, and only ones that
|
|
239
|
+
# still exist in the worktree (a diff that DELETES a test file must not hand
|
|
240
|
+
# pytest a path that is not there). `tests/acceptance/**` is excluded for the
|
|
241
|
+
# same reason the ordinary arm passes `--ignore=tests/acceptance`: that sealed
|
|
242
|
+
# suite is gated separately through the #2164 `--ci` wrapper, and a
|
|
243
|
+
# red-by-design slice must not fail every concurrent branch.
|
|
244
|
+
#
|
|
245
|
+
# WHY DIFF-SCOPED AND NOT THE WHOLE SUITE. The full suite already exceeds
|
|
246
|
+
# Claude Code's 600s Bash ceiling (#2169); running it a second time under the
|
|
247
|
+
# harness is not on the table. Diff-scoping is what makes this arm affordable —
|
|
248
|
+
# it costs roughly one test FILE's runtime, paid only by branches that touch
|
|
249
|
+
# python tests at all. The always-on cover for the rest of the suite is
|
|
250
|
+
# tests/test_ambient_home_isolation.py (which runs everywhere, on every branch);
|
|
251
|
+
# this arm exists for the case that file cannot cover, a NEWLY WRITTEN test of
|
|
252
|
+
# this class (#2174 was exactly that).
|
|
253
|
+
#
|
|
254
|
+
# Computed HERE, beside the routing decision, rather than inside `run_python`,
|
|
255
|
+
# because `--print-routing` must be able to name the arm before a worker pushes.
|
|
256
|
+
POPULATED_TESTS=""
|
|
257
|
+
POPULATED_COUNT=0
|
|
258
|
+
POPULATED_ARM=0
|
|
259
|
+
POPULATED_SKIP_REASON=""
|
|
260
|
+
|
|
261
|
+
is_python_test_file() {
|
|
262
|
+
case "$1" in
|
|
263
|
+
tests/acceptance/*) return 1 ;;
|
|
264
|
+
tests/*) ;;
|
|
265
|
+
*) return 1 ;;
|
|
266
|
+
esac
|
|
267
|
+
case "${1##*/}" in
|
|
268
|
+
test_*.py) return 0 ;;
|
|
269
|
+
*) return 1 ;;
|
|
270
|
+
esac
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
if [[ "$ROUTE_MODE" == "coordinator" && "$RUN_PY" -eq 1 ]]; then
|
|
274
|
+
if [[ "$DIFF_FAILED" -eq 1 ]]; then
|
|
275
|
+
POPULATED_SKIP_REASON="the diff against $BASE_REF could not be computed, so the arm has no scope to run over"
|
|
276
|
+
else
|
|
277
|
+
while IFS= read -r f; do
|
|
278
|
+
[[ -z "$f" ]] && continue
|
|
279
|
+
is_python_test_file "$f" || continue
|
|
280
|
+
# Deleted-by-the-diff files are still listed by `git diff --name-only`.
|
|
281
|
+
[[ -f "$WT/$f" ]] || continue
|
|
282
|
+
POPULATED_TESTS="${POPULATED_TESTS:+$POPULATED_TESTS }$f"
|
|
283
|
+
POPULATED_COUNT=$((POPULATED_COUNT + 1))
|
|
284
|
+
done <<<"$CHANGED"
|
|
285
|
+
[[ "$POPULATED_COUNT" -gt 0 ]] && POPULATED_ARM=1
|
|
286
|
+
[[ "$POPULATED_ARM" -eq 0 ]] && \
|
|
287
|
+
POPULATED_SKIP_REASON="the diff touches no python test files under tests/ (outside the sealed tests/acceptance/)"
|
|
288
|
+
fi
|
|
289
|
+
elif [[ "$ROUTE_MODE" == "coordinator" ]]; then
|
|
290
|
+
POPULATED_SKIP_REASON="the python arm is not routed for this diff"
|
|
291
|
+
else
|
|
292
|
+
POPULATED_SKIP_REASON="the populated-\$HOME arm is this repo's python arm only"
|
|
293
|
+
fi
|
|
294
|
+
|
|
295
|
+
if [[ "$ROUTE_MODE" == "coordinator" ]]; then
|
|
296
|
+
if [[ "$POPULATED_ARM" -eq 1 ]]; then
|
|
297
|
+
log "routing: populated-\$HOME arm (#2269) will re-run $POPULATED_COUNT diff-scoped test file(s): $POPULATED_TESTS"
|
|
298
|
+
else
|
|
299
|
+
log "routing: populated-\$HOME arm (#2269) SKIPPED — $POPULATED_SKIP_REASON"
|
|
300
|
+
fi
|
|
301
|
+
fi
|
|
302
|
+
|
|
218
303
|
if [[ "$PRINT_ROUTING" -eq 1 ]]; then
|
|
219
304
|
case "$ROUTE_MODE" in
|
|
220
|
-
coordinator) printf 'ROUTING mode=coordinator pytest=%s cargo=%s\n'
|
|
305
|
+
coordinator) printf 'ROUTING mode=coordinator pytest=%s cargo=%s populated-home=%s\n' \
|
|
306
|
+
"$RUN_PY" "$RUN_RS" "$POPULATED_ARM" ;;
|
|
221
307
|
fallback) printf 'ROUTING mode=fallback run=%s\n' "$RUN_FALLBACK" ;;
|
|
222
308
|
unknown) printf 'ROUTING mode=unknown\n' ;;
|
|
223
309
|
esac
|
|
@@ -245,6 +331,8 @@ EXIT_INFRA=3
|
|
|
245
331
|
# baseline is red, so this is not a verdict on the branch either (#2170).
|
|
246
332
|
BASELINE_RED_SUITES=()
|
|
247
333
|
EXIT_BASELINE_RED=4
|
|
334
|
+
# See the note at the dispatch site below.
|
|
335
|
+
PY_FAIL_SUITE="python"
|
|
248
336
|
|
|
249
337
|
# ── baseline comparison (#2170) ──────────────────────────────────────────────
|
|
250
338
|
#
|
|
@@ -570,6 +658,98 @@ run_python_acceptance_ci() {
|
|
|
570
658
|
return 1
|
|
571
659
|
}
|
|
572
660
|
|
|
661
|
+
# ── the populated-$HOME arm (#2269) ─────────────────────────────────────────
|
|
662
|
+
#
|
|
663
|
+
# Re-run the diff's own python test files in the environment of a REAL FLEET
|
|
664
|
+
# MACHINE instead of this machine's, using the SAME harness CI's
|
|
665
|
+
# `populated-home` job uses (scripts/run_tests_in_populated_home.sh, from the
|
|
666
|
+
# BRANCH's tree — so a branch that changes the harness is tested against its own
|
|
667
|
+
# version, exactly like CI). See item 7 in the header for why this is not
|
|
668
|
+
# optional: without it, catching this failure class is a property of which
|
|
669
|
+
# machine the Test stage was routed to.
|
|
670
|
+
#
|
|
671
|
+
# THIS ARM ONLY EVER FAILS. It is the mirror image of #2170's baseline check,
|
|
672
|
+
# which only ever downgrades and is therefore deliberately hard to trigger. This
|
|
673
|
+
# one is the STRICT direction, so every ambiguity resolves the other way:
|
|
674
|
+
#
|
|
675
|
+
# * The harness's own `exit 2` — "a knob failed to take effect", i.e. the
|
|
676
|
+
# environment it claims to synthesize was not synthesized — is a FAIL with a
|
|
677
|
+
# warning, NOT a skip. A guard that cannot guard reporting green is the exact
|
|
678
|
+
# failure mode #2170 exists to prevent, and a Test gate that silently
|
|
679
|
+
# tolerates it is back to routing luck.
|
|
680
|
+
# * Any other non-zero exit is a FAIL naming this arm.
|
|
681
|
+
#
|
|
682
|
+
# There is no flake filter here on purpose: these same files went green in the
|
|
683
|
+
# ordinary arm moments ago, so a failure here is by construction environmental,
|
|
684
|
+
# and re-running would only launder it.
|
|
685
|
+
#
|
|
686
|
+
# The two SKIPs it can report (no python test files in the diff; the harness
|
|
687
|
+
# absent from this branch's tree) are announced in the verdict stream and by
|
|
688
|
+
# `--print-routing`, never silent.
|
|
689
|
+
run_python_populated_home() {
|
|
690
|
+
local venv="$1"
|
|
691
|
+
local rel="scripts/run_tests_in_populated_home.sh"
|
|
692
|
+
local script="$WT/$rel"
|
|
693
|
+
|
|
694
|
+
if [[ "$POPULATED_ARM" -eq 0 ]]; then
|
|
695
|
+
say "SKIP(python-populated-home): not run — $POPULATED_SKIP_REASON (#2269)"
|
|
696
|
+
return 0
|
|
697
|
+
fi
|
|
698
|
+
if [[ ! -f "$script" ]]; then
|
|
699
|
+
# A branch (or a checkout) predating the harness. Skipping is the only
|
|
700
|
+
# option that does not redden every such branch, but it is stated out
|
|
701
|
+
# loud rather than inferred from silence.
|
|
702
|
+
warn "populated-home: $rel is not present in this worktree — the arm cannot run"
|
|
703
|
+
say "SKIP(python-populated-home): not run — the harness $rel is absent from this branch's tree (#2269)"
|
|
704
|
+
return 0
|
|
705
|
+
fi
|
|
706
|
+
|
|
707
|
+
local out="$WT/.pytest-populated-home.out"
|
|
708
|
+
local started=$SECONDS
|
|
709
|
+
local rc=0
|
|
710
|
+
log "running: $rel over $POPULATED_COUNT diff-scoped test file(s): $POPULATED_TESTS"
|
|
711
|
+
# shellcheck disable=SC2086 # the file list is intentionally word-split
|
|
712
|
+
(cd "$WT" && bash "$script" "$venv/bin/python" -m pytest -q --tb=short $POPULATED_TESTS) \
|
|
713
|
+
>"$out" 2>&1 || rc=$?
|
|
714
|
+
local elapsed=$((SECONDS - started))
|
|
715
|
+
|
|
716
|
+
if [[ "$rc" -eq 0 ]]; then
|
|
717
|
+
say "PASS(python-populated-home): $POPULATED_COUNT diff-scoped test file(s) green in a synthesized fleet \$HOME (+${elapsed}s)"
|
|
718
|
+
return 0
|
|
719
|
+
fi
|
|
720
|
+
|
|
721
|
+
# The harness's own guard failures. `run_tests_in_populated_home.sh`
|
|
722
|
+
# reserves exit 2 for exactly this case, so check `rc` directly first —
|
|
723
|
+
# it can't drift out of sync with itself. The message grep is a second,
|
|
724
|
+
# belt-and-braces signal for a harness that fails this way but exits with
|
|
725
|
+
# some other code (or an older/forked copy of the script); if the exact
|
|
726
|
+
# wording ever changes, `rc -eq 2` alone still catches the exit-2 case.
|
|
727
|
+
# Distinguished from a test failure because the two need different fixes
|
|
728
|
+
# — but BOTH are a FAIL, so mis-classifying one as the other can only
|
|
729
|
+
# ever mis-word a red verdict, never hide one.
|
|
730
|
+
if [[ "$rc" -eq 2 ]] || grep -qE "the guard itself is broken|the guard is too broad|is not thin-client shaped" "$out"; then
|
|
731
|
+
say "FAIL(python-populated-home): the harness $rel exited $rc because A KNOB FAILED TO TAKE EFFECT — the environment it claims to synthesize (thin-client ~/.coord, no sqlite3, \$TMPDIR under an ancestor pytest config) was not the environment the tests ran in, so a green here would have meant nothing. This is reported as a FAILURE, not a skip, on purpose (#2269)."
|
|
732
|
+
tail -n 20 "$out" | sed 's/^/ /'
|
|
733
|
+
return 1
|
|
734
|
+
fi
|
|
735
|
+
|
|
736
|
+
say "FAIL(python-populated-home): $POPULATED_COUNT diff-scoped test file(s) PASS in this machine's ambient environment but FAIL in a synthesized fleet \$HOME (thin-client ~/.coord with no coordinator.yml, no sqlite3 on PATH, \$TMPDIR under an ancestor pytest config) — this is CI's populated-home job's failure class, caught here instead of at the merge gate (#2269). Reproduce with: $rel python -m pytest $POPULATED_TESTS"
|
|
737
|
+
printf '%s\n' "$POPULATED_TESTS" | tr ' ' '\n' | sed 's/^/ /'
|
|
738
|
+
tail -n 40 "$out" | sed 's/^/ /'
|
|
739
|
+
return 1
|
|
740
|
+
}
|
|
741
|
+
|
|
742
|
+
# The arms that run AFTER the ordinary pytest suite has gone green (or been
|
|
743
|
+
# judged a tolerated flake), in cost order. Short-circuiting on the first
|
|
744
|
+
# failure is deliberate: the verdict is already attributable to a named arm, and
|
|
745
|
+
# there is nothing to learn from paying for the next one.
|
|
746
|
+
run_python_post_arms() {
|
|
747
|
+
local venv="$1"
|
|
748
|
+
run_python_acceptance_ci "$venv" || return 1
|
|
749
|
+
run_python_populated_home "$venv" || { PY_FAIL_SUITE="python-populated-home"; return 1; }
|
|
750
|
+
return 0
|
|
751
|
+
}
|
|
752
|
+
|
|
573
753
|
run_python() {
|
|
574
754
|
local venv="$WT/.venv"
|
|
575
755
|
if [[ ! -x "$venv/bin/python" ]]; then
|
|
@@ -618,7 +798,7 @@ run_python() {
|
|
|
618
798
|
# `set -u` on older bash.
|
|
619
799
|
if (cd "$WT" && "$venv/bin/python" -m pytest -q --tb=short --ignore=tests/acceptance ${par[@]+"${par[@]}"}) >"$out" 2>&1; then
|
|
620
800
|
log "ordinary suite: $(grep -oE '[0-9]+ passed[^)]*' "$out" | tail -1)"
|
|
621
|
-
|
|
801
|
+
run_python_post_arms "$venv"
|
|
622
802
|
return $?
|
|
623
803
|
fi
|
|
624
804
|
|
|
@@ -645,7 +825,7 @@ run_python() {
|
|
|
645
825
|
say "FLAKE(python): $count test(s) failed in the full run but PASS in isolation"
|
|
646
826
|
printf '%s\n' "$failed" | sed 's/^/ /'
|
|
647
827
|
FLAKES+=("python:$count")
|
|
648
|
-
|
|
828
|
+
run_python_post_arms "$venv"
|
|
649
829
|
return $?
|
|
650
830
|
fi
|
|
651
831
|
|
|
@@ -854,8 +1034,13 @@ mark_failed() {
|
|
|
854
1034
|
FAILED_SUITES+=("$suite")
|
|
855
1035
|
}
|
|
856
1036
|
|
|
1037
|
+
# Which name a failing python arm books itself under. "python" for every arm
|
|
1038
|
+
# that existed before #2269; the populated-$HOME arm overwrites it with its own
|
|
1039
|
+
# name so `RESULT: FAIL (python-populated-home)` says which environment went
|
|
1040
|
+
# red, not merely that pytest did (#2269's "a red result is attributable"
|
|
1041
|
+
# requirement). It is only ever read after `run_python` returns non-zero.
|
|
857
1042
|
if [[ "$RUN_PY" -eq 1 ]]; then
|
|
858
|
-
run_python || mark_failed
|
|
1043
|
+
run_python || mark_failed "$PY_FAIL_SUITE"
|
|
859
1044
|
fi
|
|
860
1045
|
if [[ "$RUN_RS" -eq 1 ]]; then
|
|
861
1046
|
run_rust || mark_failed rust
|
|
@@ -31,6 +31,7 @@ from coord.agent import (
|
|
|
31
31
|
AgentServer,
|
|
32
32
|
AssignmentSpec,
|
|
33
33
|
_is_auth_push_failure,
|
|
34
|
+
_remote_already_has_head,
|
|
34
35
|
)
|
|
35
36
|
|
|
36
37
|
|
|
@@ -40,6 +41,42 @@ def _git(cwd: Path, *args: str) -> str:
|
|
|
40
41
|
).stdout.strip()
|
|
41
42
|
|
|
42
43
|
|
|
44
|
+
def _write_always_failing_receive_pack(tmp_path: Path) -> Path:
|
|
45
|
+
"""A `receive-pack` replacement that unconditionally fails every push
|
|
46
|
+
with an auth-shaped error, regardless of whether the push has anything
|
|
47
|
+
new to send (#2356 review).
|
|
48
|
+
|
|
49
|
+
A `pre-receive` hook is the WRONG tool for simulating "reap's own push
|
|
50
|
+
fails while the remote already has HEAD": git's client-side ref
|
|
51
|
+
negotiation short-circuits to `Everything up-to-date` (exit 0) whenever
|
|
52
|
+
local HEAD already matches what the remote advertises, and that
|
|
53
|
+
short-circuit happens BEFORE a pack is ever sent — so a `pre-receive`
|
|
54
|
+
hook, which only runs after `receive-pack` unpacks an incoming pack,
|
|
55
|
+
never gets invoked at all in that case. Verified independently: a
|
|
56
|
+
`pre-receive`-based rejecting remote lets a same-SHA `git push -u
|
|
57
|
+
origin HEAD` succeed silently, hook untouched.
|
|
58
|
+
|
|
59
|
+
Overriding `remote.<name>.receivepack` instead replaces the
|
|
60
|
+
`receive-pack` PROGRAM itself, which git invokes unconditionally at the
|
|
61
|
+
start of every `git push` (for ref advertisement) — before any
|
|
62
|
+
comparison against what the client already has. It fires every time,
|
|
63
|
+
including when there is nothing new to send, which is exactly the
|
|
64
|
+
shape this scenario needs. Deliberately leaves `uploadpack` untouched,
|
|
65
|
+
so `git fetch` (what `_remote_already_has_head` uses) keeps working
|
|
66
|
+
normally.
|
|
67
|
+
"""
|
|
68
|
+
script = tmp_path / "fail_receive_pack.sh"
|
|
69
|
+
script.write_text(
|
|
70
|
+
"#!/bin/sh\n"
|
|
71
|
+
"echo 'remote: Invalid username or token.' >&2\n"
|
|
72
|
+
"echo 'remote: Password authentication is not supported for "
|
|
73
|
+
"Git operations.' >&2\n"
|
|
74
|
+
"exit 1\n"
|
|
75
|
+
)
|
|
76
|
+
script.chmod(script.stat().st_mode | stat.S_IEXEC)
|
|
77
|
+
return script
|
|
78
|
+
|
|
79
|
+
|
|
43
80
|
class TestIsAuthPushFailure:
|
|
44
81
|
"""Direct unit tests for `_is_auth_push_failure` (#1797 review nit): the
|
|
45
82
|
three FAILED-vs-non-fatal tests above only exercise it indirectly
|
|
@@ -98,6 +135,90 @@ class TestIsAuthPushFailure:
|
|
|
98
135
|
assert _is_auth_push_failure(message) is False
|
|
99
136
|
|
|
100
137
|
|
|
138
|
+
def _init_repo(d: Path) -> None:
|
|
139
|
+
d.mkdir()
|
|
140
|
+
_git(d, "init", "-b", "main")
|
|
141
|
+
_git(d, "config", "user.email", "t@t.com")
|
|
142
|
+
_git(d, "config", "user.name", "Test")
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
def _commit_file(d: Path, name: str, contents: str, message: str) -> None:
|
|
146
|
+
(d / name).write_text(contents)
|
|
147
|
+
_git(d, "add", name)
|
|
148
|
+
_git(d, "commit", "-m", message)
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
class TestRemoteAlreadyHasHead:
|
|
152
|
+
"""Direct unit tests for `_remote_already_has_head` (#2356 review nit):
|
|
153
|
+
the full-round-trip tests only exercise it indirectly through an entire
|
|
154
|
+
`AgentServer`/`_reap` cycle, which proves the wiring but not the
|
|
155
|
+
ancestor-check logic itself in isolation. These pin down the four cases
|
|
156
|
+
the function's docstring promises: caught up, genuinely behind, branch
|
|
157
|
+
missing on the remote, and the remote unreachable outright — mirroring
|
|
158
|
+
`TestIsAuthPushFailure`'s role for `_is_auth_push_failure`.
|
|
159
|
+
"""
|
|
160
|
+
|
|
161
|
+
def test_true_when_remote_already_has_head_as_ancestor(
|
|
162
|
+
self, tmp_path: Path
|
|
163
|
+
) -> None:
|
|
164
|
+
origin = tmp_path / "origin.git"
|
|
165
|
+
origin.mkdir()
|
|
166
|
+
_git(origin, "init", "--bare", "-b", "main")
|
|
167
|
+
|
|
168
|
+
clone = tmp_path / "clone"
|
|
169
|
+
_init_repo(clone)
|
|
170
|
+
_git(clone, "remote", "add", "origin", str(origin))
|
|
171
|
+
_commit_file(clone, "f", "x\n", "c1")
|
|
172
|
+
_git(clone, "push", "-u", "origin", "main")
|
|
173
|
+
|
|
174
|
+
assert _remote_already_has_head(clone, "origin", "main") is True
|
|
175
|
+
|
|
176
|
+
def test_false_when_local_head_is_ahead_of_remote(
|
|
177
|
+
self, tmp_path: Path
|
|
178
|
+
) -> None:
|
|
179
|
+
"""The genuine #1797 shape: local HEAD moved on past whatever the
|
|
180
|
+
remote has, so the remote does NOT already have this content —
|
|
181
|
+
must return False so the real failure signal is never suppressed.
|
|
182
|
+
"""
|
|
183
|
+
origin = tmp_path / "origin.git"
|
|
184
|
+
origin.mkdir()
|
|
185
|
+
_git(origin, "init", "--bare", "-b", "main")
|
|
186
|
+
|
|
187
|
+
clone = tmp_path / "clone"
|
|
188
|
+
_init_repo(clone)
|
|
189
|
+
_git(clone, "remote", "add", "origin", str(origin))
|
|
190
|
+
_commit_file(clone, "f", "x\n", "c1")
|
|
191
|
+
_git(clone, "push", "-u", "origin", "main")
|
|
192
|
+
|
|
193
|
+
# A second local commit that never reaches origin.
|
|
194
|
+
_commit_file(clone, "f", "y\n", "c2 (never reaches origin)")
|
|
195
|
+
|
|
196
|
+
assert _remote_already_has_head(clone, "origin", "main") is False
|
|
197
|
+
|
|
198
|
+
def test_false_when_remote_branch_does_not_exist(
|
|
199
|
+
self, tmp_path: Path
|
|
200
|
+
) -> None:
|
|
201
|
+
origin = tmp_path / "origin.git"
|
|
202
|
+
origin.mkdir()
|
|
203
|
+
_git(origin, "init", "--bare", "-b", "main")
|
|
204
|
+
|
|
205
|
+
clone = tmp_path / "clone"
|
|
206
|
+
_init_repo(clone)
|
|
207
|
+
_git(clone, "remote", "add", "origin", str(origin))
|
|
208
|
+
_commit_file(clone, "f", "x\n", "c1")
|
|
209
|
+
# Never pushed anywhere — "main" doesn't exist on origin at all.
|
|
210
|
+
|
|
211
|
+
assert _remote_already_has_head(clone, "origin", "main") is False
|
|
212
|
+
|
|
213
|
+
def test_false_when_remote_is_unreachable(self, tmp_path: Path) -> None:
|
|
214
|
+
clone = tmp_path / "clone"
|
|
215
|
+
_init_repo(clone)
|
|
216
|
+
_git(clone, "remote", "add", "origin", str(tmp_path / "does-not-exist"))
|
|
217
|
+
_commit_file(clone, "f", "x\n", "c1")
|
|
218
|
+
|
|
219
|
+
assert _remote_already_has_head(clone, "origin", "main") is False
|
|
220
|
+
|
|
221
|
+
|
|
101
222
|
@pytest.fixture
|
|
102
223
|
def repo_with_rejecting_remote(tmp_path: Path) -> tuple[Path, Path]:
|
|
103
224
|
"""A working clone whose `origin` rejects every push with a git
|
|
@@ -222,6 +343,71 @@ def test_push_failure_with_zero_commits_is_failed_not_advisory(
|
|
|
222
343
|
server.shutdown()
|
|
223
344
|
|
|
224
345
|
|
|
346
|
+
def test_push_failure_when_already_on_origin_via_other_route_is_not_failed(
|
|
347
|
+
tmp_path: Path, repo_with_rejecting_remote: tuple[Path, Path]
|
|
348
|
+
) -> None:
|
|
349
|
+
"""#2356: a worker that hits the same broken-write-credential wall as
|
|
350
|
+
#1797 may work around it by landing the same commit on origin via some
|
|
351
|
+
other route (the #2269 incident: pushing over an explicit SSH URL when
|
|
352
|
+
the worktree's configured HTTPS remote had no usable credentials in a
|
|
353
|
+
non-interactive shell). Reap's own belt-and-suspenders push against
|
|
354
|
+
`origin` still fails with the exact same auth-shaped error in that case
|
|
355
|
+
— but the content is already on the remote branch.
|
|
356
|
+
|
|
357
|
+
The worker lands its own commit on `origin` first (hook briefly
|
|
358
|
+
lifted — standing in for "reached origin via another path"), THEN we
|
|
359
|
+
install `_write_always_failing_receive_pack`'s override so reap's own
|
|
360
|
+
subsequent push — which has nothing new to send, since the worker
|
|
361
|
+
already pushed this exact SHA — still fails with an auth-shaped error.
|
|
362
|
+
(A `pre-receive` hook cannot do this: see that helper's docstring for
|
|
363
|
+
why git's own "nothing to push" short-circuit bypasses it here.) The
|
|
364
|
+
assignment must land on DONE, not FAILED: the work is exactly where it
|
|
365
|
+
needs to be, however it got there.
|
|
366
|
+
"""
|
|
367
|
+
clone, origin = repo_with_rejecting_remote
|
|
368
|
+
hook = origin / "hooks" / "pre-receive"
|
|
369
|
+
fail_receive_pack = _write_always_failing_receive_pack(tmp_path)
|
|
370
|
+
|
|
371
|
+
worker_sh = (
|
|
372
|
+
"git config user.email w@w.com && "
|
|
373
|
+
"git config user.name Worker && "
|
|
374
|
+
"echo change > change.txt && "
|
|
375
|
+
"git add change.txt && "
|
|
376
|
+
"git commit -m 'real work' && "
|
|
377
|
+
f"chmod -x {hook} && "
|
|
378
|
+
"git push origin HEAD && "
|
|
379
|
+
f"chmod +x {hook} && "
|
|
380
|
+
f"git config remote.origin.receivepack {fail_receive_pack}"
|
|
381
|
+
)
|
|
382
|
+
server = AgentServer(
|
|
383
|
+
machine_name="t",
|
|
384
|
+
repos=["api"],
|
|
385
|
+
repo_paths={"api": str(clone)},
|
|
386
|
+
state_dir=tmp_path / "state",
|
|
387
|
+
worker_command=lambda spec: ["/bin/sh", "-c", worker_sh],
|
|
388
|
+
)
|
|
389
|
+
spec = AssignmentSpec(
|
|
390
|
+
repo_name="api",
|
|
391
|
+
repo_path=str(clone),
|
|
392
|
+
issue_number=4,
|
|
393
|
+
issue_title="already pushed elsewhere, origin push still broken",
|
|
394
|
+
briefing="b",
|
|
395
|
+
branch="main",
|
|
396
|
+
)
|
|
397
|
+
a = server.assign(spec)
|
|
398
|
+
final = server.wait_for(a.id, timeout=15)
|
|
399
|
+
|
|
400
|
+
assert final.status == DONE, (
|
|
401
|
+
"origin already had HEAD (however it got there) — reap's own push "
|
|
402
|
+
f"failing on top of that must not be FAILED, got {final.status!r}"
|
|
403
|
+
)
|
|
404
|
+
assert final.push_failure_reason is None, (
|
|
405
|
+
"the auth-shaped failure must be suppressed once the fetch-based "
|
|
406
|
+
"check confirms origin already has HEAD as an ancestor"
|
|
407
|
+
)
|
|
408
|
+
server.shutdown()
|
|
409
|
+
|
|
410
|
+
|
|
225
411
|
def test_successful_push_leaves_push_failure_reason_none(
|
|
226
412
|
tmp_path: Path, repo_with_rejecting_remote: tuple[Path, Path]
|
|
227
413
|
) -> None:
|