code-coordinator 0.5.67__tar.gz → 0.5.69__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.67 → code_coordinator-0.5.69}/PKG-INFO +1 -1
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/agent.py +56 -1
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/commands/drive_queue.py +108 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/drive_queue.py +49 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/merge_queue.py +39 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_agent.py +60 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_drive_queue.py +227 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_merge_queue.py +26 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_operational_defaults.py +111 -1
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_thin_client_board_audit.py +12 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/.github/workflows/release-tui.yml +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/.gitignore +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/CLAUDE.md +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/GOAL.md +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/LICENSE +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/MANIFEST.in +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/README.md +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/__init__.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/audit.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/board_bool_guard.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/board_service.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/brain.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/claim.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/cli.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/client.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/comments.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/config.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dao.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/.gitignore +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/components.json +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/dist/assets/Gallery-da3qNiIw.js +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/dist/assets/Terminal-skVFCxPU.js +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/dist/assets/index-DltfZR5f.js +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/dist/index.html +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/dist/sw.js +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/eslint.config.js +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/index.html +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/package-lock.json +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/package.json +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/playwright.config.ts +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/postcss.config.js +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/App.tsx +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/api/client.ts +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/api/generated.ts +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/index.css +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/main.tsx +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/test-setup.ts +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/tailwind.config.js +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/tsconfig.json +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/tsconfig.node.json +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dashboard/webapp/vite.config.ts +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/db.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/deps.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/drive.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/events.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/filelock.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/freshness.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/gates.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/goal.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/health/context.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/health/models.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/health/render.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/health/units.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/hooks.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/interactive.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/models.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/network.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/notify.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/openapi.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/parentage.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/plans.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/progress.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/release_window.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/reports.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/review.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/smoke.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/split_work.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/state.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/test_author.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/test_report.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/usage.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/install-agent.sh +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/pyproject.toml +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/setup.cfg +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/__init__.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/acceptance/ms-33/audit_1039.rs +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/acceptance/ms-33/contract.md +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/acceptance/ms-33/manifest.yml +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/acceptance/ms-38/contract.md +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/acceptance/ms-38/manifest.yml +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/conftest.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_config.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_db.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_events.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_init.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_models.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_network.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_no_direct_gh_calls.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_review.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_session.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_split.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_state.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/Cargo.lock +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/Cargo.toml +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/cargo-config-local-quadraui.toml.example +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/src/app/audit.rs +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/src/app/chat.rs +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/src/app/data.rs +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/src/app/dialogs.rs +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/src/app/drive.rs +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/src/app/drive_queue.rs +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/src/app/escalation.rs +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/src/app/events.rs +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/src/app/fixtures.rs +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/src/app/fleet_health.rs +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/src/app/fleet_sessions.rs +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/src/app/fleet_terminals.rs +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/src/app/format.rs +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/src/app/milestone_dag.rs +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/src/app/mod.rs +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/src/app/msv.rs +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/src/app/pipeline.rs +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/src/app/plans.rs +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/src/app/render.rs +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/src/app/reports.rs +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/src/app/sessions.rs +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/src/app/settings_ui.rs +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/src/app/sidebar.rs +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/src/app/terminal.rs +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/src/app/tests.rs +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/src/app/types.rs +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/src/app/workspace.rs +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/src/bin/gtk.rs +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/src/commands.rs +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/src/lib.rs +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/src/main.rs +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/src/settings.rs +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/tests/acceptance.rs +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/tests/cli.rs +0 -0
- {code_coordinator-0.5.67 → code_coordinator-0.5.69}/tui/tests/fixtures/board_sample.json +0 -0
|
@@ -747,6 +747,43 @@ def _graphify_update(repo_path: Path, *, timeout: float = 600.0) -> tuple[bool,
|
|
|
747
747
|
return True, (result.stdout or "").strip()
|
|
748
748
|
|
|
749
749
|
|
|
750
|
+
# #2212: count how many Bash commands in a worker's leg invoked `graphify` —
|
|
751
|
+
# the measurable half of the graph-first navigation rule in
|
|
752
|
+
# WORKER_SYSTEM_PROMPT above. The rule has lapsed into disuse before (see
|
|
753
|
+
# #2212's issue body) because nothing tracked whether workers actually
|
|
754
|
+
# queried the graph; this is written into every reaped worker's log (see
|
|
755
|
+
# the "# reap: done" line in `_reap`) as a plain `grep`-able counter — zero
|
|
756
|
+
# across N consecutive legs means the prompt instruction isn't landing.
|
|
757
|
+
# Deliberately NOT a DB column: this is a cheap, best-effort signal, not a
|
|
758
|
+
# gate anything blocks on, so it stays out of the Assignment schema/migrations.
|
|
759
|
+
# Separators recognized before a command token: `;`, `&`, `|` (covers `&&`
|
|
760
|
+
# and `||` too, since `\s*` after the class soaks up the second char) and a
|
|
761
|
+
# bare newline — Claude Code's Bash tool very commonly emits multi-line
|
|
762
|
+
# command strings (e.g. `cd repo\ngraphify query "foo"`) that aren't joined
|
|
763
|
+
# with `;`/`&&`, so newline must count as a separator or those legs
|
|
764
|
+
# undercount to 0 (#2212 review).
|
|
765
|
+
_GRAPHIFY_INVOCATION_RE = re.compile(r"(?:^|[\n;&|]\s*)graphify(?:\s|$)")
|
|
766
|
+
|
|
767
|
+
|
|
768
|
+
def _count_graphify_invocations(bash_commands: list[str]) -> int:
|
|
769
|
+
"""Count *bash_commands* entries that invoke the ``graphify`` CLI.
|
|
770
|
+
|
|
771
|
+
Matches ``graphify`` as a command token — at the start of the string,
|
|
772
|
+
after a shell separator (``;``, ``&&``, ``||``, ``|``), or after a bare
|
|
773
|
+
newline (multi-line Bash tool calls, e.g. ``cd repo\\ngraphify query
|
|
774
|
+
"..."``) — so ``graphify query "..."`` counts but a path or string that
|
|
775
|
+
merely contains the substring ``graphify`` (e.g. ``cat
|
|
776
|
+
graphify-out/graph.json``, where ``graphify`` is a path component rather
|
|
777
|
+
than a command) does not.
|
|
778
|
+
|
|
779
|
+
Note this counts matching *entries* in ``bash_commands``, not individual
|
|
780
|
+
invocations: a single command like ``"graphify query a && graphify query
|
|
781
|
+
b"`` counts once, not twice. Treat the result as an "at least one graph
|
|
782
|
+
query this leg" signal, not an exact invocation tally.
|
|
783
|
+
"""
|
|
784
|
+
return sum(1 for cmd in bash_commands if cmd and _GRAPHIFY_INVOCATION_RE.search(cmd))
|
|
785
|
+
|
|
786
|
+
|
|
750
787
|
def _infer_repo_github_slug(repo_path: str) -> str | None:
|
|
751
788
|
"""Best-effort ``owner/repo`` slug for *repo_path*'s ``origin`` remote (#1492).
|
|
752
789
|
|
|
@@ -2878,6 +2915,11 @@ absolute path outside your cwd). That shared checkout is not yours: edits \
|
|
|
2878
2915
|
there are lost, or collide with other workers running at the same time. If \
|
|
2879
2916
|
your worktree looks unexpectedly empty or unwritable, STOP and report it — \
|
|
2880
2917
|
do not fall back to editing the base checkout and copying files over.
|
|
2918
|
+
- For "where is X handled" / "what calls this" / architecture questions, \
|
|
2919
|
+
query the codebase graph first: `graphify query "<question>"` via Bash. \
|
|
2920
|
+
Grep/Read are for confirming an exact string or line, not for discovering \
|
|
2921
|
+
structure. No `graphify-out/graph.json` in this worktree? Skip straight to \
|
|
2922
|
+
grep, silently — do not stop to build one (#2212).
|
|
2881
2923
|
|
|
2882
2924
|
This session is ONE-SHOT and non-interactive (#1394):
|
|
2883
2925
|
- There is no next turn and no human to reply to you. Background-task \
|
|
@@ -7440,7 +7482,20 @@ class AgentServer:
|
|
|
7440
7482
|
try:
|
|
7441
7483
|
with open(assignment.log_path, "a") as reopen:
|
|
7442
7484
|
final_status = assignment.status if assignment else "unknown"
|
|
7443
|
-
|
|
7485
|
+
# #2212: log a plain `graphify_invocations=N` counter alongside
|
|
7486
|
+
# the existing reap line — this is the measurable half of the
|
|
7487
|
+
# graph-first navigation rule (see WORKER_SYSTEM_PROMPT and
|
|
7488
|
+
# `_count_graphify_invocations`). `_worker_summary` is `None`
|
|
7489
|
+
# for a non-stream-json log or a parse failure; counting 0 in
|
|
7490
|
+
# that case is the honest answer, not a lie — best-effort like
|
|
7491
|
+
# everything else in this function.
|
|
7492
|
+
_graphify_invocations = _count_graphify_invocations(
|
|
7493
|
+
_worker_summary.bash_commands if _worker_summary is not None else []
|
|
7494
|
+
)
|
|
7495
|
+
reopen.write(
|
|
7496
|
+
f"# reap: done (exit_code={exit_code} status={final_status} "
|
|
7497
|
+
f"graphify_invocations={_graphify_invocations})\n"
|
|
7498
|
+
)
|
|
7444
7499
|
except (OSError, AttributeError):
|
|
7445
7500
|
pass
|
|
7446
7501
|
|
|
@@ -1006,6 +1006,105 @@ def _fetch_gate_a_pending(entries: list) -> dict[str, bool]:
|
|
|
1006
1006
|
return pending
|
|
1007
1007
|
|
|
1008
1008
|
|
|
1009
|
+
def _fetch_live_ci_gate(
|
|
1010
|
+
entries: list, config_path: Path | None
|
|
1011
|
+
) -> dict[str, bool]:
|
|
1012
|
+
"""``{entry_key: still_blocked}`` for every ``parked`` entry whose OWN
|
|
1013
|
+
park reason is CI-shaped (#1891/#1892) — a FRESH, single-entry
|
|
1014
|
+
re-derivation of the SAME gate ``coord merge --plan`` computes, taken
|
|
1015
|
+
live, right now, this tick (#2182).
|
|
1016
|
+
|
|
1017
|
+
THE GAP THIS CLOSES. On the daemon host — the only machine that ever
|
|
1018
|
+
runs this tick (``docs/AGENT_OPERATIONS.md``) — ``_fetch_board_view``
|
|
1019
|
+
reads the local DB directly and never populates ``merge_plan`` at all
|
|
1020
|
+
(see ``_local_merge_queue_rows``'s docstring): it is *computed*, not
|
|
1021
|
+
stored, and computing it needs a live ``ci_store``/``gh_ops`` this
|
|
1022
|
+
read-only board fetch deliberately does not build. So
|
|
1023
|
+
``IssueFacts.merge_ci_pending_live`` is unconditionally ``False`` on
|
|
1024
|
+
every parked entry this tick ever sees, and the ONLY thing that used to
|
|
1025
|
+
release such a park was :data:`coord.drive_queue.PARK_STALE_SECONDS` —
|
|
1026
|
+
up to 45 minutes — even at the instant CI actually reports, because
|
|
1027
|
+
nothing on the read path ever re-checked. claude-coordinator#2159 is
|
|
1028
|
+
that gap caught live: at 03:25:46 UTC, ``coord merge --dry-run`` for the
|
|
1029
|
+
entry read READY (no gate objection) while ``coord drive-queue list``,
|
|
1030
|
+
reading the SAME board a moment later, still read ``parked`` — the two
|
|
1031
|
+
surfaces disagreeing about the exact same fact.
|
|
1032
|
+
|
|
1033
|
+
THE FIX. Scoped to the bounded few entries actually sitting in
|
|
1034
|
+
``parked`` on a CI reason right now (typically 0-1, never the whole
|
|
1035
|
+
merge queue — see :func:`coord.merge_queue.entry_gate_status`'s
|
|
1036
|
+
docstring for why this deliberately does NOT call the whole-queue
|
|
1037
|
+
:func:`coord.merge_queue.plan` instead), so paying for a live
|
|
1038
|
+
``gh``-backed check per entry, every ~3-minute tick, is the same
|
|
1039
|
+
"small and predictable" cost an operator's own ``coord merge --plan``
|
|
1040
|
+
already pays on demand — not the unbounded per-tick GitHub polling
|
|
1041
|
+
#1344 removed from the read path.
|
|
1042
|
+
|
|
1043
|
+
Fails OPEN per entry and CLOSED overall in the sense that matters: a key
|
|
1044
|
+
simply ABSENT from the returned dict (an unreadable config, a
|
|
1045
|
+
``ci_store`` that failed to build, an entry ``coord.merge_queue.
|
|
1046
|
+
load_queue()`` no longer carries, or any other exception) leaves that
|
|
1047
|
+
entry to :func:`coord.drive_queue.plan_tick`'s pre-#2182 fallback — the
|
|
1048
|
+
#2158 :data:`~coord.drive_queue.PARK_STALE_SECONDS` ceiling — exactly as
|
|
1049
|
+
if this function had never run. A transient failure here degrades to
|
|
1050
|
+
the OLD (already-shipped, already-bounded) behaviour, never to a wedge
|
|
1051
|
+
and never to a wrongly-forced resume.
|
|
1052
|
+
|
|
1053
|
+
Gated on ``resolve_board_service() is None`` (the daemon-host tick,
|
|
1054
|
+
same guard :func:`_fetch_board_view` uses for its own local-DB top-up):
|
|
1055
|
+
on a thin client the daemon's real ``GET /board`` already carries a live
|
|
1056
|
+
``merge_plan`` section, so ``build_board_view`` already resolves
|
|
1057
|
+
``merge_ci_pending_live=True`` there on its own and this function would
|
|
1058
|
+
have nothing to add — worse, ``coord.state.load_board()`` guards against
|
|
1059
|
+
being called from a thin client at all (#615).
|
|
1060
|
+
"""
|
|
1061
|
+
from coord.merge_queue import is_ci_infra_reason, is_ci_pending_reason # noqa: PLC0415
|
|
1062
|
+
|
|
1063
|
+
targets = [
|
|
1064
|
+
e for e in entries
|
|
1065
|
+
if e.state == STATE_PARKED
|
|
1066
|
+
and (
|
|
1067
|
+
is_ci_pending_reason(getattr(e, "last_reason", "") or "")
|
|
1068
|
+
or is_ci_infra_reason(getattr(e, "last_reason", "") or "")
|
|
1069
|
+
)
|
|
1070
|
+
]
|
|
1071
|
+
if not targets:
|
|
1072
|
+
return {}
|
|
1073
|
+
|
|
1074
|
+
from coord.board_service import resolve as resolve_board_service # noqa: PLC0415
|
|
1075
|
+
|
|
1076
|
+
if resolve_board_service() is not None:
|
|
1077
|
+
return {}
|
|
1078
|
+
|
|
1079
|
+
try:
|
|
1080
|
+
from coord import github_ops as _gh_ops # noqa: PLC0415
|
|
1081
|
+
from coord import merge_queue as _mq # noqa: PLC0415
|
|
1082
|
+
from coord.ci_store import build_ci_store # noqa: PLC0415
|
|
1083
|
+
from coord.commands._common import _load_config # noqa: PLC0415
|
|
1084
|
+
from coord.state import load_board as _load_board # noqa: PLC0415
|
|
1085
|
+
|
|
1086
|
+
cfg = _load_config(config_path)
|
|
1087
|
+
board = _load_board()
|
|
1088
|
+
ci_store = build_ci_store(cfg.ci_store.type)
|
|
1089
|
+
queue_by_key = {
|
|
1090
|
+
entry_key(q.repo_name, q.issue_number): q for q in _mq.load_queue()
|
|
1091
|
+
}
|
|
1092
|
+
except Exception: # noqa: BLE001 — see the fail-soft note above
|
|
1093
|
+
return {}
|
|
1094
|
+
|
|
1095
|
+
overrides: dict[str, bool] = {}
|
|
1096
|
+
for e in targets:
|
|
1097
|
+
q = queue_by_key.get(e.key)
|
|
1098
|
+
if q is None or not q.pr_number:
|
|
1099
|
+
continue
|
|
1100
|
+
try:
|
|
1101
|
+
status, _reason = _mq.entry_gate_status(q, board, cfg, ci_store, _gh_ops)
|
|
1102
|
+
except Exception: # noqa: BLE001 — leave this one entry to the ceiling
|
|
1103
|
+
continue
|
|
1104
|
+
overrides[e.key] = status != _mq.PLAN_READY
|
|
1105
|
+
return overrides
|
|
1106
|
+
|
|
1107
|
+
|
|
1009
1108
|
def _launch_argv(entry: QueueEntry, config_path: Path | None) -> list[str]:
|
|
1010
1109
|
"""The ``coord drive --tmux`` argv for *entry*.
|
|
1011
1110
|
|
|
@@ -1318,6 +1417,14 @@ def drive_queue_tick(
|
|
|
1318
1417
|
# tick when no entry is parked that way — which is the common case.
|
|
1319
1418
|
gate_a_pending = _fetch_gate_a_pending(entries)
|
|
1320
1419
|
|
|
1420
|
+
# #2182: for every entry parked on a CI reason, a fresh single-entry
|
|
1421
|
+
# re-derivation of its gate, taken live THIS tick — see
|
|
1422
|
+
# `_fetch_live_ci_gate`'s docstring for the gap this closes (a park
|
|
1423
|
+
# on the daemon-host tick could previously be released only by the
|
|
1424
|
+
# #2158 45-minute ceiling, never by CI actually reporting, because
|
|
1425
|
+
# this tick's board read never computes a live `merge_plan`).
|
|
1426
|
+
live_ci_gate = _fetch_live_ci_gate(entries, config_path)
|
|
1427
|
+
|
|
1321
1428
|
# #2101: release cordons. THIS is the hole the issue names — the
|
|
1322
1429
|
# queue's launcher had zero pause awareness (`coord/drive.py` checks
|
|
1323
1430
|
# pause only when routing a *worker*), so a cordoned host kept getting
|
|
@@ -1349,6 +1456,7 @@ def drive_queue_tick(
|
|
|
1349
1456
|
exit_dead_end=exit_dead_end,
|
|
1350
1457
|
gate_a_pending=gate_a_pending,
|
|
1351
1458
|
cordons=cordons,
|
|
1459
|
+
live_ci_gate=live_ci_gate,
|
|
1352
1460
|
)
|
|
1353
1461
|
|
|
1354
1462
|
if reconcile_only:
|
|
@@ -1932,6 +1932,7 @@ def plan_tick(
|
|
|
1932
1932
|
exit_dead_end: Mapping[str, bool] | None = None,
|
|
1933
1933
|
gate_a_pending: Mapping[str, bool] | None = None,
|
|
1934
1934
|
cordons: Mapping[str, str] | None = None,
|
|
1935
|
+
live_ci_gate: Mapping[str, bool] | None = None,
|
|
1935
1936
|
) -> TickPlan:
|
|
1936
1937
|
"""Decide one tick. Pure; the caller executes the returned plan.
|
|
1937
1938
|
|
|
@@ -2008,6 +2009,21 @@ def plan_tick(
|
|
|
2008
2009
|
#2110 deadlock, re-created by the very mechanism meant to end it. A
|
|
2009
2010
|
cordoned tick is exactly `--reconcile-only`.
|
|
2010
2011
|
|
|
2012
|
+
*live_ci_gate* maps a `parked` entry's key to whether a FRESH,
|
|
2013
|
+
single-entry re-derivation of its gate — computed by the shell THIS
|
|
2014
|
+
tick, via :func:`coord.merge_queue.entry_gate_status` with a live
|
|
2015
|
+
``ci_store``/``gh_ops``, the same backend ``coord merge --plan`` builds
|
|
2016
|
+
— still finds it blocked (#2182). A key present here is authoritative
|
|
2017
|
+
over both the cached board's `merge_ci_pending` and the #2158 staleness
|
|
2018
|
+
ceiling below: there is no ceiling to apply to a reading taken just now.
|
|
2019
|
+
A key ABSENT (the entry isn't CI-parked, or the shell's live check
|
|
2020
|
+
itself couldn't be made — no PR yet, an unreadable config, a `ci_store`
|
|
2021
|
+
that failed to build) falls through unchanged to the pre-#2182 path,
|
|
2022
|
+
the #2158 ceiling included — see
|
|
2023
|
+
:func:`coord.commands.drive_queue._fetch_live_ci_gate` for the shell
|
|
2024
|
+
side, which computes this ONLY for the bounded set of entries currently
|
|
2025
|
+
`parked` on a CI reason, never the whole queue.
|
|
2026
|
+
|
|
2011
2027
|
The algorithm, from #1754, plus #1757's step 2, #1891's step 1b, and
|
|
2012
2028
|
#2055's extension of it:
|
|
2013
2029
|
|
|
@@ -2164,6 +2180,39 @@ def plan_tick(
|
|
|
2164
2180
|
# relaunch a gave-up entry outside the `blocked`/`failed`
|
|
2165
2181
|
# attempt-tracking this function's docstring describes (#2055).
|
|
2166
2182
|
continue
|
|
2183
|
+
# #2182: a FRESH, single-entry re-derivation of this exact entry's
|
|
2184
|
+
# gate, taken by the shell THIS tick (see the `live_ci_gate`
|
|
2185
|
+
# parameter doc above) — authoritative over both the cached board
|
|
2186
|
+
# reading below and the #2158 staleness ceiling, because there is no
|
|
2187
|
+
# staleness to a reading computed just now. Bypasses that whole
|
|
2188
|
+
# apparatus entirely rather than layering on top of it: a `True`
|
|
2189
|
+
# here means the SAME check `coord merge --plan` would run still
|
|
2190
|
+
# finds this entry blocked (stay parked, no ceiling needed — held
|
|
2191
|
+
# for as long as the live check keeps saying so, exactly like a
|
|
2192
|
+
# live `merge_plan` reason always was); a `False` means the plan
|
|
2193
|
+
# reads READY right now (resume immediately). A MISSING key — the
|
|
2194
|
+
# entry isn't CI-parked, or the shell's live check itself could not
|
|
2195
|
+
# be made — falls through unchanged to the pre-#2182 path.
|
|
2196
|
+
live_override = (live_ci_gate or {}).get(entry.key)
|
|
2197
|
+
if live_override is not None:
|
|
2198
|
+
if live_override:
|
|
2199
|
+
continue
|
|
2200
|
+
reason = (
|
|
2201
|
+
f"live re-check of {entry.key}'s gate this tick reads READY "
|
|
2202
|
+
"(coord merge --plan agrees) — resuming from parked without "
|
|
2203
|
+
"spending an attempt (#1891, #2182)"
|
|
2204
|
+
)
|
|
2205
|
+
reconciles.append(
|
|
2206
|
+
Reconcile(
|
|
2207
|
+
entry.key,
|
|
2208
|
+
"resumed",
|
|
2209
|
+
reason,
|
|
2210
|
+
occupies=False,
|
|
2211
|
+
updates={"state": STATE_WAITING, "last_reason": reason},
|
|
2212
|
+
)
|
|
2213
|
+
)
|
|
2214
|
+
states[entry.key] = STATE_WAITING
|
|
2215
|
+
continue
|
|
2167
2216
|
# #2158: a park whose CI reading can still refresh itself is held for
|
|
2168
2217
|
# as long as it keeps saying so. One that CANNOT — the reading came
|
|
2169
2218
|
# only from the raw `merge_queue` row's frozen `error`, which is
|
|
@@ -3244,6 +3244,45 @@ def _entry_gate_status(
|
|
|
3244
3244
|
return PLAN_READY, None
|
|
3245
3245
|
|
|
3246
3246
|
|
|
3247
|
+
def entry_gate_status(
|
|
3248
|
+
entry: "QueuedMerge",
|
|
3249
|
+
board,
|
|
3250
|
+
config,
|
|
3251
|
+
ci_store: "CiStore | None" = None,
|
|
3252
|
+
gh_ops: "GhOps | None" = None,
|
|
3253
|
+
) -> tuple[str, str | None]:
|
|
3254
|
+
"""Public seam onto :func:`_entry_gate_status`, for callers outside this
|
|
3255
|
+
module that need a fresh, SINGLE-entry re-derivation of the gate — not
|
|
3256
|
+
the whole-queue :func:`plan`.
|
|
3257
|
+
|
|
3258
|
+
#2182: ``coord.drive_queue``'s park/resume machinery (#1891/#1892) used
|
|
3259
|
+
to release a `parked` entry only two ways — the cached board's own
|
|
3260
|
+
`merge_plan` reason re-deriving itself (only true off a live daemon
|
|
3261
|
+
`/board`, never on the daemon-host tick itself, which reads the local DB
|
|
3262
|
+
directly and never computes `merge_plan` at all — see
|
|
3263
|
+
``coord.commands.drive_queue._local_merge_queue_rows``), or
|
|
3264
|
+
:data:`coord.drive_queue.PARK_STALE_SECONDS` ageing the frozen reading
|
|
3265
|
+
out after 45 minutes. Both leave a genuinely-clear gate undetected for
|
|
3266
|
+
up to the ceiling, even though ``coord merge --plan`` can answer correctly on
|
|
3267
|
+
demand at any moment — the same disagreement claude-coordinator#2159
|
|
3268
|
+
surfaced (the queue read `parked` while `--plan` read READY, at the SAME
|
|
3269
|
+
instant, off the SAME board).
|
|
3270
|
+
|
|
3271
|
+
``coord.commands.drive_queue._fetch_live_ci_gate`` calls this directly,
|
|
3272
|
+
once per currently-`parked` entry, with a LIVE ``ci_store``/``gh_ops`` —
|
|
3273
|
+
the same live backend ``coord merge --plan``'s local branch builds — so
|
|
3274
|
+
the two readings can no longer disagree. Deliberately NOT routed through
|
|
3275
|
+
:func:`plan`: that function evaluates *every* PENDING queue entry with a
|
|
3276
|
+
PR, so handing it a live backend would pay for a `gh` call per entry in
|
|
3277
|
+
the whole merge queue on every 3-minute tick, not just the bounded
|
|
3278
|
+
handful currently parked — reintroducing the unbounded-`gh`-polling
|
|
3279
|
+
shape #1344 removed from the read path. A single-entry call, made only
|
|
3280
|
+
for entries already sitting in `parked`, keeps the cost exactly where
|
|
3281
|
+
the issue says it should be: small and predictable.
|
|
3282
|
+
"""
|
|
3283
|
+
return _entry_gate_status(entry, board, config, ci_store, gh_ops)
|
|
3284
|
+
|
|
3285
|
+
|
|
3247
3286
|
# ── Merge plan (#776) ────────────────────────────────────────────────────────
|
|
3248
3287
|
|
|
3249
3288
|
@dataclass
|
|
@@ -1572,6 +1572,66 @@ def test_reap_captures_claude_session_id(tmp_path: Path) -> None:
|
|
|
1572
1572
|
server.shutdown()
|
|
1573
1573
|
|
|
1574
1574
|
|
|
1575
|
+
def test_reap_logs_graphify_invocation_count(tmp_path: Path) -> None:
|
|
1576
|
+
"""#2212: `_reap` writes a plain `graphify_invocations=N` counter into
|
|
1577
|
+
the worker's log alongside the existing "# reap: done" line — the
|
|
1578
|
+
measurable half of the graph-first navigation rule in
|
|
1579
|
+
WORKER_SYSTEM_PROMPT. A worker whose transcript shows one `graphify
|
|
1580
|
+
query ...` Bash call and one unrelated Bash call must be counted 1, not
|
|
1581
|
+
2 or 0, end-to-end through the real reap path (not just the
|
|
1582
|
+
`_count_graphify_invocations` unit)."""
|
|
1583
|
+
repo = _init_repo(tmp_path / "repo")
|
|
1584
|
+
|
|
1585
|
+
graphify_call = json.dumps({
|
|
1586
|
+
"type": "assistant",
|
|
1587
|
+
"message": {
|
|
1588
|
+
"model": "claude-sonnet-4-6",
|
|
1589
|
+
"content": [{
|
|
1590
|
+
"type": "tool_use",
|
|
1591
|
+
"name": "Bash",
|
|
1592
|
+
"id": "tu_1",
|
|
1593
|
+
"input": {"command": 'graphify query "where is X handled"'},
|
|
1594
|
+
}],
|
|
1595
|
+
},
|
|
1596
|
+
})
|
|
1597
|
+
unrelated_call = json.dumps({
|
|
1598
|
+
"type": "assistant",
|
|
1599
|
+
"message": {
|
|
1600
|
+
"model": "claude-sonnet-4-6",
|
|
1601
|
+
"content": [{
|
|
1602
|
+
"type": "tool_use",
|
|
1603
|
+
"name": "Bash",
|
|
1604
|
+
"id": "tu_2",
|
|
1605
|
+
"input": {"command": "grep -rn foo ."},
|
|
1606
|
+
}],
|
|
1607
|
+
},
|
|
1608
|
+
})
|
|
1609
|
+
result_line = json.dumps({"type": "result", "subtype": "success", "is_error": False})
|
|
1610
|
+
worker_sh = (
|
|
1611
|
+
f"echo '{graphify_call}'; echo '{unrelated_call}'; echo '{result_line}'; exit 0"
|
|
1612
|
+
)
|
|
1613
|
+
server = AgentServer(
|
|
1614
|
+
machine_name="test",
|
|
1615
|
+
repos=["api"],
|
|
1616
|
+
repo_paths={"api": str(repo)},
|
|
1617
|
+
state_dir=tmp_path / "state",
|
|
1618
|
+
worker_command=lambda spec: ["/bin/sh", "-c", worker_sh],
|
|
1619
|
+
)
|
|
1620
|
+
spec = AssignmentSpec(
|
|
1621
|
+
repo_name="api",
|
|
1622
|
+
repo_path=str(repo),
|
|
1623
|
+
issue_number=2212,
|
|
1624
|
+
issue_title="t",
|
|
1625
|
+
briefing="b",
|
|
1626
|
+
)
|
|
1627
|
+
a = server.assign(spec)
|
|
1628
|
+
final = server.wait_for(a.id, timeout=10)
|
|
1629
|
+
|
|
1630
|
+
log_text = Path(final.log_path).read_text()
|
|
1631
|
+
assert "graphify_invocations=1" in log_text
|
|
1632
|
+
server.shutdown()
|
|
1633
|
+
|
|
1634
|
+
|
|
1575
1635
|
def test_assignment_spec_accepts_resume_session_id() -> None:
|
|
1576
1636
|
"""AssignmentSpec round-trips resume_session_id through to_dict / from dict."""
|
|
1577
1637
|
spec = AssignmentSpec(
|
|
@@ -1297,6 +1297,233 @@ def test_a_park_younger_than_the_ceiling_is_left_alone(
|
|
|
1297
1297
|
assert len(launches) == 1, launches
|
|
1298
1298
|
|
|
1299
1299
|
|
|
1300
|
+
# ── #2182: a park is bounded (#2158) but was never RE-CHECKED — a cleared
|
|
1301
|
+
# gate waited up to the 45-minute ceiling even though `coord merge --plan`
|
|
1302
|
+
# could answer correctly on demand the whole time.
|
|
1303
|
+
#
|
|
1304
|
+
# claude-coordinator#2159, 2026-08-13: at 03:25:46 UTC, `coord merge
|
|
1305
|
+
# --dry-run` for a parked entry read READY (no gate objection) while `coord
|
|
1306
|
+
# drive-queue list`, reading the SAME board a moment later, still read
|
|
1307
|
+
# `parked`. The root cause (confirmed by reading the tick's own board-fetch
|
|
1308
|
+
# path, not merely suspected): the daemon host — the ONLY machine that ever
|
|
1309
|
+
# runs this tick (`docs/AGENT_OPERATIONS.md`) — reads the local DB directly
|
|
1310
|
+
# and never computes a `merge_plan` section at all (see
|
|
1311
|
+
# `coord.commands.drive_queue._local_merge_queue_rows`'s docstring), so
|
|
1312
|
+
# `IssueFacts.merge_ci_pending_live` is unconditionally `False` there and
|
|
1313
|
+
# only the #2158 ceiling could ever have released the park — never CI
|
|
1314
|
+
# actually reporting.
|
|
1315
|
+
#
|
|
1316
|
+
# These tests exercise the REAL live re-check (`coord.merge_queue.
|
|
1317
|
+
# entry_gate_status`, called by `_fetch_live_ci_gate`), not a pre-injected
|
|
1318
|
+
# `merge_plan` row the way `board_merge_plan` above stands in for the
|
|
1319
|
+
# daemon-fronted lane — this suite's default lane (no daemon, no
|
|
1320
|
+
# `board_service`) IS the exact lane #2159 hit.
|
|
1321
|
+
|
|
1322
|
+
|
|
1323
|
+
_NO_GATES_CONFIG_YAML = f"""\
|
|
1324
|
+
repos:
|
|
1325
|
+
- name: {REPO}
|
|
1326
|
+
github: john/claude-coordinator
|
|
1327
|
+
default_branch: main
|
|
1328
|
+
- name: {OTHER_REPO}
|
|
1329
|
+
github: john/quadraui
|
|
1330
|
+
default_branch: main
|
|
1331
|
+
machines:
|
|
1332
|
+
- name: dellserver
|
|
1333
|
+
host: dellserver
|
|
1334
|
+
repos: [{REPO}, {OTHER_REPO}]
|
|
1335
|
+
reviews:
|
|
1336
|
+
enabled: false
|
|
1337
|
+
pipeline:
|
|
1338
|
+
default_gates: []
|
|
1339
|
+
"""
|
|
1340
|
+
|
|
1341
|
+
|
|
1342
|
+
@pytest.fixture
|
|
1343
|
+
def cli_no_gates(tmp_path: Path):
|
|
1344
|
+
"""Same shape as `cli` above, but review/smoke are OFF.
|
|
1345
|
+
|
|
1346
|
+
#2182's live re-check calls the REAL `coord.merge_queue.
|
|
1347
|
+
entry_gate_status` — the same function `coord merge --plan` uses — which
|
|
1348
|
+
evaluates review/smoke BEFORE it ever reaches the CI gate under test
|
|
1349
|
+
here. `config_file`'s default gate list (`["test", "review", "merge"]`,
|
|
1350
|
+
`reviews.enabled: true` by default) would block every re-check on a
|
|
1351
|
+
verdict these tests never seed — a different, real gate, just not the
|
|
1352
|
+
one #2182 is about. A genuinely-parked entry in production already
|
|
1353
|
+
cleared review/smoke to reach the CI block in the first place (that is
|
|
1354
|
+
the gate order `entry_gate_status` evaluates in); these tests start
|
|
1355
|
+
past that point on purpose, same as `_seed_ci_pending_merge_row` above
|
|
1356
|
+
already does for the pre-#2182 machinery.
|
|
1357
|
+
"""
|
|
1358
|
+
path = tmp_path / "coordinator-no-gates.yml"
|
|
1359
|
+
path.write_text(_NO_GATES_CONFIG_YAML)
|
|
1360
|
+
|
|
1361
|
+
def run(*args: str):
|
|
1362
|
+
return CliRunner().invoke(main, ["drive-queue", *args, "--config", str(path)])
|
|
1363
|
+
|
|
1364
|
+
return run
|
|
1365
|
+
|
|
1366
|
+
|
|
1367
|
+
class _FakeLiveCi:
|
|
1368
|
+
"""Stands in for the live backend `coord.ci_store.build_ci_store` would
|
|
1369
|
+
normally construct (`coord.ci_github.GitHubCi`) — a real `gh` client,
|
|
1370
|
+
which these tests must never touch."""
|
|
1371
|
+
|
|
1372
|
+
def __init__(self, state: dict) -> None:
|
|
1373
|
+
self._state = state
|
|
1374
|
+
|
|
1375
|
+
@property
|
|
1376
|
+
def is_available(self) -> bool:
|
|
1377
|
+
return True
|
|
1378
|
+
|
|
1379
|
+
def list_checks_for_pr(self, repo: str, number: int) -> list:
|
|
1380
|
+
return list(self._state["checks"])
|
|
1381
|
+
|
|
1382
|
+
def expects_checks(self, repo: str, number: int) -> bool:
|
|
1383
|
+
return True
|
|
1384
|
+
|
|
1385
|
+
|
|
1386
|
+
@pytest.fixture
|
|
1387
|
+
def live_ci_backend(monkeypatch):
|
|
1388
|
+
"""Fake the live `ci_store`/`github_ops` seam #2182's re-check calls.
|
|
1389
|
+
|
|
1390
|
+
Patches `coord.ci_store.build_ci_store` (what constructs the live
|
|
1391
|
+
backend) and the two `coord.github_ops` functions the CI gate reaches
|
|
1392
|
+
for once the checks themselves resolve (`get_branch_commit_timestamp`
|
|
1393
|
+
for the #1851 staleness check, `get_pr_commit_messages` for the #1318
|
|
1394
|
+
epic-closing-keyword gate) — the same seams `tests/test_board_read_
|
|
1395
|
+
path.py` fakes for the equivalent `/board`-side gate. Returns a setter,
|
|
1396
|
+
`live_ci_backend(checks)`.
|
|
1397
|
+
"""
|
|
1398
|
+
import coord.ci_store as ci_store_module
|
|
1399
|
+
import coord.github_ops as github_ops
|
|
1400
|
+
|
|
1401
|
+
state: dict = {"checks": []}
|
|
1402
|
+
monkeypatch.setattr(
|
|
1403
|
+
ci_store_module, "build_ci_store", lambda t: _FakeLiveCi(state)
|
|
1404
|
+
)
|
|
1405
|
+
# A small, fixed base-commit timestamp: every check below starts well
|
|
1406
|
+
# after it, so the #1851 staleness gate reads "fresh", not "stale".
|
|
1407
|
+
monkeypatch.setattr(
|
|
1408
|
+
github_ops, "get_branch_commit_timestamp", lambda repo, branch: 1.0
|
|
1409
|
+
)
|
|
1410
|
+
monkeypatch.setattr(github_ops, "get_pr_commit_messages", lambda repo, n: [])
|
|
1411
|
+
|
|
1412
|
+
def _set(checks: list) -> None:
|
|
1413
|
+
state["checks"] = checks
|
|
1414
|
+
|
|
1415
|
+
return _set
|
|
1416
|
+
|
|
1417
|
+
|
|
1418
|
+
def _green_check(name: str = "test (3.12)"):
|
|
1419
|
+
from coord.ci_store import CheckRun
|
|
1420
|
+
|
|
1421
|
+
return CheckRun(
|
|
1422
|
+
name=name, status="completed", conclusion="success",
|
|
1423
|
+
url="", run_id="1", started_at=100.0, completed_at=160.0,
|
|
1424
|
+
)
|
|
1425
|
+
|
|
1426
|
+
|
|
1427
|
+
def _running_check(name: str = "test (3.12)"):
|
|
1428
|
+
from coord.ci_store import CheckRun
|
|
1429
|
+
|
|
1430
|
+
return CheckRun(
|
|
1431
|
+
name=name, status="in_progress", conclusion=None,
|
|
1432
|
+
url="", run_id="1", started_at=100.0, completed_at=None,
|
|
1433
|
+
)
|
|
1434
|
+
|
|
1435
|
+
|
|
1436
|
+
def _park_with_pr(
|
|
1437
|
+
cli, seed, coord_db, issue: int = 2159, pr_number: int = 42
|
|
1438
|
+
) -> None:
|
|
1439
|
+
"""`_park` above, plus a `pr_number` on the raw row.
|
|
1440
|
+
|
|
1441
|
+
#2182's live re-check (unlike the pre-#2182 machinery it falls back to)
|
|
1442
|
+
needs a PR to ask the CI backend about — exactly what a real `coord
|
|
1443
|
+
merge` attempt would already have set on this row before ever parking
|
|
1444
|
+
it (the CI gate only writes a `CI running:`/`CI infra:` error when
|
|
1445
|
+
`entry.pr_number` is truthy in the first place).
|
|
1446
|
+
"""
|
|
1447
|
+
seed(issues={issue: "open"})
|
|
1448
|
+
cli("add", REPO, str(issue))
|
|
1449
|
+
cli("tick")
|
|
1450
|
+
_seed_ci_pending_merge_row(coord_db, issue, reason="CI running: test (3.12)")
|
|
1451
|
+
coord_db.execute(
|
|
1452
|
+
"UPDATE merge_queue SET pr_number = ? WHERE issue_number = ?",
|
|
1453
|
+
(pr_number, issue),
|
|
1454
|
+
)
|
|
1455
|
+
coord_db.commit()
|
|
1456
|
+
_backdate(issue, DRIVE_STARTUP_GRACE_SECONDS + 60)
|
|
1457
|
+
cli("tick")
|
|
1458
|
+
assert queued(issue)["state"] == "parked"
|
|
1459
|
+
|
|
1460
|
+
|
|
1461
|
+
def test_a_parked_entry_resumes_on_a_live_gate_recheck_well_inside_the_ceiling(
|
|
1462
|
+
cli_no_gates, seed, launches, coord_db, live_ci_backend,
|
|
1463
|
+
):
|
|
1464
|
+
"""THE #2182 regression, reproduced rather than injected.
|
|
1465
|
+
|
|
1466
|
+
CI reports green seconds after the park — nowhere near
|
|
1467
|
+
`PARK_STALE_SECONDS` — and no live `coord merge` runs in between. Before
|
|
1468
|
+
#2182 this entry would sit `parked` until the 45-minute ceiling; now the
|
|
1469
|
+
very next tick asks the live gate itself (the same call `coord merge
|
|
1470
|
+
--plan` makes) and resumes immediately.
|
|
1471
|
+
"""
|
|
1472
|
+
_park_with_pr(cli_no_gates, seed, coord_db)
|
|
1473
|
+
assert len(launches) == 1, launches
|
|
1474
|
+
|
|
1475
|
+
live_ci_backend([_green_check()])
|
|
1476
|
+
|
|
1477
|
+
result = cli_no_gates("tick")
|
|
1478
|
+
assert result.exit_code == 0, result.output
|
|
1479
|
+
entry = queued(2159)
|
|
1480
|
+
assert entry["state"] == "running" # resumed straight into a fresh launch
|
|
1481
|
+
assert entry["attempts"] == 0 # #1891: still free — no attempt spent
|
|
1482
|
+
assert len(launches) == 2, launches
|
|
1483
|
+
|
|
1484
|
+
status = cli_no_gates("status")
|
|
1485
|
+
assert "parked" not in status.output
|
|
1486
|
+
|
|
1487
|
+
|
|
1488
|
+
def test_a_parked_entry_with_ci_still_genuinely_running_stays_parked(
|
|
1489
|
+
cli_no_gates, seed, launches, coord_db, live_ci_backend,
|
|
1490
|
+
):
|
|
1491
|
+
"""The #1891 property must survive #2182 unchanged: CI genuinely still
|
|
1492
|
+
running is not evidence against the park — the live re-check agrees
|
|
1493
|
+
with it, every tick, with no hot-loop relaunch."""
|
|
1494
|
+
_park_with_pr(cli_no_gates, seed, coord_db)
|
|
1495
|
+
live_ci_backend([_running_check()])
|
|
1496
|
+
|
|
1497
|
+
for _ in range(3):
|
|
1498
|
+
result = cli_no_gates("tick")
|
|
1499
|
+
assert result.exit_code == 0, result.output
|
|
1500
|
+
assert queued(2159)["state"] == "parked"
|
|
1501
|
+
assert len(launches) == 1, launches # no second launch, ever
|
|
1502
|
+
|
|
1503
|
+
assert "1 parked" in cli_no_gates("status").output
|
|
1504
|
+
|
|
1505
|
+
|
|
1506
|
+
def test_a_live_ready_wins_even_over_a_stale_cached_plan_reading(
|
|
1507
|
+
cli_no_gates, seed, launches, coord_db, live_ci_backend, board_merge_plan,
|
|
1508
|
+
):
|
|
1509
|
+
"""#2182's acceptance bar, stated directly: the live re-check is
|
|
1510
|
+
authoritative over the CACHED board reading, not merely over its
|
|
1511
|
+
absence. The board's own `merge_plan` section here still says pending
|
|
1512
|
+
(not yet refreshed since the park — the #2158 unrefreshable case this
|
|
1513
|
+
suite's `board_merge_plan` fixture stands in for), which pre-#2182
|
|
1514
|
+
would hold the park for the full ceiling regardless of what a live
|
|
1515
|
+
check would say. The live gate — the same one `coord merge --plan`
|
|
1516
|
+
reads on demand — wins anyway: the queue must never report `parked`
|
|
1517
|
+
once it agrees."""
|
|
1518
|
+
_park_with_pr(cli_no_gates, seed, coord_db)
|
|
1519
|
+
board_merge_plan(_plan_row(2159, reason="CI running: test (3.12)", running=1))
|
|
1520
|
+
live_ci_backend([_green_check()])
|
|
1521
|
+
|
|
1522
|
+
result = cli_no_gates("tick")
|
|
1523
|
+
assert result.exit_code == 0, result.output
|
|
1524
|
+
assert queued(2159)["state"] == "running"
|
|
1525
|
+
|
|
1526
|
+
|
|
1300
1527
|
def test_a_repeatedly_dead_drive_still_reaches_blocked_and_escalates(
|
|
1301
1528
|
cli, seed, launches
|
|
1302
1529
|
):
|