code-coordinator 0.5.57__tar.gz → 0.5.58__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.57/code_coordinator.egg-info → code_coordinator-0.5.58}/PKG-INFO +1 -1
- {code_coordinator-0.5.57 → code_coordinator-0.5.58/code_coordinator.egg-info}/PKG-INFO +1 -1
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/db.py +8 -1
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/merge_queue.py +83 -4
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_merge.py +20 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_db.py +73 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_merge_queue.py +147 -17
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/tests/fixtures/board_sample.json +1 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/.github/workflows/release-tui.yml +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/.gitignore +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/CLAUDE.md +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/GOAL.md +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/LICENSE +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/MANIFEST.in +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/README.md +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/__init__.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/agent.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/audit.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/board_bool_guard.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/board_service.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/brain.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/claim.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/cli.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/client.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/comments.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/config.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dao.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/.gitignore +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/components.json +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/dist/assets/Gallery-da3qNiIw.js +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/dist/assets/Terminal-skVFCxPU.js +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/dist/assets/index-DltfZR5f.js +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/dist/index.html +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/dist/sw.js +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/eslint.config.js +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/index.html +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/package-lock.json +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/package.json +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/playwright.config.ts +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/postcss.config.js +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/App.tsx +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/api/client.ts +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/api/generated.ts +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/index.css +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/main.tsx +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/test-setup.ts +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/tailwind.config.js +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/tsconfig.json +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/tsconfig.node.json +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dashboard/webapp/vite.config.ts +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/deps.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/drive.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/events.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/filelock.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/freshness.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/gates.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/goal.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/health/context.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/health/models.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/health/render.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/health/units.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/hooks.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/interactive.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/models.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/network.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/notify.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/openapi.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/parentage.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/plans.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/progress.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/release_window.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/reports.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/review.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/smoke.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/split_work.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/state.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/test_author.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/test_report.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/usage.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/install-agent.sh +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/pyproject.toml +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/setup.cfg +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/__init__.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/acceptance/ms-33/audit_1039.rs +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/acceptance/ms-33/contract.md +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/acceptance/ms-33/manifest.yml +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/acceptance/ms-38/contract.md +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/acceptance/ms-38/manifest.yml +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/conftest.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_config.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_events.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_init.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_models.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_network.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_no_direct_gh_calls.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_review.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_session.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_split.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_state.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/Cargo.lock +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/Cargo.toml +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/cargo-config-local-quadraui.toml.example +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/src/app/audit.rs +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/src/app/chat.rs +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/src/app/data.rs +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/src/app/dialogs.rs +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/src/app/drive.rs +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/src/app/drive_queue.rs +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/src/app/escalation.rs +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/src/app/events.rs +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/src/app/fixtures.rs +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/src/app/fleet_health.rs +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/src/app/fleet_sessions.rs +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/src/app/fleet_terminals.rs +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/src/app/format.rs +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/src/app/milestone_dag.rs +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/src/app/mod.rs +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/src/app/msv.rs +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/src/app/pipeline.rs +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/src/app/plans.rs +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/src/app/render.rs +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/src/app/reports.rs +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/src/app/sessions.rs +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/src/app/settings_ui.rs +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/src/app/sidebar.rs +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/src/app/terminal.rs +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/src/app/tests.rs +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/src/app/types.rs +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/src/app/workspace.rs +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/src/bin/gtk.rs +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/src/commands.rs +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/src/lib.rs +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/src/main.rs +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/src/settings.rs +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/tests/acceptance.rs +0 -0
- {code_coordinator-0.5.57 → code_coordinator-0.5.58}/tui/tests/cli.rs +0 -0
|
@@ -188,7 +188,8 @@ def _ensure_schema(conn: sqlite3.Connection) -> None:
|
|
|
188
188
|
enqueued_at REAL,
|
|
189
189
|
assignment_type TEXT DEFAULT 'work',
|
|
190
190
|
required_gates TEXT,
|
|
191
|
-
ci_infra_reruns INTEGER NOT NULL DEFAULT 0
|
|
191
|
+
ci_infra_reruns INTEGER NOT NULL DEFAULT 0,
|
|
192
|
+
ci_stale_reruns INTEGER NOT NULL DEFAULT 0
|
|
192
193
|
);
|
|
193
194
|
|
|
194
195
|
CREATE TABLE IF NOT EXISTS plans (
|
|
@@ -697,6 +698,12 @@ def _migrate_add_columns(conn: sqlite3.Connection) -> None:
|
|
|
697
698
|
# predating this column (no auto-reruns spent yet), same as the
|
|
698
699
|
# column's own default for freshly-enqueued entries.
|
|
699
700
|
"ALTER TABLE merge_queue ADD COLUMN ci_infra_reruns INTEGER NOT NULL DEFAULT 0",
|
|
701
|
+
# #2197: the CI-staleness auto-rerun's OWN counter — see
|
|
702
|
+
# `coord.merge_queue.MAX_CI_STALE_RERUNS` and
|
|
703
|
+
# `QueuedMerge.ci_stale_reruns`'s docstring for why it is kept
|
|
704
|
+
# separate from `ci_infra_reruns` rather than sharing it. 0 for
|
|
705
|
+
# every row predating this column, same as a freshly-enqueued entry.
|
|
706
|
+
"ALTER TABLE merge_queue ADD COLUMN ci_stale_reruns INTEGER NOT NULL DEFAULT 0",
|
|
700
707
|
# #1956: verdict provenance — WHO recorded `review_verdict` and HOW
|
|
701
708
|
# (see coord.models.Assignment.verdict_source for the three values
|
|
702
709
|
# and why conflating them was the second half of #1956). NULL for
|
|
@@ -1417,6 +1417,19 @@ def is_ci_infra_reason(reason: str | None) -> bool:
|
|
|
1417
1417
|
# standing breakage.
|
|
1418
1418
|
MAX_CI_INFRA_RERUNS = 2
|
|
1419
1419
|
|
|
1420
|
+
# #2197: same shape as MAX_CI_INFRA_RERUNS above, but for the OTHER CI
|
|
1421
|
+
# auto-rerun trigger `process()` supports — a PASSING check recorded against
|
|
1422
|
+
# a base that has since moved (:data:`CI_STALE_PREFIX`, #1851's staleness
|
|
1423
|
+
# signal), not a failure. Deliberately a SEPARATE constant/counter from
|
|
1424
|
+
# `ci_infra_reruns`: the two triggers answer opposite readings of CI ("this
|
|
1425
|
+
# failed and needs to prove itself again" vs. "this passed but predates the
|
|
1426
|
+
# base and needs a fresh answer") and must be independently capped and
|
|
1427
|
+
# independently legible in the audit trail. A base that keeps moving out
|
|
1428
|
+
# from under one PR (a busy queue, or a genuinely wedged branch) would
|
|
1429
|
+
# otherwise auto-rerun forever; two tries rides out an ordinary busy tick
|
|
1430
|
+
# without masking a PR that just isn't going to catch up unattended.
|
|
1431
|
+
MAX_CI_STALE_RERUNS = 2
|
|
1432
|
+
|
|
1420
1433
|
|
|
1421
1434
|
def _ci_infra_reason(
|
|
1422
1435
|
ci: "CiStore", repo: str, number: int, failed: "list[CheckRun]"
|
|
@@ -2168,6 +2181,15 @@ class QueuedMerge:
|
|
|
2168
2181
|
# forever. 0 for every entry that has never hit a verdictless failure,
|
|
2169
2182
|
# and for rows predating this column.
|
|
2170
2183
|
ci_infra_reruns: int = 0
|
|
2184
|
+
# #2197: count of automatic `CiStore.rerun_for_pr` calls `process()` has
|
|
2185
|
+
# issued for this entry's CURRENT run of CI staleness (#1851) — a
|
|
2186
|
+
# PASSING check recorded against a base that has since moved. Kept
|
|
2187
|
+
# separate from `ci_infra_reruns` above on purpose (see
|
|
2188
|
+
# `MAX_CI_STALE_RERUNS`'s comment): the two triggers must be
|
|
2189
|
+
# independently capped and independently legible in the audit trail.
|
|
2190
|
+
# Capped at `MAX_CI_STALE_RERUNS`. 0 for every entry that has never gone
|
|
2191
|
+
# CI-stale, and for rows predating this column.
|
|
2192
|
+
ci_stale_reruns: int = 0
|
|
2171
2193
|
|
|
2172
2194
|
|
|
2173
2195
|
class GhOps(Protocol):
|
|
@@ -2459,6 +2481,9 @@ def load_queue() -> list[QueuedMerge]:
|
|
|
2459
2481
|
# #1892: column added via migration; NULL (pre-migration rows)
|
|
2460
2482
|
# decodes to 0 — no auto-reruns spent yet, same as a fresh entry.
|
|
2461
2483
|
ci_infra_reruns=row["ci_infra_reruns"] or 0,
|
|
2484
|
+
# #2197: same NULL-to-0 decoding as ci_infra_reruns above, for
|
|
2485
|
+
# rows predating this column.
|
|
2486
|
+
ci_stale_reruns=row["ci_stale_reruns"] or 0,
|
|
2462
2487
|
)
|
|
2463
2488
|
for row in rows
|
|
2464
2489
|
]
|
|
@@ -2475,15 +2500,16 @@ def save_queue(items: list[QueuedMerge]) -> None:
|
|
|
2475
2500
|
assignment_id, repo_name, repo_github, branch,
|
|
2476
2501
|
target_branch, issue_number, issue_title, state,
|
|
2477
2502
|
pr_number, pr_url, size, last_attempt, error, enqueued_at,
|
|
2478
|
-
assignment_type, required_gates, ci_infra_reruns
|
|
2479
|
-
|
|
2503
|
+
assignment_type, required_gates, ci_infra_reruns,
|
|
2504
|
+
ci_stale_reruns
|
|
2505
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)""",
|
|
2480
2506
|
(
|
|
2481
2507
|
item.assignment_id, item.repo_name, item.repo_github,
|
|
2482
2508
|
item.branch, item.target_branch, item.issue_number,
|
|
2483
2509
|
item.issue_title, item.state, item.pr_number, item.pr_url,
|
|
2484
2510
|
item.size, item.last_attempt, item.error, item.enqueued_at,
|
|
2485
2511
|
item.assignment_type, json.dumps(list(item.required_gates or [])),
|
|
2486
|
-
item.ci_infra_reruns,
|
|
2512
|
+
item.ci_infra_reruns, item.ci_stale_reruns,
|
|
2487
2513
|
),
|
|
2488
2514
|
)
|
|
2489
2515
|
|
|
@@ -4503,16 +4529,69 @@ def process(
|
|
|
4503
4529
|
# distinctly (`checks_stale`) from checks_failed/
|
|
4504
4530
|
# checks_pending above so an operator (and `coord merge
|
|
4505
4531
|
# --revalidate`, the remedy) can tell the three apart.
|
|
4532
|
+
#
|
|
4533
|
+
# #2197: this used to always block here, escalating to a
|
|
4534
|
+
# human (or, via `coord drive`, spending a merge attempt)
|
|
4535
|
+
# for a condition a re-run resolves on its own — the exact
|
|
4536
|
+
# #2170 regression (a docs-only base move stales a
|
|
4537
|
+
# perfectly good green PR). Mirror #1892's shape exactly:
|
|
4538
|
+
# auto-rerun via the SAME `CiStore.rerun_for_pr` this
|
|
4539
|
+
# module already calls unattended for verdictless
|
|
4540
|
+
# failures, up to `MAX_CI_STALE_RERUNS` — but track it
|
|
4541
|
+
# with its OWN counter (`ci_stale_reruns`), never
|
|
4542
|
+
# `ci_infra_reruns`, so a failed-then-stale (or
|
|
4543
|
+
# stale-then-failed) PR does not have one trigger silently
|
|
4544
|
+
# spend the other's budget, and so the audit trail can
|
|
4545
|
+
# always tell which condition an auto-rerun was answering.
|
|
4506
4546
|
if checks and _ci_checks_are_stale(
|
|
4507
4547
|
checks, gh_ops, entry.repo_github, entry.target_branch, smoke,
|
|
4508
4548
|
):
|
|
4549
|
+
if entry.ci_stale_reruns < MAX_CI_STALE_RERUNS:
|
|
4550
|
+
entry.ci_stale_reruns += 1
|
|
4551
|
+
reran = ci.rerun_for_pr(entry.repo_github, entry.pr_number)
|
|
4552
|
+
_log.info(
|
|
4553
|
+
"#2197 auto-rerun %d/%d for stale CI on %s#%d "
|
|
4554
|
+
"(PR #%s) (rerun_for_pr %s)",
|
|
4555
|
+
entry.ci_stale_reruns, MAX_CI_STALE_RERUNS,
|
|
4556
|
+
entry.repo_name, entry.issue_number,
|
|
4557
|
+
entry.pr_number,
|
|
4558
|
+
"triggered" if reran else "FAILED",
|
|
4559
|
+
)
|
|
4560
|
+
# #1891: same `CI_PENDING_PREFIX` wording the
|
|
4561
|
+
# genuinely-still-running case uses above — this is
|
|
4562
|
+
# what lets `coord drive`'s `is_ci_pending_reason`
|
|
4563
|
+
# check (coord/drive.py) treat a re-run THIS auto-
|
|
4564
|
+
# trigger just kicked off exactly like any other
|
|
4565
|
+
# in-flight CI: a bare wait, never a spent merge
|
|
4566
|
+
# attempt. The queue resumes it automatically once
|
|
4567
|
+
# the re-run reports, no operator needed.
|
|
4568
|
+
msg = (
|
|
4569
|
+
f"{CI_PENDING_PREFIX} re-run triggered for CI "
|
|
4570
|
+
"checks that predate the current base (#2197 "
|
|
4571
|
+
f"auto-rerun {entry.ci_stale_reruns}/"
|
|
4572
|
+
f"{MAX_CI_STALE_RERUNS} "
|
|
4573
|
+
f"{'triggered' if reran else 'failed to trigger'})"
|
|
4574
|
+
)
|
|
4575
|
+
entry.error = msg
|
|
4576
|
+
events.append(MergeEvent(entry, "checks_stale_rerun", msg))
|
|
4577
|
+
continue # #292: skip, don't halt the group
|
|
4509
4578
|
msg = (
|
|
4510
4579
|
f"{CI_STALE_PREFIX} checks predate the current base "
|
|
4511
|
-
"—
|
|
4580
|
+
f"— auto-rerun budget exhausted ({entry.ci_stale_reruns}/"
|
|
4581
|
+
f"{MAX_CI_STALE_RERUNS}); re-run CI (`coord merge "
|
|
4582
|
+
"--revalidate`) before merging"
|
|
4512
4583
|
)
|
|
4513
4584
|
entry.error = msg
|
|
4514
4585
|
events.append(MergeEvent(entry, "checks_stale", msg))
|
|
4515
4586
|
continue # #292: skip, don't halt the group
|
|
4587
|
+
# #2197: reached only once the checks are genuinely fresh
|
|
4588
|
+
# (or the smoke-side #1738/#1778/#1847 base-move exemption
|
|
4589
|
+
# spared them) — mirrors the `ci_infra_reruns = 0` reset
|
|
4590
|
+
# above and for the identical reason: whatever staleness
|
|
4591
|
+
# streak the budget was tracking has now actually resolved,
|
|
4592
|
+
# so a LATER base move starts its own budget from zero
|
|
4593
|
+
# rather than inheriting an unrelated exhausted count.
|
|
4594
|
+
entry.ci_stale_reruns = 0
|
|
4516
4595
|
# #1318: cache is_epic_issue lookups for this entry — the same
|
|
4517
4596
|
# referenced number can show up in both the PR body and one or
|
|
4518
4597
|
# more commit messages below, and each lookup is a `gh` round
|
|
@@ -2803,8 +2803,28 @@ class TestMergeRevalidateCiRerunCli:
|
|
|
2803
2803
|
def __init__(self):
|
|
2804
2804
|
self.is_available = True
|
|
2805
2805
|
self.rerun_calls: list = []
|
|
2806
|
+
self._checks_since_rerun = 0
|
|
2806
2807
|
|
|
2807
2808
|
def list_checks_for_pr(self, repo, number):
|
|
2809
|
+
# #2197: once --revalidate has triggered its own re-run,
|
|
2810
|
+
# the read immediately after (inside `wait_for_ci_settle`)
|
|
2811
|
+
# still reports the OLD stale-but-"completed" record — real
|
|
2812
|
+
# GitHub can lag a beat before a rerun registers, and
|
|
2813
|
+
# `wait_for_ci_settle` is specifically tolerant of a
|
|
2814
|
+
# "completed" read regardless of content. Every read AFTER
|
|
2815
|
+
# that one reflects the new run actually executing (real
|
|
2816
|
+
# GitHub behaviour), which is what stops `process()`'s own
|
|
2817
|
+
# #2197 auto-rerun from firing a REDUNDANT `gh run rerun`
|
|
2818
|
+
# for the very run --revalidate just triggered and is
|
|
2819
|
+
# already watching settle.
|
|
2820
|
+
if self.rerun_calls:
|
|
2821
|
+
self._checks_since_rerun += 1
|
|
2822
|
+
if self._checks_since_rerun > 1:
|
|
2823
|
+
return [SimpleNamespace(
|
|
2824
|
+
name="build", status="in_progress",
|
|
2825
|
+
conclusion=None, started_at=None,
|
|
2826
|
+
completed_at=None,
|
|
2827
|
+
)]
|
|
2808
2828
|
# Green, but started well before the (mocked) base commit
|
|
2809
2829
|
# time below — the #1851 staleness signal.
|
|
2810
2830
|
return [SimpleNamespace(
|
|
@@ -319,6 +319,79 @@ class TestMergeQueueCiInfraRerunsColumn:
|
|
|
319
319
|
conn.close()
|
|
320
320
|
|
|
321
321
|
|
|
322
|
+
# ── merge_queue.ci_stale_reruns column (#2197) ───────────────────────────────
|
|
323
|
+
|
|
324
|
+
# Same pre-migration shape as _PRE_1892_MERGE_QUEUE_TABLE, plus the #1892
|
|
325
|
+
# column — exercises the #2197 migration landing on a DB that already
|
|
326
|
+
# picked up ci_infra_reruns but predates ci_stale_reruns.
|
|
327
|
+
_PRE_2197_MERGE_QUEUE_TABLE = """
|
|
328
|
+
CREATE TABLE merge_queue (
|
|
329
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
330
|
+
assignment_id TEXT NOT NULL,
|
|
331
|
+
repo_name TEXT NOT NULL,
|
|
332
|
+
repo_github TEXT NOT NULL,
|
|
333
|
+
branch TEXT NOT NULL,
|
|
334
|
+
target_branch TEXT NOT NULL,
|
|
335
|
+
issue_number INTEGER NOT NULL,
|
|
336
|
+
issue_title TEXT NOT NULL,
|
|
337
|
+
state TEXT NOT NULL DEFAULT 'pending',
|
|
338
|
+
pr_number INTEGER,
|
|
339
|
+
pr_url TEXT,
|
|
340
|
+
size INTEGER,
|
|
341
|
+
last_attempt REAL,
|
|
342
|
+
error TEXT,
|
|
343
|
+
enqueued_at REAL,
|
|
344
|
+
assignment_type TEXT DEFAULT 'work',
|
|
345
|
+
required_gates TEXT,
|
|
346
|
+
ci_infra_reruns INTEGER NOT NULL DEFAULT 0
|
|
347
|
+
)
|
|
348
|
+
"""
|
|
349
|
+
|
|
350
|
+
|
|
351
|
+
class TestMergeQueueCiStaleRerunsColumn:
|
|
352
|
+
def test_fresh_database_has_it_from_the_create(
|
|
353
|
+
self, isolated_conn: sqlite3.Connection
|
|
354
|
+
) -> None:
|
|
355
|
+
assert "ci_stale_reruns" in _merge_queue_columns(isolated_conn)
|
|
356
|
+
|
|
357
|
+
def test_existing_database_gains_it_in_place(self) -> None:
|
|
358
|
+
"""The real path: a coord.db created before #2197 (but after #1892),
|
|
359
|
+
upgraded by _ensure_schema."""
|
|
360
|
+
conn = sqlite3.connect(":memory:")
|
|
361
|
+
conn.row_factory = sqlite3.Row
|
|
362
|
+
conn.execute(_PRE_2197_MERGE_QUEUE_TABLE)
|
|
363
|
+
conn.execute(
|
|
364
|
+
"INSERT INTO merge_queue "
|
|
365
|
+
"(assignment_id, repo_name, repo_github, branch, target_branch, "
|
|
366
|
+
"issue_number, issue_title) "
|
|
367
|
+
"VALUES ('w1', 'api', 'acme/api', 'b', 'main', 7, 't')"
|
|
368
|
+
)
|
|
369
|
+
conn.commit()
|
|
370
|
+
assert "ci_stale_reruns" not in _merge_queue_columns(conn)
|
|
371
|
+
|
|
372
|
+
_ensure_schema(conn)
|
|
373
|
+
|
|
374
|
+
assert "ci_stale_reruns" in _merge_queue_columns(conn)
|
|
375
|
+
# A pre-existing row survives and reads as "no auto-reruns spent
|
|
376
|
+
# yet" — the same default a freshly-enqueued entry gets.
|
|
377
|
+
row = conn.execute(
|
|
378
|
+
"SELECT ci_stale_reruns FROM merge_queue WHERE issue_number = 7"
|
|
379
|
+
).fetchone()
|
|
380
|
+
assert row["ci_stale_reruns"] == 0
|
|
381
|
+
conn.close()
|
|
382
|
+
|
|
383
|
+
def test_migration_is_idempotent(self) -> None:
|
|
384
|
+
conn = sqlite3.connect(":memory:")
|
|
385
|
+
conn.row_factory = sqlite3.Row
|
|
386
|
+
conn.execute(_PRE_2197_MERGE_QUEUE_TABLE)
|
|
387
|
+
conn.commit()
|
|
388
|
+
_ensure_schema(conn)
|
|
389
|
+
_ensure_schema(conn)
|
|
390
|
+
_ensure_schema(conn)
|
|
391
|
+
assert "ci_stale_reruns" in _merge_queue_columns(conn)
|
|
392
|
+
conn.close()
|
|
393
|
+
|
|
394
|
+
|
|
322
395
|
# ── override_connection ────────────────────────────────────────────────────────
|
|
323
396
|
|
|
324
397
|
class TestOverrideConnection:
|
|
@@ -153,6 +153,15 @@ class TestPersistence:
|
|
|
153
153
|
again = {x.assignment_id: x.ci_infra_reruns for x in load_queue()}
|
|
154
154
|
assert again == {"a": 2, "b": 0}
|
|
155
155
|
|
|
156
|
+
def test_roundtrip_preserves_ci_stale_reruns(self, coord_db) -> None:
|
|
157
|
+
# #2197: same durability requirement as ci_infra_reruns above, for
|
|
158
|
+
# the CI-staleness auto-rerun's own independent counter.
|
|
159
|
+
a = _q("a")
|
|
160
|
+
a.ci_stale_reruns = 2
|
|
161
|
+
save_queue([a, _q("b")])
|
|
162
|
+
again = {x.assignment_id: x.ci_stale_reruns for x in load_queue()}
|
|
163
|
+
assert again == {"a": 2, "b": 0}
|
|
164
|
+
|
|
156
165
|
|
|
157
166
|
class TestEnqueue:
|
|
158
167
|
def _assignment(self, *, branch: str | None = "worker/foo") -> Assignment:
|
|
@@ -5626,19 +5635,43 @@ class TestCiRevalidationCandidates:
|
|
|
5626
5635
|
class TestProcessCiStaleness:
|
|
5627
5636
|
"""#1851: `process()` refuses to merge a green-but-CI-stale entry, in
|
|
5628
5637
|
both the live path and the `--dry-run` preview — named distinctly
|
|
5629
|
-
(`checks_stale`) from `checks_failed`/`checks_pending`.
|
|
5638
|
+
(`checks_stale`) from `checks_failed`/`checks_pending`.
|
|
5639
|
+
|
|
5640
|
+
#2197: the live path no longer blocks on the FIRST stale reading — it
|
|
5641
|
+
auto-reruns CI first (mirroring #1892's verdictless-failure arm, same
|
|
5642
|
+
`CiStore.rerun_for_pr` call), parking as `checks_stale_rerun`
|
|
5643
|
+
(`CI_PENDING_PREFIX` wording, so `coord drive`'s #1891 "wait, don't
|
|
5644
|
+
spend an attempt" logic applies) up to `MAX_CI_STALE_RERUNS` times.
|
|
5645
|
+
Only once that budget is exhausted does it report the terminal
|
|
5646
|
+
`checks_stale` block a human has to act on. `--dry-run` is unaffected —
|
|
5647
|
+
it only ever previews, never mutates, so it keeps reporting
|
|
5648
|
+
`checks_stale` on the very first pass and never calls `rerun_for_pr`.
|
|
5649
|
+
"""
|
|
5630
5650
|
|
|
5631
5651
|
@staticmethod
|
|
5632
|
-
def _ci(started_at: float | None):
|
|
5652
|
+
def _ci(started_at: float | None, *, rerun_ok: bool = True):
|
|
5633
5653
|
from types import SimpleNamespace
|
|
5634
5654
|
|
|
5635
5655
|
class _Ci:
|
|
5636
5656
|
is_available = True
|
|
5637
|
-
|
|
5638
|
-
|
|
5657
|
+
|
|
5658
|
+
def __init__(self):
|
|
5659
|
+
self.rerun_calls: list = []
|
|
5660
|
+
# Mutable — a test can flip this between two `process()`
|
|
5661
|
+
# calls to simulate the re-run GitHub was asked to trigger
|
|
5662
|
+
# reporting back, the same way a real CiStore's backing
|
|
5663
|
+
# check-run data would change between two live reads.
|
|
5664
|
+
self.checks = [SimpleNamespace(
|
|
5639
5665
|
name="build", status="completed", conclusion="success",
|
|
5640
5666
|
started_at=started_at, completed_at=None,
|
|
5641
5667
|
)]
|
|
5668
|
+
|
|
5669
|
+
def list_checks_for_pr(self, repo, number):
|
|
5670
|
+
return self.checks
|
|
5671
|
+
|
|
5672
|
+
def rerun_for_pr(self, repo, number):
|
|
5673
|
+
self.rerun_calls.append((repo, number))
|
|
5674
|
+
return rerun_ok
|
|
5642
5675
|
return _Ci()
|
|
5643
5676
|
|
|
5644
5677
|
class _Gh(FakeGh):
|
|
@@ -5646,37 +5679,124 @@ class TestProcessCiStaleness:
|
|
|
5646
5679
|
def get_branch_commit_timestamp(self, repo, branch):
|
|
5647
5680
|
return self.ts
|
|
5648
5681
|
|
|
5649
|
-
def
|
|
5682
|
+
def test_first_stale_reading_auto_reruns_instead_of_blocking(self) -> None:
|
|
5683
|
+
"""The exact #2170 regression: a docs-only base move stales an
|
|
5684
|
+
otherwise-green PR. The first live pass must not escalate — it
|
|
5685
|
+
triggers a CI re-run and parks, unattended."""
|
|
5650
5686
|
items = [_q("w1", pr=99)]
|
|
5651
5687
|
gh = self._Gh()
|
|
5652
|
-
|
|
5688
|
+
ci = self._ci(started_at=500.0)
|
|
5689
|
+
events = process(items, gh, ci_store=ci)
|
|
5653
5690
|
assert items[0].state == PENDING
|
|
5654
5691
|
assert gh.merge_calls == []
|
|
5692
|
+
assert ci.rerun_calls == [("acme/api", 99)]
|
|
5693
|
+
assert items[0].ci_stale_reruns == 1
|
|
5655
5694
|
kinds = [e.kind for e in events]
|
|
5656
|
-
assert "
|
|
5695
|
+
assert "checks_stale_rerun" in kinds
|
|
5696
|
+
assert "checks_stale" not in kinds
|
|
5657
5697
|
assert "checks_failed" not in kinds
|
|
5658
5698
|
assert "checks_pending" not in kinds
|
|
5699
|
+
# #1891: CI_PENDING_PREFIX wording — `coord drive` waits rather
|
|
5700
|
+
# than spending a merge attempt on this.
|
|
5701
|
+
assert items[0].error.startswith("CI running:")
|
|
5702
|
+
|
|
5703
|
+
def test_merges_on_a_later_pass_once_the_rerun_reports_green(self) -> None:
|
|
5704
|
+
"""Full #2170 lifecycle, end to end: stale → auto-rerun → a LATER
|
|
5705
|
+
`process()` tick (the re-run having reported back fresh and green,
|
|
5706
|
+
no operator involved) actually merges it. Acceptance criterion,
|
|
5707
|
+
verbatim from #2197: "process() triggers a CI re-run and the entry
|
|
5708
|
+
parks as checks_pending without spending an attempt, then merges on
|
|
5709
|
+
a later pass once green.\""""
|
|
5710
|
+
items = [_q("w1", pr=99)]
|
|
5711
|
+
gh = self._Gh()
|
|
5712
|
+
ci = self._ci(started_at=500.0)
|
|
5713
|
+
|
|
5714
|
+
first = process(items, gh, ci_store=ci)
|
|
5715
|
+
assert items[0].state == PENDING
|
|
5716
|
+
assert "checks_stale_rerun" in [e.kind for e in first]
|
|
5717
|
+
assert ci.rerun_calls == [("acme/api", 99)]
|
|
5718
|
+
|
|
5719
|
+
# The re-run GitHub was asked to trigger has now reported back: a
|
|
5720
|
+
# fresh, green check — the same `ci` object, no new `coord merge`
|
|
5721
|
+
# flag involved.
|
|
5722
|
+
from types import SimpleNamespace
|
|
5723
|
+
ci.checks = [SimpleNamespace(
|
|
5724
|
+
name="build", status="completed", conclusion="success",
|
|
5725
|
+
started_at=1500.0, completed_at=None,
|
|
5726
|
+
)]
|
|
5727
|
+
|
|
5728
|
+
second = process(items, gh, ci_store=ci)
|
|
5729
|
+
assert items[0].state == MERGED
|
|
5730
|
+
assert ci.rerun_calls == [("acme/api", 99)] # unchanged — no 2nd rerun
|
|
5731
|
+
kinds = [e.kind for e in second]
|
|
5732
|
+
assert "merged" in kinds
|
|
5733
|
+
assert "checks_stale" not in kinds
|
|
5734
|
+
assert "checks_stale_rerun" not in kinds
|
|
5735
|
+
|
|
5736
|
+
def test_reruns_stop_at_the_cap_and_then_reports_checks_stale(self) -> None:
|
|
5737
|
+
from coord.merge_queue import MAX_CI_STALE_RERUNS
|
|
5738
|
+
|
|
5739
|
+
items = [_q("w1", pr=99)]
|
|
5740
|
+
gh = self._Gh()
|
|
5741
|
+
ci = self._ci(started_at=500.0)
|
|
5742
|
+
for expected in range(1, MAX_CI_STALE_RERUNS + 1):
|
|
5743
|
+
events = process(items, gh, ci_store=ci)
|
|
5744
|
+
assert items[0].ci_stale_reruns == expected
|
|
5745
|
+
assert "checks_stale_rerun" in [e.kind for e in events]
|
|
5746
|
+
assert len(ci.rerun_calls) == MAX_CI_STALE_RERUNS
|
|
5747
|
+
|
|
5748
|
+
# Budget exhausted — the next pass reports the terminal block and
|
|
5749
|
+
# triggers no further rerun.
|
|
5750
|
+
events = process(items, gh, ci_store=ci)
|
|
5751
|
+
assert len(ci.rerun_calls) == MAX_CI_STALE_RERUNS # unchanged
|
|
5752
|
+
assert items[0].ci_stale_reruns == MAX_CI_STALE_RERUNS # unchanged
|
|
5753
|
+
kinds = [e.kind for e in events]
|
|
5754
|
+
assert "checks_stale" in kinds
|
|
5755
|
+
assert "checks_stale_rerun" not in kinds
|
|
5756
|
+
assert items[0].state == PENDING
|
|
5659
5757
|
|
|
5660
5758
|
def test_live_merge_proceeds_when_checks_fresh(self) -> None:
|
|
5661
5759
|
items = [_q("w1", pr=99)]
|
|
5662
5760
|
gh = self._Gh()
|
|
5663
|
-
|
|
5761
|
+
ci = self._ci(started_at=1500.0)
|
|
5762
|
+
events = process(items, gh, ci_store=ci)
|
|
5664
5763
|
assert items[0].state == MERGED
|
|
5764
|
+
assert ci.rerun_calls == []
|
|
5665
5765
|
kinds = [e.kind for e in events]
|
|
5666
5766
|
assert "checks_stale" not in kinds
|
|
5767
|
+
assert "checks_stale_rerun" not in kinds
|
|
5768
|
+
|
|
5769
|
+
def test_resets_after_a_clean_pass_so_a_later_staleness_starts_fresh(self) -> None:
|
|
5770
|
+
"""Mirrors `ci_infra_reruns`'s own reset test (#1892): a later,
|
|
5771
|
+
unrelated base move must not inherit a budget already spent on an
|
|
5772
|
+
earlier staleness streak."""
|
|
5773
|
+
from coord.merge_queue import MAX_CI_STALE_RERUNS
|
|
5774
|
+
|
|
5775
|
+
items = [_q("w1", pr=99)]
|
|
5776
|
+
items[0].ci_stale_reruns = MAX_CI_STALE_RERUNS
|
|
5777
|
+
gh = self._Gh()
|
|
5778
|
+
ci = self._ci(started_at=1500.0) # fresh — resolves the old streak
|
|
5779
|
+
process(items, gh, ci_store=ci)
|
|
5780
|
+
assert items[0].state == MERGED
|
|
5781
|
+
assert items[0].ci_stale_reruns == 0
|
|
5667
5782
|
|
|
5668
5783
|
def test_force_merge_overrides_ci_staleness(self) -> None:
|
|
5669
5784
|
items = [_q("w1", pr=99)]
|
|
5670
5785
|
gh = self._Gh()
|
|
5671
|
-
|
|
5786
|
+
ci = self._ci(started_at=500.0)
|
|
5787
|
+
process(items, gh, ci_store=ci, force_merge=True)
|
|
5672
5788
|
assert items[0].state == MERGED
|
|
5789
|
+
assert ci.rerun_calls == [] # force_merge skips the CI gate entirely
|
|
5673
5790
|
|
|
5674
|
-
def
|
|
5791
|
+
def test_dry_run_previews_checks_stale_without_rerunning(self) -> None:
|
|
5675
5792
|
items = [_q("w1", pr=99)]
|
|
5676
5793
|
gh = self._Gh()
|
|
5677
|
-
|
|
5794
|
+
ci = self._ci(started_at=500.0)
|
|
5795
|
+
events = process(items, gh, ci_store=ci, dry_run=True)
|
|
5678
5796
|
assert items[0].state == PENDING
|
|
5679
5797
|
assert gh.merge_calls == []
|
|
5798
|
+
assert ci.rerun_calls == []
|
|
5799
|
+
assert items[0].ci_stale_reruns == 0
|
|
5680
5800
|
kinds = [e.kind for e in events]
|
|
5681
5801
|
assert "checks_stale" in kinds
|
|
5682
5802
|
assert "merged" not in kinds
|
|
@@ -6020,19 +6140,29 @@ class TestProcessCiInfraAutoRerun:
|
|
|
6020
6140
|
|
|
6021
6141
|
def test_jobs_api_never_called_on_the_all_green_path(self) -> None:
|
|
6022
6142
|
"""Acceptance criterion: the extra jobs API call happens only on the
|
|
6023
|
-
failure path — assert it is not called when all checks pass.
|
|
6143
|
+
failure path — assert it is not called when all checks pass.
|
|
6144
|
+
|
|
6145
|
+
#2197: a plain `FakeGh` has no `get_branch_commit_timestamp`, which
|
|
6146
|
+
makes the unrelated #1851 staleness gate fail closed (stale) — and
|
|
6147
|
+
since #2197 that ALSO calls `rerun_for_pr` (the very same method
|
|
6148
|
+
this test's `rerun_calls` tracks for the #1892 dimension), so the
|
|
6149
|
+
check here must be unambiguously fresh to keep this test isolated
|
|
6150
|
+
to the jobs-call dimension it's actually about.
|
|
6151
|
+
"""
|
|
6024
6152
|
items = [_q("w1", pr=99)]
|
|
6025
|
-
|
|
6153
|
+
|
|
6154
|
+
class _Gh(FakeGh):
|
|
6155
|
+
def get_branch_commit_timestamp(self, repo, branch):
|
|
6156
|
+
return 1000.0
|
|
6157
|
+
|
|
6158
|
+
gh = _Gh()
|
|
6026
6159
|
passing = _check("e2e", conclusion="success")
|
|
6027
6160
|
passing.run_id = "999"
|
|
6161
|
+
passing.started_at = 1500.0 # after the mocked base — fresh, not stale
|
|
6028
6162
|
ci = self._Ci(checks=[passing], jobs_by_run={})
|
|
6029
6163
|
|
|
6030
6164
|
process(items, gh, ci_store=ci)
|
|
6031
6165
|
|
|
6032
|
-
# #1892's acceptance criterion is specifically about the extra jobs
|
|
6033
|
-
# call, not about whether the merge itself completes — a plain
|
|
6034
|
-
# `FakeGh` has no `get_branch_commit_timestamp`, so the unrelated
|
|
6035
|
-
# #1851 staleness gate fails closed regardless of #1892.
|
|
6036
6166
|
assert ci.jobs_calls == []
|
|
6037
6167
|
assert ci.rerun_calls == []
|
|
6038
6168
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{code_coordinator-0.5.57 → code_coordinator-0.5.58}/code_coordinator.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{code_coordinator-0.5.57 → code_coordinator-0.5.58}/code_coordinator.egg-info/entry_points.txt
RENAMED
|
File without changes
|
|
File without changes
|
{code_coordinator-0.5.57 → code_coordinator-0.5.58}/code_coordinator.egg-info/scm_file_list.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|