code-coordinator 0.5.58__tar.gz → 0.5.60__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.58 → code_coordinator-0.5.60}/CLAUDE.md +10 -0
- {code_coordinator-0.5.58/code_coordinator.egg-info → code_coordinator-0.5.60}/PKG-INFO +1 -1
- {code_coordinator-0.5.58 → code_coordinator-0.5.60/code_coordinator.egg-info}/PKG-INFO +1 -1
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/code_coordinator.egg-info/SOURCES.txt +1 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/code_coordinator.egg-info/scm_file_list.json +1 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/acceptance.py +19 -4
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/agent.py +37 -6
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/drive.py +276 -1
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/drive_state.py +30 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/merge_queue.py +76 -5
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/providers/claude.py +4 -1
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/providers/claude_pty.py +5 -1
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_drive.py +366 -1
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_drive_state.py +45 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_merge_queue.py +51 -6
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_providers_pty.py +22 -0
- code_coordinator-0.5.60/tests/test_worker_test_scoping.py +162 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/.github/workflows/release-tui.yml +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/.gitignore +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/GOAL.md +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/LICENSE +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/MANIFEST.in +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/README.md +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/__init__.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/audit.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/board_bool_guard.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/board_service.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/brain.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/claim.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/cli.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/client.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/comments.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/config.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dao.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/.gitignore +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/components.json +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/dist/assets/Gallery-da3qNiIw.js +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/dist/assets/Terminal-skVFCxPU.js +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/dist/assets/index-DltfZR5f.js +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/dist/index.html +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/dist/sw.js +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/eslint.config.js +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/index.html +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/package-lock.json +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/package.json +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/playwright.config.ts +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/postcss.config.js +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/src/App.tsx +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/src/api/client.ts +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/src/api/generated.ts +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/src/index.css +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/src/main.tsx +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/src/test-setup.ts +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/tailwind.config.js +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/tsconfig.json +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/tsconfig.node.json +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dashboard/webapp/vite.config.ts +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/db.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/deps.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/events.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/filelock.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/freshness.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/gates.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/goal.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/health/context.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/health/models.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/health/render.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/health/units.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/hooks.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/interactive.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/models.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/network.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/notify.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/openapi.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/parentage.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/plans.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/progress.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/release_window.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/reports.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/review.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/smoke.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/split_work.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/state.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/test_author.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/test_report.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/usage.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/install-agent.sh +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/pyproject.toml +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/setup.cfg +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/__init__.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/acceptance/ms-33/audit_1039.rs +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/acceptance/ms-33/contract.md +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/acceptance/ms-33/manifest.yml +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/acceptance/ms-38/contract.md +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/acceptance/ms-38/manifest.yml +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/conftest.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_config.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_db.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_events.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_init.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_models.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_network.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_no_direct_gh_calls.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_review.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_session.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_split.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_state.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tui/Cargo.lock +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tui/Cargo.toml +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tui/cargo-config-local-quadraui.toml.example +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tui/src/app/audit.rs +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tui/src/app/chat.rs +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tui/src/app/data.rs +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tui/src/app/dialogs.rs +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tui/src/app/drive.rs +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tui/src/app/drive_queue.rs +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tui/src/app/escalation.rs +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tui/src/app/events.rs +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tui/src/app/fixtures.rs +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tui/src/app/fleet_health.rs +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tui/src/app/fleet_sessions.rs +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tui/src/app/fleet_terminals.rs +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tui/src/app/format.rs +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tui/src/app/milestone_dag.rs +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tui/src/app/mod.rs +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tui/src/app/msv.rs +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tui/src/app/pipeline.rs +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tui/src/app/plans.rs +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tui/src/app/render.rs +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tui/src/app/reports.rs +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tui/src/app/sessions.rs +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tui/src/app/settings_ui.rs +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tui/src/app/sidebar.rs +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tui/src/app/terminal.rs +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tui/src/app/tests.rs +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tui/src/app/types.rs +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tui/src/app/workspace.rs +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tui/src/bin/gtk.rs +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tui/src/commands.rs +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tui/src/lib.rs +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tui/src/main.rs +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tui/src/settings.rs +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tui/tests/acceptance.rs +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tui/tests/cli.rs +0 -0
- {code_coordinator-0.5.58 → code_coordinator-0.5.60}/tui/tests/fixtures/board_sample.json +0 -0
|
@@ -100,6 +100,16 @@ coord approve --dry-run 1,2
|
|
|
100
100
|
coord assign --dry-run precision claude-coordinator 42
|
|
101
101
|
```
|
|
102
102
|
|
|
103
|
+
**Workers: scope your test run to your diff, never `pytest` bare (#2169).**
|
|
104
|
+
The full suite exceeds Claude Code's 600s Bash ceiling on this repo and
|
|
105
|
+
duplicates the Test stage + CI, which both run it against your pushed SHA
|
|
106
|
+
regardless. Run just the file(s) that mirror what you changed — `pytest
|
|
107
|
+
tests/test_<module>.py` for a `coord/<module>.py` change, `cargo test` from
|
|
108
|
+
`tui/` scoped with a test-name filter for a `tui/**` change. To see what
|
|
109
|
+
the Test stage itself would run for your diff (and confirm you're not
|
|
110
|
+
missing a suite), `scripts/coord-test-runner.sh <worktree> --print-routing`
|
|
111
|
+
computes the routing without actually building or testing anything.
|
|
112
|
+
|
|
103
113
|
## Key Design Decisions
|
|
104
114
|
|
|
105
115
|
- **No API key needed.** Everything uses `claude -p` which runs on Max/Pro subscription via OAuth.
|
|
@@ -720,6 +720,7 @@ tests/test_watch.py
|
|
|
720
720
|
tests/test_worker_events.py
|
|
721
721
|
tests/test_worker_image_pin_sync.py
|
|
722
722
|
tests/test_worker_safety.py
|
|
723
|
+
tests/test_worker_test_scoping.py
|
|
723
724
|
tests/test_worktree.py
|
|
724
725
|
tests/test_worktree_rmtree_chokepoint.py
|
|
725
726
|
tests/acceptance/ms-33/audit_1039.rs
|
|
@@ -574,6 +574,16 @@ def expected_red_failure_summary(verdict: dict[str, Any]) -> str:
|
|
|
574
574
|
can't mistake this for "a test failed" — it is the opposite signal, and
|
|
575
575
|
the fix is editorial (clear the manifest entry, or realize the
|
|
576
576
|
assertion never exercised the bug), not code.
|
|
577
|
+
|
|
578
|
+
#2199: the guidance below used to send the operator to `coord
|
|
579
|
+
acceptance record`, on the claim that a green trust-gate run clears the
|
|
580
|
+
entry automatically. PR #2173 deliberately moved clearing OUT of
|
|
581
|
+
`record` and into the post-merge hook (`coord.merge_queue.
|
|
582
|
+
_maybe_clear_expected_red` / `coord.acceptance.
|
|
583
|
+
clear_expected_red_via_pr`, right after the fix's own PR actually
|
|
584
|
+
merges — see that function's docstring for the ordering bug this
|
|
585
|
+
fixed). Re-running `record` today clears nothing; an operator who
|
|
586
|
+
followed the old wording would watch it not work with no clue why.
|
|
577
587
|
"""
|
|
578
588
|
ids = verdict.get("unexpected_green") or []
|
|
579
589
|
if not ids:
|
|
@@ -583,10 +593,15 @@ def expected_red_failure_summary(verdict: dict[str, Any]) -> str:
|
|
|
583
593
|
f"HARD FAILURE: {len(ids)} test(s) listed in `expected_red` now PASS:\n"
|
|
584
594
|
f"{listed}\n"
|
|
585
595
|
"An expected-red test that passes means either the fix already "
|
|
586
|
-
"landed silently
|
|
587
|
-
"
|
|
588
|
-
"
|
|
589
|
-
"
|
|
596
|
+
"landed silently — it clears automatically once ITS OWN PR actually "
|
|
597
|
+
"merges (the post-merge hook, not `coord acceptance record`; see "
|
|
598
|
+
"docs/ORACLE_LOOP.md). Still listed after that merge? Check `coord "
|
|
599
|
+
"merge`'s own output for an `expected_red_clear_skipped*` event "
|
|
600
|
+
"naming why (no work assignment found, no passing trust-gate "
|
|
601
|
+
"verdict recorded, or a stale acceptance SHA), or run `coord "
|
|
602
|
+
"acceptance expected-red <repo>` to see current state — or the "
|
|
603
|
+
"assertion never exercised the bug in the first place (#1965). "
|
|
604
|
+
"This is NOT an ordinary test failure — it is the opposite signal."
|
|
590
605
|
)
|
|
591
606
|
|
|
592
607
|
|
|
@@ -2845,9 +2845,17 @@ This session is ONE-SHOT and non-interactive (#1394):
|
|
|
2845
2845
|
completion notifications will NEVER reach you — nothing wakes you up.
|
|
2846
2846
|
- NEVER start a long-running command in the background and then end your \
|
|
2847
2847
|
turn waiting for it (no `run_in_background`, no `&`, no "I'll wait for the \
|
|
2848
|
-
test run to finish")
|
|
2849
|
-
|
|
2850
|
-
the
|
|
2848
|
+
test run to finish") — there is no next turn for a notification to land \
|
|
2849
|
+
in, so ending your turn that way throws the work away. Prefer running it \
|
|
2850
|
+
in the FOREGROUND and blocking until it returns. If it genuinely cannot \
|
|
2851
|
+
finish inside one Bash call, you may background it and poll it yourself, \
|
|
2852
|
+
in bounded steps, from THIS SAME still-running session — `Monitor`, or \
|
|
2853
|
+
repeated `TaskOutput` calls with a bounded `timeout`, never a foreground \
|
|
2854
|
+
loop that blocks past the ceiling (`until ! pgrep ...; do sleep ...; done` \
|
|
2855
|
+
hits the identical 600s wall) and never a final message that leaves it \
|
|
2856
|
+
running unattended and relies on being woken back up. Otherwise, raise the \
|
|
2857
|
+
timeout or skip it and say so. If you end your turn waiting, the session \
|
|
2858
|
+
is over and your work is thrown away.
|
|
2851
2859
|
- ALWAYS `git add`, `git commit`, and `git push origin HEAD` BEFORE your \
|
|
2852
2860
|
final message — even if the build is broken, the tests are failing, or you \
|
|
2853
2861
|
ran out of time. Uncommitted changes are destroyed when the session ends. \
|
|
@@ -2883,8 +2891,25 @@ intentional `#[allow]` with reason, a deferred refactor flagged \
|
|
|
2883
2891
|
elsewhere), explicitly call it out in your final message with the \
|
|
2884
2892
|
reason. Don't silently ship warnings.
|
|
2885
2893
|
- Re-run the build after fixes to confirm clean output.
|
|
2886
|
-
- Run the
|
|
2887
|
-
|
|
2894
|
+
- Run only the tests that cover your diff — never the project's whole \
|
|
2895
|
+
test suite. A full suite routinely exceeds this tool's 600-second Bash \
|
|
2896
|
+
ceiling, and a worker that tries to shepherd it past that wall (splitting \
|
|
2897
|
+
it into chunks, backgrounding it and blocking on a poll loop, ...) burns \
|
|
2898
|
+
most of a session on that instead of the fix, for no net-new signal: the \
|
|
2899
|
+
Test stage and CI both re-run the FULL suite against your pushed SHA right \
|
|
2900
|
+
after you, on a clean checkout, which is strictly better evidence than a \
|
|
2901
|
+
worker's own partial run (#2169). Find the test file(s)/module(s) whose \
|
|
2902
|
+
name or path mirrors what you changed (e.g. `tests/test_<module>.py` for \
|
|
2903
|
+
`coord/<module>.py`, the crate-local `#[cfg(test)]` block for a Rust file) \
|
|
2904
|
+
and run just those — confirm they pass before declaring done.
|
|
2905
|
+
- Exception: if this assignment IS an oracle-loop acceptance round (you \
|
|
2906
|
+
were told to run `coord acceptance run --issue N`), keep running that \
|
|
2907
|
+
sealed slice as many times as it takes to go green. It is the loop's \
|
|
2908
|
+
convergence signal, not duplicated effort, and the scoping rule above does \
|
|
2909
|
+
not apply to it.
|
|
2910
|
+
- If even the scoped run genuinely cannot finish in time, follow the \
|
|
2911
|
+
background-and-poll pattern in the ONE-SHOT section above — do not invent \
|
|
2912
|
+
a chunk-and-loop workaround.
|
|
2888
2913
|
|
|
2889
2914
|
#252: before exiting, emit a SMOKE_TESTS block telling the human what to \
|
|
2890
2915
|
manually verify. You changed the code; you know what's worth poking.
|
|
@@ -3668,7 +3693,13 @@ def default_worker_command(spec: AssignmentSpec, *, binary: str = DEFAULT_WORKER
|
|
|
3668
3693
|
else:
|
|
3669
3694
|
system_prompt = spec.system_prompt if spec.system_prompt else WORKER_SYSTEM_PROMPT
|
|
3670
3695
|
system_prompt += build_deny_prompt(spec.deny_commands)
|
|
3671
|
-
|
|
3696
|
+
# #2169: `Monitor` is the sanctioned way to poll a backgrounded
|
|
3697
|
+
# long-running command in bounded steps (see the ONE-SHOT section of
|
|
3698
|
+
# WORKER_SYSTEM_PROMPT) instead of a foreground loop that blocks
|
|
3699
|
+
# past the 600s Bash ceiling. `TaskOutput`/`TaskStop` were already
|
|
3700
|
+
# reachable without being in this list; `Monitor` was the one
|
|
3701
|
+
# observed denied.
|
|
3702
|
+
allowed_tools = "Read,Edit,Write,Bash,Monitor"
|
|
3672
3703
|
|
|
3673
3704
|
# NOTE: briefing is NOT passed as a positional arg — it is written to
|
|
3674
3705
|
# stdin as the first stream-json user message by ``_spawn``.
|
|
@@ -288,6 +288,35 @@ class DriveCounters:
|
|
|
288
288
|
# capture deserves its own full budget of cheap waits before the next
|
|
289
289
|
# forced retry.
|
|
290
290
|
gate_wait_rounds: int = 0
|
|
291
|
+
# #2199: bounded retry for the trust gate's OWN dispatch — distinct from
|
|
292
|
+
# `fix_rounds` (which bounds "the work needs another round" once a
|
|
293
|
+
# verdict, passed or failed, actually landed on the board). This counts
|
|
294
|
+
# attempts where `coord acceptance record` itself never got that far —
|
|
295
|
+
# a missing local checkout, a driver crash, GitHub unreachable — so a
|
|
296
|
+
# persistently broken environment reaches a named `_die()` instead of
|
|
297
|
+
# `coord drive` re-running a full git-worktree + suite invocation every
|
|
298
|
+
# poll forever. Bounded by `opts.max_work_retries`, the same "how many
|
|
299
|
+
# times do we retry a flaky infra thing" budget `work_retries` uses.
|
|
300
|
+
#
|
|
301
|
+
# #2199 review (blocking finding 1): scoped to ONE sha via
|
|
302
|
+
# `acceptance_gate_attempts_sha` below — NOT a lifetime total. A fresh
|
|
303
|
+
# SHA (a fix round pushing a new commit) legitimately needs its own
|
|
304
|
+
# dispatch, and that dispatch is the entire point of the "same shape as
|
|
305
|
+
# `_decide_test`'s fix loop" design a few lines up in
|
|
306
|
+
# `_decide_acceptance_gate`; sharing one un-reset counter across every
|
|
307
|
+
# SHA a drive ever sees meant the SECOND round after the FIRST fix round
|
|
308
|
+
# already exhausted the default `max_work_retries=1` budget and died
|
|
309
|
+
# with a false "environment broken" diagnosis — even though the trust
|
|
310
|
+
# gate was working exactly as designed (quadraui#542's actual shape:
|
|
311
|
+
# one fix round, then this).
|
|
312
|
+
acceptance_gate_attempts: int = 0
|
|
313
|
+
# #2199 review: the SHA `acceptance_gate_attempts` above is counting
|
|
314
|
+
# dispatch attempts FOR. `_decide_acceptance_gate` resets the counter to
|
|
315
|
+
# 0 whenever it sees a SHA that doesn't match this — a fresh commit (a
|
|
316
|
+
# fix round, a rebase) always gets its own full attempt budget, and only
|
|
317
|
+
# repeated failures to produce ANY verdict for the SAME commit reach
|
|
318
|
+
# `_die()`.
|
|
319
|
+
acceptance_gate_attempts_sha: str = ""
|
|
291
320
|
# #2079: a SECOND, independent budget of exactly the same shape, spent
|
|
292
321
|
# only on landing the oracle-mode JIT acceptance slice
|
|
293
322
|
# (`_decide_acceptance_landing`). Separate rather than shared because the
|
|
@@ -375,6 +404,14 @@ class AcceptanceGateChecker(Protocol):
|
|
|
375
404
|
|
|
376
405
|
def resolve_for_path(self, repo_name: str, milestone_number: int) -> str | None: ...
|
|
377
406
|
|
|
407
|
+
def is_issue_exempt(
|
|
408
|
+
self,
|
|
409
|
+
repo_name: str,
|
|
410
|
+
milestone_number: int,
|
|
411
|
+
issue_number: int,
|
|
412
|
+
issue_labels: tuple[str, ...],
|
|
413
|
+
) -> bool: ...
|
|
414
|
+
|
|
378
415
|
|
|
379
416
|
@dataclass
|
|
380
417
|
class GitHubAcceptanceGateChecker:
|
|
@@ -412,6 +449,34 @@ class GitHubAcceptanceGateChecker:
|
|
|
412
449
|
return None
|
|
413
450
|
return resolve_for_path(self.config, repo_cfg, milestone_number)
|
|
414
451
|
|
|
452
|
+
def is_issue_exempt(
|
|
453
|
+
self,
|
|
454
|
+
repo_name: str,
|
|
455
|
+
milestone_number: int,
|
|
456
|
+
issue_number: int,
|
|
457
|
+
issue_labels: tuple[str, ...],
|
|
458
|
+
) -> bool:
|
|
459
|
+
"""#2199: does *issue_number* opt out of the sealed suite — the
|
|
460
|
+
SAME ``manifest.exempt`` list / ``oracle:exempt`` label the #1138
|
|
461
|
+
hard gate (:func:`coord.milestone_dispatch.issue_oracle_ready`)
|
|
462
|
+
already reads. Reused rather than re-derived so the JIT-authoring
|
|
463
|
+
gate and the #2199 trust gate can never disagree about which
|
|
464
|
+
issues the oracle loop covers — see that function's own docstring
|
|
465
|
+
for why ``exempt`` says "doesn't consume the sealed suite" and
|
|
466
|
+
nothing about Gate A sign-off (already established True by the
|
|
467
|
+
time :func:`resolve_oracle_decision` calls this).
|
|
468
|
+
"""
|
|
469
|
+
from coord.milestone_dispatch import issue_oracle_ready # noqa: PLC0415
|
|
470
|
+
|
|
471
|
+
repo_cfg = self.config.repo(repo_name)
|
|
472
|
+
if repo_cfg is None:
|
|
473
|
+
return False
|
|
474
|
+
readiness = issue_oracle_ready(
|
|
475
|
+
repo_cfg, self.config, milestone_number, issue_number,
|
|
476
|
+
issue_labels=issue_labels,
|
|
477
|
+
)
|
|
478
|
+
return readiness.exempt
|
|
479
|
+
|
|
415
480
|
|
|
416
481
|
@dataclass(frozen=True)
|
|
417
482
|
class OracleDecision:
|
|
@@ -424,11 +489,23 @@ class OracleDecision:
|
|
|
424
489
|
to guess which mode a run is in. ``tracking_issue`` is set iff ``active``
|
|
425
490
|
— the argument :func:`_decide_acceptance_author` needs to build ``coord
|
|
426
491
|
acceptance author <repo> <tracking_issue> --issue <N>``.
|
|
492
|
+
|
|
493
|
+
#2199: ``issue_exempt`` — resolved alongside ``active`` (same one-shot
|
|
494
|
+
GitHub fetch budget: ``AcceptanceGateChecker.is_issue_exempt`` reuses the
|
|
495
|
+
#1138 hard gate's own manifest read) — is *this issue*'s
|
|
496
|
+
``manifest.exempt``/``oracle:exempt`` opt-out from the sealed suite.
|
|
497
|
+
:func:`_decide_acceptance_gate` (the trust gate) skips entirely when
|
|
498
|
+
this is ``True``: an exempt issue has no authored slice for `coord
|
|
499
|
+
acceptance record` to re-run, so treating its absence as a red verdict
|
|
500
|
+
would be exactly the "acquire a new blocking gate it never opted into"
|
|
501
|
+
regression #2199's acceptance criteria rule out. Always ``False`` when
|
|
502
|
+
``active`` is ``False`` — meaningless outside the oracle loop.
|
|
427
503
|
"""
|
|
428
504
|
|
|
429
505
|
active: bool
|
|
430
506
|
reason: str
|
|
431
507
|
tracking_issue: int | None = None
|
|
508
|
+
issue_exempt: bool = False
|
|
432
509
|
|
|
433
510
|
|
|
434
511
|
def resolve_oracle_decision(
|
|
@@ -488,6 +565,13 @@ def resolve_oracle_decision(
|
|
|
488
565
|
f"acceptance mock {state.repo} {state.milestone_tracking_issue}` "
|
|
489
566
|
"first for the oracle loop, docs/ORACLE_LOOP.md)",
|
|
490
567
|
)
|
|
568
|
+
# #2199: resolved here, alongside everything else `resolve_oracle_decision`
|
|
569
|
+
# already settles once per run — see `OracleDecision.issue_exempt`'s
|
|
570
|
+
# docstring for why the trust gate needs this and why it must reuse
|
|
571
|
+
# (not re-derive) the #1138 hard gate's own exemption check.
|
|
572
|
+
issue_exempt = gate_checker.is_issue_exempt(
|
|
573
|
+
state.repo, state.milestone_number, state.issue, state.issue_labels,
|
|
574
|
+
)
|
|
491
575
|
return OracleDecision(
|
|
492
576
|
True,
|
|
493
577
|
f"ORACLE DRIVE — ms-{state.milestone_number}'s Gate-A contract is "
|
|
@@ -496,6 +580,7 @@ def resolve_oracle_decision(
|
|
|
496
580
|
f"{state.milestone_tracking_issue} --issue {state.issue}`) before "
|
|
497
581
|
"dispatching work",
|
|
498
582
|
tracking_issue=state.milestone_tracking_issue,
|
|
583
|
+
issue_exempt=issue_exempt,
|
|
499
584
|
)
|
|
500
585
|
|
|
501
586
|
|
|
@@ -851,12 +936,14 @@ def _acceptance_message(message: str, state: IssueState) -> str:
|
|
|
851
936
|
|
|
852
937
|
|
|
853
938
|
class MergeVerifier(Protocol):
|
|
854
|
-
"""The
|
|
939
|
+
"""The git/GitHub questions the state machine cannot answer itself."""
|
|
855
940
|
|
|
856
941
|
def branch_has_commits(self, state: IssueState) -> bool: ...
|
|
857
942
|
|
|
858
943
|
def verify_merged(self, state: IssueState) -> bool: ...
|
|
859
944
|
|
|
945
|
+
def branch_head_sha(self, state: IssueState) -> str | None: ...
|
|
946
|
+
|
|
860
947
|
|
|
861
948
|
@dataclass
|
|
862
949
|
class GitMergeVerifier:
|
|
@@ -965,6 +1052,23 @@ class GitMergeVerifier:
|
|
|
965
1052
|
finally:
|
|
966
1053
|
self._git(base, "update-ref", "-d", vref)
|
|
967
1054
|
|
|
1055
|
+
def branch_head_sha(self, state: IssueState) -> str | None:
|
|
1056
|
+
"""The exact commit `coord acceptance record --sha` (#2199) must be
|
|
1057
|
+
pointed at — the trust gate re-runs the sealed suite against a
|
|
1058
|
+
precise SHA, never a branch name that could move under a slow
|
|
1059
|
+
drive loop. GitHub API, not a local checkout: same reasoning as
|
|
1060
|
+
:meth:`verify_merged`'s primary path — authoritative for every
|
|
1061
|
+
machine this driver might run on, no ``~/src/<repo>`` clone
|
|
1062
|
+
required. Returns ``None`` (never raises) when the branch is gone
|
|
1063
|
+
or GitHub is unreachable; callers treat that as "try again next
|
|
1064
|
+
poll", never as a verdict.
|
|
1065
|
+
"""
|
|
1066
|
+
if not state.work_branch or not state.repo_github:
|
|
1067
|
+
return None
|
|
1068
|
+
from coord import github_ops # noqa: PLC0415
|
|
1069
|
+
|
|
1070
|
+
return github_ops.get_branch_sha(state.repo_github, state.work_branch)
|
|
1071
|
+
|
|
968
1072
|
|
|
969
1073
|
# ── preflight (pure) ─────────────────────────────────────────────────────────
|
|
970
1074
|
|
|
@@ -1326,6 +1430,22 @@ def decide(
|
|
|
1326
1430
|
_escalate_dead_end(state, dead_end), warnings=warnings
|
|
1327
1431
|
)
|
|
1328
1432
|
|
|
1433
|
+
# #2199: the oracle loop's TRUST GATE — docs/ORACLE_LOOP.md Phase-1 step
|
|
1434
|
+
# 6, right here between the dead-end predicate and the Test gate,
|
|
1435
|
+
# because this is the first point `coord drive` has observed the work
|
|
1436
|
+
# assignment's branch head AFTER push. Before this, nothing ever called
|
|
1437
|
+
# `coord acceptance record`: an issue driven end-to-end by `coord drive`
|
|
1438
|
+
# completed with `acceptance_state = None` forever, so the sealed suite
|
|
1439
|
+
# was never re-run externally and `_maybe_clear_expected_red` could
|
|
1440
|
+
# never clear (quadraui#542).
|
|
1441
|
+
acceptance_gate = _decide_acceptance_gate(
|
|
1442
|
+
state, opts, counters, machine, oracle, verifier, gate_checker
|
|
1443
|
+
)
|
|
1444
|
+
if acceptance_gate is not None:
|
|
1445
|
+
return replace(
|
|
1446
|
+
acceptance_gate, warnings=warnings + acceptance_gate.warnings
|
|
1447
|
+
)
|
|
1448
|
+
|
|
1329
1449
|
test = _decide_test(state, opts, counters, machine)
|
|
1330
1450
|
if test is not None:
|
|
1331
1451
|
return replace(test, warnings=warnings + test.warnings)
|
|
@@ -1467,6 +1587,161 @@ def _decide_advisory(
|
|
|
1467
1587
|
)
|
|
1468
1588
|
|
|
1469
1589
|
|
|
1590
|
+
def _decide_acceptance_gate(
|
|
1591
|
+
state: IssueState,
|
|
1592
|
+
opts: DriveOptions,
|
|
1593
|
+
counters: DriveCounters,
|
|
1594
|
+
machine: str,
|
|
1595
|
+
oracle: OracleDecision | None,
|
|
1596
|
+
verifier: MergeVerifier,
|
|
1597
|
+
gate_checker: AcceptanceGateChecker | None,
|
|
1598
|
+
) -> Action | None:
|
|
1599
|
+
"""The #2199 oracle-loop TRUST GATE — ``coord acceptance record --repo
|
|
1600
|
+
R --issue N --sha <pushed sha>``, run by the COORDINATOR (this process,
|
|
1601
|
+
never inside the worker's own session) against the exact commit the
|
|
1602
|
+
work assignment pushed. docs/ORACLE_LOOP.md's Phase-1 step 6, and the
|
|
1603
|
+
reason it exists: a headless worker's in-session "green" claim
|
|
1604
|
+
(``coord acceptance run``, Phase-1 step 5) can lie; it cannot fake the
|
|
1605
|
+
coordinator re-running the sealed suite itself. ``None`` means "not
|
|
1606
|
+
applicable, or already resolved for this SHA — fall through to Test".
|
|
1607
|
+
|
|
1608
|
+
Before #2199 NOTHING ever called this — an issue driven end-to-end by
|
|
1609
|
+
``coord drive`` completed with ``acceptance_state = None`` forever, so
|
|
1610
|
+
``coord.merge_queue._maybe_clear_expected_red`` could never clear an
|
|
1611
|
+
``expected_red`` entry either (quadraui#542, quadraui#492).
|
|
1612
|
+
|
|
1613
|
+
Only fires when ``oracle.active`` (a driver-configured repo, an issue
|
|
1614
|
+
in a milestone whose Gate-A contract is merged — the same condition
|
|
1615
|
+
that gated JIT-slice authoring) AND this issue is not
|
|
1616
|
+
``oracle.issue_exempt`` (``manifest.exempt`` / the ``oracle:exempt``
|
|
1617
|
+
label — an issue that never consumed the sealed suite has nothing for
|
|
1618
|
+
``record`` to re-run, so gating on its absence would be a NEW blocking
|
|
1619
|
+
gate an exempt issue never opted into, exactly what #2199's acceptance
|
|
1620
|
+
criteria rule out). Every other issue — no driver, no milestone,
|
|
1621
|
+
``--no-acceptance`` — passes straight through unchanged.
|
|
1622
|
+
|
|
1623
|
+
*gate_checker* (#2199 review, blocking finding 3): resolves
|
|
1624
|
+
``--for-path`` for a ROUTED repo (``acceptance.drivers.<repo>.routes``)
|
|
1625
|
+
exactly like :func:`_decide_acceptance_author` already does — without
|
|
1626
|
+
it, ``coord commands/acceptance.py``'s ``_resolve_driver`` hard-refuses
|
|
1627
|
+
every dispatch on a routed repo with "no route matched", so the trust
|
|
1628
|
+
gate silently never functioned there at all.
|
|
1629
|
+
"""
|
|
1630
|
+
if oracle is None or not oracle.active or oracle.issue_exempt:
|
|
1631
|
+
return None
|
|
1632
|
+
assert gate_checker is not None, (
|
|
1633
|
+
"oracle.active implies resolve_oracle_decision ran with a real "
|
|
1634
|
+
"gate_checker; decide() always threads one through"
|
|
1635
|
+
)
|
|
1636
|
+
|
|
1637
|
+
sha = verifier.branch_head_sha(state)
|
|
1638
|
+
if sha is None:
|
|
1639
|
+
# GitHub unreachable or the branch vanished between polls — don't
|
|
1640
|
+
# let a transient lookup block a whole drive run; retry next poll.
|
|
1641
|
+
return _wait(label="ACCEPTANCE: waiting to resolve the pushed SHA")
|
|
1642
|
+
|
|
1643
|
+
if state.work_acceptance_sha == sha:
|
|
1644
|
+
if state.work_acceptance_state == "passed":
|
|
1645
|
+
return None # trust gate already green for this exact commit
|
|
1646
|
+
if state.work_acceptance_state == "failed":
|
|
1647
|
+
# Same shape as a failed Test verdict (#2199 acceptance: "a
|
|
1648
|
+
# failed trust gate must block, not warn ... at the same place
|
|
1649
|
+
# a failed Test verdict does") — a bounded fix-round retry,
|
|
1650
|
+
# sharing the ONE fix budget `_decide_test` also spends from
|
|
1651
|
+
# (#1692: a failed test and a failed trust gate are two shapes
|
|
1652
|
+
# of the same "the work needs another round" loop).
|
|
1653
|
+
if counters.fix_rounds >= opts.max_fix_rounds:
|
|
1654
|
+
return _die(
|
|
1655
|
+
f"acceptance trust gate still failing after "
|
|
1656
|
+
f"{counters.fix_rounds} fix round(s) at {sha} — "
|
|
1657
|
+
"stopping.\n"
|
|
1658
|
+
f" Reason: {state.work_acceptance_reason or 'none recorded'}\n"
|
|
1659
|
+
f" Inspect: coord log {state.work_aid} --machine "
|
|
1660
|
+
f"{state.work_machine or machine}"
|
|
1661
|
+
)
|
|
1662
|
+
counters.fix_rounds += 1
|
|
1663
|
+
return Action(
|
|
1664
|
+
kind=RUN,
|
|
1665
|
+
label=(
|
|
1666
|
+
"ACCEPTANCE: trust gate failed → fix round "
|
|
1667
|
+
f"{counters.fix_rounds}/{opts.max_fix_rounds} "
|
|
1668
|
+
f"(coord fix {state.work_aid})"
|
|
1669
|
+
),
|
|
1670
|
+
command=("fix", state.work_aid),
|
|
1671
|
+
error_message=(
|
|
1672
|
+
f"coord fix {state.work_aid} failed to dispatch after a "
|
|
1673
|
+
"failed acceptance trust gate."
|
|
1674
|
+
),
|
|
1675
|
+
)
|
|
1676
|
+
|
|
1677
|
+
# No verdict recorded yet for this exact SHA — never run, or run
|
|
1678
|
+
# against a now-stale one (a fix round, a rebase). Dispatch it.
|
|
1679
|
+
#
|
|
1680
|
+
# #2199 review (blocking finding 1): `acceptance_gate_attempts` is
|
|
1681
|
+
# scoped to THIS sha, not a lifetime total — a fresh SHA (this branch
|
|
1682
|
+
# runs again after a fix round pushed a new commit) gets its own full
|
|
1683
|
+
# attempt budget. Without this reset, the legitimate re-dispatch for
|
|
1684
|
+
# SHA2 inherited SHA1's already-spent count and died immediately with a
|
|
1685
|
+
# false "environment broken" diagnosis on exactly the second round the
|
|
1686
|
+
# docstring above says this mirrors `_decide_test` for.
|
|
1687
|
+
if counters.acceptance_gate_attempts_sha != sha:
|
|
1688
|
+
counters.acceptance_gate_attempts = 0
|
|
1689
|
+
counters.acceptance_gate_attempts_sha = sha
|
|
1690
|
+
|
|
1691
|
+
# `on_error="warn"` is deliberate: `coord acceptance record` exits
|
|
1692
|
+
# non-zero BOTH when it successfully records a red verdict (the board
|
|
1693
|
+
# write already happened before it exits — the next poll's
|
|
1694
|
+
# `work_acceptance_state == "failed"` branch above is what actually
|
|
1695
|
+
# bounces to Fix) and when it errors out before ever reaching a verdict
|
|
1696
|
+
# (no local checkout, a driver crash, a git fetch failure). Raising
|
|
1697
|
+
# `DriveError` here on either would turn a routine red trust-gate round
|
|
1698
|
+
# into a terminal drive failure — exactly the "must block [via Fix],
|
|
1699
|
+
# not warn" the acceptance criteria ask for, achieved one poll later by
|
|
1700
|
+
# observation rather than by inspecting this exit code directly.
|
|
1701
|
+
if counters.acceptance_gate_attempts >= opts.max_work_retries:
|
|
1702
|
+
return _die(
|
|
1703
|
+
f"acceptance trust gate never produced a verdict for {sha} "
|
|
1704
|
+
f"after {counters.acceptance_gate_attempts} attempt(s) — "
|
|
1705
|
+
"`coord acceptance record` keeps failing before recording "
|
|
1706
|
+
"anything (checkout/driver/environment problem, not a red "
|
|
1707
|
+
"suite).\n"
|
|
1708
|
+
f" Inspect: coord acceptance record --repo {state.repo} "
|
|
1709
|
+
f"--issue {state.issue} --sha {sha}"
|
|
1710
|
+
)
|
|
1711
|
+
counters.acceptance_gate_attempts += 1
|
|
1712
|
+
|
|
1713
|
+
# #2199 review (blocking finding 3): resolve `--for-path` exactly like
|
|
1714
|
+
# `_decide_acceptance_author` does — a routed repo's `_resolve_driver`
|
|
1715
|
+
# (coord/commands/acceptance.py) hard-refuses with "no route matched"
|
|
1716
|
+
# when it's omitted, which made the trust gate structurally unable to
|
|
1717
|
+
# ever record a verdict for such a repo.
|
|
1718
|
+
from coord.acceptance import ForPathResolutionError # noqa: PLC0415
|
|
1719
|
+
|
|
1720
|
+
try:
|
|
1721
|
+
for_path = gate_checker.resolve_for_path(state.repo, state.milestone_number)
|
|
1722
|
+
except ForPathResolutionError as exc:
|
|
1723
|
+
return _die(
|
|
1724
|
+
f"could not resolve --for-path for {state.repo}'s acceptance "
|
|
1725
|
+
f"trust gate on #{state.issue}: {exc}"
|
|
1726
|
+
)
|
|
1727
|
+
command = [
|
|
1728
|
+
"acceptance", "record", "--repo", state.repo, "--issue",
|
|
1729
|
+
str(state.issue), "--sha", sha,
|
|
1730
|
+
]
|
|
1731
|
+
if for_path:
|
|
1732
|
+
command += ["--for-path", for_path]
|
|
1733
|
+
|
|
1734
|
+
return Action(
|
|
1735
|
+
kind=RUN,
|
|
1736
|
+
label=(
|
|
1737
|
+
"ACCEPTANCE: trust gate → coord acceptance record --sha "
|
|
1738
|
+
f"{sha[:12]}" + (f" --for-path {for_path}" if for_path else "")
|
|
1739
|
+
),
|
|
1740
|
+
command=tuple(command),
|
|
1741
|
+
on_error="warn",
|
|
1742
|
+
)
|
|
1743
|
+
|
|
1744
|
+
|
|
1470
1745
|
def _decide_test(
|
|
1471
1746
|
state: IssueState,
|
|
1472
1747
|
opts: DriveOptions,
|
|
@@ -84,6 +84,20 @@ class IssueState:
|
|
|
84
84
|
work_review_iter: int = 0
|
|
85
85
|
work_exit_code: int | None = None
|
|
86
86
|
work_failure_reason: str = ""
|
|
87
|
+
# #2199: the trust-gate verdict `coord acceptance record --issue N --sha
|
|
88
|
+
# <sha>` writes onto THIS issue's own `work` row (see `coord.state.
|
|
89
|
+
# record_acceptance_verdict` — the same field `coord.merge_queue.
|
|
90
|
+
# _maybe_clear_expected_red` already reads via `getattr(work,
|
|
91
|
+
# "acceptance_state", None)`). "" | "passed" | "failed" — "" means no
|
|
92
|
+
# verdict has ever been recorded for this work row, which is exactly
|
|
93
|
+
# the ambiguity #2199 exists to resolve: nothing used to write this at
|
|
94
|
+
# all, so it was indistinguishable from "the gate ran and lied clean".
|
|
95
|
+
# `work_acceptance_sha` is the commit the last verdict was recorded
|
|
96
|
+
# against — a fresh push (fix round, rebase) invalidates it the same
|
|
97
|
+
# way `review_head_sha` invalidates a stale review approval.
|
|
98
|
+
work_acceptance_state: str = ""
|
|
99
|
+
work_acceptance_reason: str = ""
|
|
100
|
+
work_acceptance_sha: str = ""
|
|
87
101
|
|
|
88
102
|
review_aid: str = ""
|
|
89
103
|
review_status: str = ""
|
|
@@ -141,6 +155,12 @@ class IssueState:
|
|
|
141
155
|
# member of any tracked work order — the "normal drive" case.
|
|
142
156
|
milestone_number: int | None = None
|
|
143
157
|
milestone_tracking_issue: int | None = None
|
|
158
|
+
# #2199: this issue's own GitHub labels — resolved from the same
|
|
159
|
+
# `/board` `issues` row `milestone_number` is (no extra I/O). Threaded
|
|
160
|
+
# through so `resolve_oracle_decision` can resolve per-issue
|
|
161
|
+
# `oracle:exempt`/`manifest.exempt` opt-out for the trust gate
|
|
162
|
+
# (`AcceptanceGateChecker.is_issue_exempt`) without a second board scan.
|
|
163
|
+
issue_labels: tuple[str, ...] = ()
|
|
144
164
|
|
|
145
165
|
# The JIT slice's own `type="test-author"` assignment (#1171: keyed on
|
|
146
166
|
# `for_issue_number == issue`, NOT `issue_number` — that field is the
|
|
@@ -224,6 +244,12 @@ class IssueState:
|
|
|
224
244
|
self.work_aid,
|
|
225
245
|
self.work_status,
|
|
226
246
|
self.work_test_state,
|
|
247
|
+
# #2199: the trust gate's own verdict is a real transition
|
|
248
|
+
# the same way work_test_state is — see the docstring above
|
|
249
|
+
# for why omitting an analogous field mutes the `state:`
|
|
250
|
+
# log line and fools the stall detector.
|
|
251
|
+
self.work_acceptance_state,
|
|
252
|
+
self.work_acceptance_sha,
|
|
227
253
|
self.work_review_state,
|
|
228
254
|
self.work_review_iter,
|
|
229
255
|
self.review_status,
|
|
@@ -402,6 +428,9 @@ def project(payload: dict, repo: str, issue: int, config: Any) -> IssueState:
|
|
|
402
428
|
work_review_iter=int(g(work, "review_iteration", 0) or 0),
|
|
403
429
|
work_exit_code=None if exit_code is None else int(exit_code),
|
|
404
430
|
work_failure_reason=g(work, "failure_reason"),
|
|
431
|
+
work_acceptance_state=g(work, "acceptance_state"),
|
|
432
|
+
work_acceptance_reason=g(work, "acceptance_reason"),
|
|
433
|
+
work_acceptance_sha=g(work, "acceptance_sha"),
|
|
405
434
|
review_aid=g(review, "assignment_id"),
|
|
406
435
|
review_status=g(review, "status"),
|
|
407
436
|
review_verdict=g(review, "review_verdict"),
|
|
@@ -421,6 +450,7 @@ def project(payload: dict, repo: str, issue: int, config: Any) -> IssueState:
|
|
|
421
450
|
picked_machine_no_capable=_machine_pick.no_capable_machine,
|
|
422
451
|
milestone_number=milestone_number,
|
|
423
452
|
milestone_tracking_issue=milestone_tracking_issue,
|
|
453
|
+
issue_labels=tuple(issue_labels),
|
|
424
454
|
# #2024: the per-issue Test-stage policy, off the labels already read
|
|
425
455
|
# above (no extra I/O). `test_mode_from_labels` is the same function
|
|
426
456
|
# `coord.state._get_issue_test_mode_local` uses, so the driver and the
|