code-coordinator 0.5.61__tar.gz → 0.5.62__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.61/code_coordinator.egg-info → code_coordinator-0.5.62}/PKG-INFO +1 -1
- {code_coordinator-0.5.61 → code_coordinator-0.5.62/code_coordinator.egg-info}/PKG-INFO +1 -1
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/agent.py +89 -11
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dispatch.py +8 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/drive.py +27 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/models.py +16 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/notify.py +18 -1
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_agent_zero_commit.py +166 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_dispatch.py +35 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_drive.py +71 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_notify.py +60 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/.github/workflows/release-tui.yml +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/.gitignore +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/CLAUDE.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/GOAL.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/LICENSE +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/MANIFEST.in +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/README.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/__init__.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/audit.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/board_bool_guard.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/board_service.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/brain.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/claim.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/cli.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/client.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/comments.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/config.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dao.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/.gitignore +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/components.json +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/dist/assets/Gallery-da3qNiIw.js +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/dist/assets/Terminal-skVFCxPU.js +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/dist/assets/index-DltfZR5f.js +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/dist/index.html +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/dist/sw.js +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/eslint.config.js +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/index.html +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/package-lock.json +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/package.json +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/playwright.config.ts +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/postcss.config.js +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/App.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/api/client.ts +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/api/generated.ts +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/index.css +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/main.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/test-setup.ts +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/tailwind.config.js +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/tsconfig.json +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/tsconfig.node.json +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dashboard/webapp/vite.config.ts +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/db.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/deps.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/events.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/filelock.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/freshness.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/gates.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/goal.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/health/context.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/health/models.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/health/render.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/health/units.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/hooks.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/interactive.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/network.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/openapi.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/parentage.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/plans.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/progress.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/release_window.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/reports.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/review.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/smoke.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/split_work.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/state.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/test_author.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/test_report.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/usage.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/install-agent.sh +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/pyproject.toml +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/setup.cfg +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/__init__.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/acceptance/ms-33/audit_1039.rs +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/acceptance/ms-33/contract.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/acceptance/ms-33/manifest.yml +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/acceptance/ms-38/contract.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/acceptance/ms-38/manifest.yml +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/conftest.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_config.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_db.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_events.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_init.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_models.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_network.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_no_direct_gh_calls.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_review.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_session.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_split.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_state.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/Cargo.lock +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/Cargo.toml +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/cargo-config-local-quadraui.toml.example +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/src/app/audit.rs +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/src/app/chat.rs +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/src/app/data.rs +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/src/app/dialogs.rs +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/src/app/drive.rs +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/src/app/drive_queue.rs +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/src/app/escalation.rs +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/src/app/events.rs +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/src/app/fixtures.rs +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/src/app/fleet_health.rs +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/src/app/fleet_sessions.rs +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/src/app/fleet_terminals.rs +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/src/app/format.rs +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/src/app/milestone_dag.rs +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/src/app/mod.rs +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/src/app/msv.rs +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/src/app/pipeline.rs +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/src/app/plans.rs +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/src/app/render.rs +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/src/app/reports.rs +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/src/app/sessions.rs +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/src/app/settings_ui.rs +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/src/app/sidebar.rs +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/src/app/terminal.rs +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/src/app/tests.rs +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/src/app/types.rs +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/src/app/workspace.rs +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/src/bin/gtk.rs +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/src/commands.rs +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/src/lib.rs +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/src/main.rs +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/src/settings.rs +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/tests/acceptance.rs +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/tests/cli.rs +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.62}/tui/tests/fixtures/board_sample.json +0 -0
|
@@ -26,6 +26,7 @@ from pathlib import Path
|
|
|
26
26
|
from typing import TYPE_CHECKING, Any, Callable, Iterable
|
|
27
27
|
|
|
28
28
|
from coord import cargo_cache
|
|
29
|
+
from coord.models import DELIVERABLE_ANALYSIS_LABEL
|
|
29
30
|
from coord.platform_paths import default_coord_dir
|
|
30
31
|
|
|
31
32
|
if TYPE_CHECKING:
|
|
@@ -604,6 +605,19 @@ class AssignmentSpec:
|
|
|
604
605
|
# `AssignmentSpec(**body)` in agent_app.py 400s on those) unless the
|
|
605
606
|
# operator has actually configured one.
|
|
606
607
|
cost_ceiling_usd: float | None = None
|
|
608
|
+
# #2188: the issue's GitHub label names, mirroring `Proposal.issue_labels`
|
|
609
|
+
# (#1430) — carried on the wire so a reap running on a config-free agent
|
|
610
|
+
# (docs/EPHEMERAL_WORKERS.md; no local DB or GitHub token to ask) can
|
|
611
|
+
# still see `coord.models.DELIVERABLE_ANALYSIS_LABEL` without an extra
|
|
612
|
+
# round-trip. Only `coord/dispatch.py`'s `dispatch()` populates this (from
|
|
613
|
+
# `proposal.issue_labels`, itself only set for `type="work"` dispatches —
|
|
614
|
+
# see #1430's `model_for_labels`/`provider_for_labels` gating), and only
|
|
615
|
+
# when non-empty — an agent predating this field 400s on an unrecognized
|
|
616
|
+
# kwarg (`AssignmentSpec(**body)` in agent_app.py), same discipline as
|
|
617
|
+
# every other optional wire field above. Empty by default: a spec with no
|
|
618
|
+
# labels (or dispatched by a caller that never populated
|
|
619
|
+
# `Proposal.issue_labels`) behaves exactly as before this field existed.
|
|
620
|
+
issue_labels: list[str] = field(default_factory=list)
|
|
607
621
|
|
|
608
622
|
|
|
609
623
|
class _GitError(RuntimeError):
|
|
@@ -2700,6 +2714,11 @@ class AgentAssignment:
|
|
|
2700
2714
|
# #448: advisory reason when the worker exited cleanly (exit_code==0) but
|
|
2701
2715
|
# pushed 0 commits. None on all other status values.
|
|
2702
2716
|
#
|
|
2717
|
+
# #2188: also None (never set) for an issue labelled `deliverable:
|
|
2718
|
+
# analysis` — that shape lands on `status == DONE`/`analysis_deliverable
|
|
2719
|
+
# = True` below instead, since 0 commits is its SUCCESS condition, not
|
|
2720
|
+
# something advisory.
|
|
2721
|
+
#
|
|
2703
2722
|
# #1323 used to *also* reuse this field (for "work"-type assignments,
|
|
2704
2723
|
# see _ADVISORY_TYPES) to hold a reason when a configured artifact_paths
|
|
2705
2724
|
# glob matched 0 files, downgrading DONE -> ADVISORY in the process.
|
|
@@ -2787,6 +2806,26 @@ class AgentAssignment:
|
|
|
2787
2806
|
# ceiling kill is indistinguishable from a crash and the money is spent
|
|
2788
2807
|
# again on the next pass.
|
|
2789
2808
|
spend_ceiling_reason: str | None = None
|
|
2809
|
+
# #2188: True when `_reap` classified a clean (exit_code==0), 0-commit
|
|
2810
|
+
# exit as a DELIVERABLE — the issue was labelled
|
|
2811
|
+
# `coord.models.DELIVERABLE_ANALYSIS_LABEL` (`spec.issue_labels`) — rather
|
|
2812
|
+
# than the #448 "worker did nothing" ADVISORY. Only ever set alongside
|
|
2813
|
+
# `status == DONE`; `False` on every other outcome, including a normal
|
|
2814
|
+
# zero-commit ADVISORY (the label wasn't present) and a labelled issue
|
|
2815
|
+
# whose worker actually pushed commits (that's an ordinary DONE, handled
|
|
2816
|
+
# by the ordinary Test/Review/Merge pipeline — this flag is specifically
|
|
2817
|
+
# "the deliverable IS the message, there is no diff").
|
|
2818
|
+
analysis_deliverable: bool = False
|
|
2819
|
+
# #2188: the worker's own final message — `result` off the last
|
|
2820
|
+
# stream-json `result` event (`coord.worker_events.WorkerSummary.
|
|
2821
|
+
# result_text`), captured here so the coordinator can post the actual
|
|
2822
|
+
# deliverable (a diagnosis/audit's prose) to the issue instead of a bare
|
|
2823
|
+
# "assignment complete" comment. The worker itself has no `gh` access to
|
|
2824
|
+
# post this — see coord.notify.post_transition's EVENT_COMPLETION arm.
|
|
2825
|
+
# Populated only when `analysis_deliverable` is True; `None` otherwise
|
|
2826
|
+
# (a normal work assignment's deliverable is the diff itself, already
|
|
2827
|
+
# visible on the PR — restating the transcript there would be noise).
|
|
2828
|
+
result_text: str | None = None
|
|
2790
2829
|
|
|
2791
2830
|
def to_dict(self) -> dict:
|
|
2792
2831
|
d = asdict(self)
|
|
@@ -7209,6 +7248,16 @@ class AgentServer:
|
|
|
7209
7248
|
# ("work",) to the full work-like set so `test-author`/`mock-author`
|
|
7210
7249
|
# get the same downgrade; before that they could land on `done` with
|
|
7211
7250
|
# an empty branch.
|
|
7251
|
+
# #2188: an issue labelled `deliverable:analysis` inverts the #448
|
|
7252
|
+
# reading — for it, a clean exit with 0 commits is the SUCCESS
|
|
7253
|
+
# condition (the deliverable is the worker's own final message, not
|
|
7254
|
+
# a diff), not the "worker did nothing" anomaly. Detected off
|
|
7255
|
+
# `assignment.spec.issue_labels` (wire field, #2188) so this works on
|
|
7256
|
+
# a config-free agent too — no DB or GitHub read required. Resolved
|
|
7257
|
+
# in the SAME `_ahead == 0` branch as the advisory check below so
|
|
7258
|
+
# the two can never disagree about what "0 commits" means for this
|
|
7259
|
+
# assignment.
|
|
7260
|
+
_analysis_deliverable = False
|
|
7212
7261
|
_zero_commit_reason: str | None = None
|
|
7213
7262
|
if (exit_code == 0 and assignment is not None
|
|
7214
7263
|
and assignment.worktree_path
|
|
@@ -7218,17 +7267,30 @@ class AgentServer:
|
|
|
7218
7267
|
_base = assignment.spec.branch or "main"
|
|
7219
7268
|
_ahead = self._commits_ahead(_wt_advisory, _base)
|
|
7220
7269
|
if _ahead == 0:
|
|
7221
|
-
|
|
7222
|
-
|
|
7223
|
-
|
|
7224
|
-
|
|
7225
|
-
|
|
7226
|
-
|
|
7227
|
-
|
|
7228
|
-
|
|
7229
|
-
|
|
7230
|
-
|
|
7231
|
-
|
|
7270
|
+
if DELIVERABLE_ANALYSIS_LABEL in (assignment.spec.issue_labels or []):
|
|
7271
|
+
_analysis_deliverable = True
|
|
7272
|
+
try:
|
|
7273
|
+
with open(assignment.log_path, "a") as reopen:
|
|
7274
|
+
reopen.write(
|
|
7275
|
+
"# reap: analysis deliverable — 0 commits "
|
|
7276
|
+
f"ahead of {_base}; issue labelled "
|
|
7277
|
+
f"{DELIVERABLE_ANALYSIS_LABEL!r}, status "
|
|
7278
|
+
"set to done (#2188)\n"
|
|
7279
|
+
)
|
|
7280
|
+
except OSError:
|
|
7281
|
+
pass
|
|
7282
|
+
else:
|
|
7283
|
+
_zero_commit_reason = (
|
|
7284
|
+
"worker exited cleanly but pushed 0 commits"
|
|
7285
|
+
)
|
|
7286
|
+
try:
|
|
7287
|
+
with open(assignment.log_path, "a") as reopen:
|
|
7288
|
+
reopen.write(
|
|
7289
|
+
"# reap: advisory — 0 commits ahead of "
|
|
7290
|
+
f"{_base}; status set to advisory\n"
|
|
7291
|
+
)
|
|
7292
|
+
except OSError:
|
|
7293
|
+
pass
|
|
7232
7294
|
|
|
7233
7295
|
# This block MUST always run regardless of push outcome so that
|
|
7234
7296
|
# the assignment transitions out of 'running'.
|
|
@@ -7296,6 +7358,22 @@ class AgentServer:
|
|
|
7296
7358
|
assignment.zero_commit_reason = _zero_commit_reason
|
|
7297
7359
|
else:
|
|
7298
7360
|
assignment.status = DONE
|
|
7361
|
+
if _analysis_deliverable:
|
|
7362
|
+
# #2188: 0 commits on a `deliverable:analysis`
|
|
7363
|
+
# issue is the success shape — capture the
|
|
7364
|
+
# worker's own final message (already parsed
|
|
7365
|
+
# into `_worker_summary` above) so the
|
|
7366
|
+
# coordinator can post the actual deliverable to
|
|
7367
|
+
# the issue instead of a bare "complete" comment.
|
|
7368
|
+
# Best-effort: a non-stream-json log (or one with
|
|
7369
|
+
# no terminal `result` event) just leaves
|
|
7370
|
+
# `result_text` `None` — the assignment is still
|
|
7371
|
+
# correctly `done`, only the auto-posted prose is
|
|
7372
|
+
# missing, same degradation as every other
|
|
7373
|
+
# best-effort log parse in this function.
|
|
7374
|
+
assignment.analysis_deliverable = True
|
|
7375
|
+
if _worker_summary is not None and _worker_summary.result_text:
|
|
7376
|
+
assignment.result_text = _worker_summary.result_text
|
|
7299
7377
|
else:
|
|
7300
7378
|
assignment.status = FAILED
|
|
7301
7379
|
# #1461: only ever attaches to a FAILED/ADVISORY transition —
|
|
@@ -755,6 +755,14 @@ def dispatch(
|
|
|
755
755
|
# field reject unknown payload keys with a 400.
|
|
756
756
|
if getattr(proposal, "resume_session_id", None):
|
|
757
757
|
payload["resume_session_id"] = proposal.resume_session_id
|
|
758
|
+
# #2188: the issue's GitHub labels, so the agent's own reap can see
|
|
759
|
+
# `coord.models.DELIVERABLE_ANALYSIS_LABEL` without a DB/GitHub round
|
|
760
|
+
# trip (config-free agent — docs/EPHEMERAL_WORKERS.md). Only sent when
|
|
761
|
+
# non-empty, same discipline as every optional wire field above — an
|
|
762
|
+
# agent predating `AssignmentSpec.issue_labels` 400s on an unrecognized
|
|
763
|
+
# kwarg.
|
|
764
|
+
if proposal.issue_labels:
|
|
765
|
+
payload["issue_labels"] = list(proposal.issue_labels)
|
|
758
766
|
# #2131: per-leg spend ceiling, resolved here (CLI/daemon lane) and
|
|
759
767
|
# carried on the wire so a config-free agent is covered too. Sent ONLY
|
|
760
768
|
# when the operator has actually configured one — with no `budget:` block
|
|
@@ -109,6 +109,7 @@ from coord.interactive import (
|
|
|
109
109
|
)
|
|
110
110
|
from coord.dead_end import DeadEnd, detect_dead_end
|
|
111
111
|
from coord.failure_class import classify_failure, plan_usage_limit_resume
|
|
112
|
+
from coord.models import DELIVERABLE_ANALYSIS_LABEL
|
|
112
113
|
from coord.usage_limits import PlanLimits, evaluate_usage_gate, get_plan_limits
|
|
113
114
|
# Lost in the #1584-onto-#1590 rebase: _decide_review() calls this, but the
|
|
114
115
|
# import lived in a hunk #1590 rewrote, so the merge came out textually clean
|
|
@@ -1397,6 +1398,32 @@ def decide(
|
|
|
1397
1398
|
f"{state.work_machine or machine}"
|
|
1398
1399
|
)
|
|
1399
1400
|
|
|
1401
|
+
# ---- analysis deliverable: done + 0 commits is the SUCCESS shape (#2188)
|
|
1402
|
+
#
|
|
1403
|
+
# An issue labelled `deliverable:analysis` inverts the read on a 0-commit
|
|
1404
|
+
# exit: the deliverable is the worker's own final message (already
|
|
1405
|
+
# posted to the issue by the coordinator — see coord.notify.
|
|
1406
|
+
# post_transition's EVENT_COMPLETION arm), not a diff. `coord.agent.
|
|
1407
|
+
# AgentServer._reap` only ever produces this shape on `status == "done"`
|
|
1408
|
+
# (never "advisory" — see `AgentAssignment.analysis_deliverable`), so
|
|
1409
|
+
# this only needs to guard the `done` arm above, and it runs BEFORE the
|
|
1410
|
+
# "no branch"/dead-end/Test/Review/Merge machinery below: none of that
|
|
1411
|
+
# applies when there is nothing to test, review, or merge. A labelled
|
|
1412
|
+
# issue whose worker DID push commits (the label describes the common
|
|
1413
|
+
# case, not a hard rule) falls through unchanged — `branch_has_commits`
|
|
1414
|
+
# is False only for the genuine 0-commit shape.
|
|
1415
|
+
if (
|
|
1416
|
+
state.work_status == "done"
|
|
1417
|
+
and DELIVERABLE_ANALYSIS_LABEL in state.issue_labels
|
|
1418
|
+
and (not state.work_branch or not verifier.branch_has_commits(state))
|
|
1419
|
+
):
|
|
1420
|
+
return _succeed(
|
|
1421
|
+
f"✓ ANALYSIS DELIVERABLE — {state.work_aid} completed with 0 "
|
|
1422
|
+
f"commits (issue labelled `{DELIVERABLE_ANALYSIS_LABEL}`); the "
|
|
1423
|
+
"worker's final message is the deliverable and was posted to "
|
|
1424
|
+
"the issue automatically — nothing to test, review, or merge."
|
|
1425
|
+
)
|
|
1426
|
+
|
|
1400
1427
|
# A 'done' row with no branch never pushed anything either.
|
|
1401
1428
|
if not state.work_branch:
|
|
1402
1429
|
return _die(
|
|
@@ -354,6 +354,22 @@ def test_mode_from_labels(labels) -> str | None:
|
|
|
354
354
|
return None
|
|
355
355
|
|
|
356
356
|
|
|
357
|
+
# #2188: the per-issue DELIVERABLE policy label — mirrors `TEST_MODE_*_LABEL`'s
|
|
358
|
+
# shape (cheapest fit, no body parsing). An issue whose deliverable is a
|
|
359
|
+
# written artifact (a diagnosis, an audit, a spike/investigation writeup)
|
|
360
|
+
# rather than a diff cannot succeed in the default pipeline: a worker that
|
|
361
|
+
# does exactly what was asked ends with 0 commits by design, which the reap
|
|
362
|
+
# otherwise reads as the #448 "worker did nothing" ADVISORY and `coord drive`
|
|
363
|
+
# gives up on — discarding the whole deliverable (#2188's own worked example,
|
|
364
|
+
# #2132, lost $1.65 of correct, on-topic analysis this way). Labelling the
|
|
365
|
+
# issue `deliverable:analysis` inverts that reading: a clean exit with 0
|
|
366
|
+
# commits is `coord.agent.AgentServer._reap`'s SUCCESS condition for this
|
|
367
|
+
# issue, not its anomaly — see `_ZERO_COMMIT_TYPES`/`AgentAssignment.
|
|
368
|
+
# analysis_deliverable` in coord/agent.py and the `decide()` short-circuit in
|
|
369
|
+
# coord/drive.py that skips Test/Review/Merge for it.
|
|
370
|
+
DELIVERABLE_ANALYSIS_LABEL = "deliverable:analysis"
|
|
371
|
+
|
|
372
|
+
|
|
357
373
|
@dataclass
|
|
358
374
|
class Assignment:
|
|
359
375
|
machine_name: str
|
|
@@ -2470,7 +2470,24 @@ def post_transition(transition: Transition, record: dict, entry: dict) -> None:
|
|
|
2470
2470
|
failure_reason=_failure_reason,
|
|
2471
2471
|
)
|
|
2472
2472
|
elif transition.event == EVENT_COMPLETION:
|
|
2473
|
-
|
|
2473
|
+
# #2188: a `deliverable:analysis` issue that legitimately ended with
|
|
2474
|
+
# 0 commits has no diff to point at — the deliverable IS the
|
|
2475
|
+
# worker's own final message (`AgentAssignment.result_text`, see
|
|
2476
|
+
# `coord.agent.AgentServer._reap`). Post it as the completion
|
|
2477
|
+
# comment's summary so it reaches the issue automatically; the
|
|
2478
|
+
# worker itself has no `gh` access to post it. Every other
|
|
2479
|
+
# completion (the overwhelming majority) is unaffected — `entry.get
|
|
2480
|
+
# ("analysis_deliverable")` is only ever truthy for this one shape.
|
|
2481
|
+
_analysis_summary = (
|
|
2482
|
+
entry.get("result_text") or ""
|
|
2483
|
+
if entry.get("analysis_deliverable")
|
|
2484
|
+
else ""
|
|
2485
|
+
)
|
|
2486
|
+
post_completion(
|
|
2487
|
+
exit_code=transition.exit_code or 0,
|
|
2488
|
+
summary=_analysis_summary,
|
|
2489
|
+
**common,
|
|
2490
|
+
)
|
|
2474
2491
|
mark_notified(
|
|
2475
2492
|
transition.assignment_id,
|
|
2476
2493
|
transition.event,
|
|
@@ -416,3 +416,169 @@ def test_advisory_counted_as_completed_in_health(
|
|
|
416
416
|
assert h["active"] == 0, "ADVISORY must not count as active"
|
|
417
417
|
assert h["completed"] >= 1, "ADVISORY must count as completed"
|
|
418
418
|
server.shutdown()
|
|
419
|
+
|
|
420
|
+
|
|
421
|
+
# ── `deliverable:analysis` inverts the 0-commit reading (#2188) ──────────────
|
|
422
|
+
#
|
|
423
|
+
# An issue whose deliverable is a written artifact (a diagnosis, an audit, a
|
|
424
|
+
# spike) — not a diff — legitimately ends with 0 commits: that is the SUCCESS
|
|
425
|
+
# condition, not the #448 "worker did nothing" anomaly. Labelling the issue
|
|
426
|
+
# `deliverable:analysis` tells the reap to record `done`, not `advisory`, for
|
|
427
|
+
# exactly that shape. An unlabelled issue with 0 commits must be completely
|
|
428
|
+
# unaffected — this is the other half of the acceptance test the issue asks
|
|
429
|
+
# for ("a normal (code) issue with zero commits still reports advisory
|
|
430
|
+
# exactly as it does today").
|
|
431
|
+
|
|
432
|
+
_RESULT_LINE = (
|
|
433
|
+
'{"type": "result", "subtype": "success", "is_error": false, '
|
|
434
|
+
'"result": "Diagnosis: 74 percent of blocking review findings were '
|
|
435
|
+
'real defects; zero were false positives or style nits."}'
|
|
436
|
+
)
|
|
437
|
+
|
|
438
|
+
|
|
439
|
+
def test_analysis_deliverable_zero_commit_is_done_not_advisory(
|
|
440
|
+
tmp_path: Path, repo_local_only: Path
|
|
441
|
+
) -> None:
|
|
442
|
+
"""#2188: `deliverable:analysis` + 0 commits + clean exit → DONE, not
|
|
443
|
+
ADVISORY — the core regression guard for the issue's acceptance
|
|
444
|
+
criteria."""
|
|
445
|
+
server = AgentServer(
|
|
446
|
+
machine_name="t",
|
|
447
|
+
repos=["api"],
|
|
448
|
+
repo_paths={"api": str(repo_local_only)},
|
|
449
|
+
state_dir=tmp_path / "state",
|
|
450
|
+
# Worker exits cleanly, writes nothing, but DOES emit a stream-json
|
|
451
|
+
# `result` event carrying its final diagnosis — exactly what
|
|
452
|
+
# `claude -p --output-format stream-json` produces.
|
|
453
|
+
worker_command=lambda spec: ["/bin/sh", "-c", f"printf '%s\\n' '{_RESULT_LINE}'"],
|
|
454
|
+
)
|
|
455
|
+
spec = AssignmentSpec(
|
|
456
|
+
repo_name="api",
|
|
457
|
+
repo_path=str(repo_local_only),
|
|
458
|
+
issue_number=2132,
|
|
459
|
+
issue_title="Diagnose the 29% request-changes rate",
|
|
460
|
+
briefing="b",
|
|
461
|
+
branch="main",
|
|
462
|
+
issue_labels=["deliverable:analysis"],
|
|
463
|
+
)
|
|
464
|
+
a = server.assign(spec)
|
|
465
|
+
final = server.wait_for(a.id, timeout=10)
|
|
466
|
+
|
|
467
|
+
assert final.status == DONE, (
|
|
468
|
+
f"expected DONE for a labelled analysis deliverable, got {final.status!r}"
|
|
469
|
+
)
|
|
470
|
+
assert final.exit_code == 0
|
|
471
|
+
assert final.zero_commit_reason is None, (
|
|
472
|
+
"must not carry the #448 advisory reason once relabelled done"
|
|
473
|
+
)
|
|
474
|
+
assert final.analysis_deliverable is True
|
|
475
|
+
assert final.result_text is not None
|
|
476
|
+
assert "74 percent" in final.result_text
|
|
477
|
+
server.shutdown()
|
|
478
|
+
|
|
479
|
+
|
|
480
|
+
def test_analysis_deliverable_label_appears_in_log(
|
|
481
|
+
tmp_path: Path, repo_local_only: Path
|
|
482
|
+
) -> None:
|
|
483
|
+
"""The analysis-deliverable diagnosis is written to the assignment log,
|
|
484
|
+
mirroring the existing advisory-reason log guarantee."""
|
|
485
|
+
server = AgentServer(
|
|
486
|
+
machine_name="t",
|
|
487
|
+
repos=["api"],
|
|
488
|
+
repo_paths={"api": str(repo_local_only)},
|
|
489
|
+
state_dir=tmp_path / "state",
|
|
490
|
+
worker_command=lambda spec: ["/bin/true"],
|
|
491
|
+
)
|
|
492
|
+
spec = AssignmentSpec(
|
|
493
|
+
repo_name="api",
|
|
494
|
+
repo_path=str(repo_local_only),
|
|
495
|
+
issue_number=2133,
|
|
496
|
+
issue_title="noop analysis",
|
|
497
|
+
briefing="b",
|
|
498
|
+
branch="main",
|
|
499
|
+
issue_labels=["deliverable:analysis"],
|
|
500
|
+
)
|
|
501
|
+
a = server.assign(spec)
|
|
502
|
+
final = server.wait_for(a.id, timeout=10)
|
|
503
|
+
|
|
504
|
+
assert final.status == DONE
|
|
505
|
+
assert final.log_path is not None
|
|
506
|
+
log_text = Path(final.log_path).read_text()
|
|
507
|
+
assert "analysis deliverable" in log_text.lower(), (
|
|
508
|
+
f"expected 'analysis deliverable' in log, got:\n{log_text}"
|
|
509
|
+
)
|
|
510
|
+
server.shutdown()
|
|
511
|
+
|
|
512
|
+
|
|
513
|
+
def test_unlabelled_zero_commit_is_still_advisory_exactly_as_before(
|
|
514
|
+
tmp_path: Path, repo_local_only: Path
|
|
515
|
+
) -> None:
|
|
516
|
+
"""#2188 acceptance: an ORDINARY (unlabelled) issue with 0 commits must
|
|
517
|
+
be completely unaffected by the new label — same ADVISORY status, same
|
|
518
|
+
reason, same `analysis_deliverable=False`/`result_text=None` as every
|
|
519
|
+
zero-commit work assignment before this feature existed."""
|
|
520
|
+
server = AgentServer(
|
|
521
|
+
machine_name="t",
|
|
522
|
+
repos=["api"],
|
|
523
|
+
repo_paths={"api": str(repo_local_only)},
|
|
524
|
+
state_dir=tmp_path / "state",
|
|
525
|
+
worker_command=lambda spec: ["/bin/sh", "-c", f"printf '%s\\n' '{_RESULT_LINE}'"],
|
|
526
|
+
)
|
|
527
|
+
spec = AssignmentSpec(
|
|
528
|
+
repo_name="api",
|
|
529
|
+
repo_path=str(repo_local_only),
|
|
530
|
+
issue_number=2134,
|
|
531
|
+
issue_title="ordinary no-op work",
|
|
532
|
+
briefing="b",
|
|
533
|
+
branch="main",
|
|
534
|
+
# No issue_labels at all — the common case.
|
|
535
|
+
)
|
|
536
|
+
a = server.assign(spec)
|
|
537
|
+
final = server.wait_for(a.id, timeout=10)
|
|
538
|
+
|
|
539
|
+
assert final.status == ADVISORY, (
|
|
540
|
+
f"unlabelled 0-commit issue must stay ADVISORY, got {final.status!r}"
|
|
541
|
+
)
|
|
542
|
+
assert final.zero_commit_reason is not None
|
|
543
|
+
assert "0 commits" in final.zero_commit_reason
|
|
544
|
+
assert final.analysis_deliverable is False
|
|
545
|
+
assert final.result_text is None
|
|
546
|
+
server.shutdown()
|
|
547
|
+
|
|
548
|
+
|
|
549
|
+
def test_analysis_deliverable_survives_persist_load(
|
|
550
|
+
tmp_path: Path, repo_local_only: Path
|
|
551
|
+
) -> None:
|
|
552
|
+
"""`analysis_deliverable`/`result_text` round-trip through the agent
|
|
553
|
+
state JSON (persist → load), mirroring the existing advisory round-trip
|
|
554
|
+
guarantee."""
|
|
555
|
+
from coord.agent import AgentAssignment # noqa: PLC0415
|
|
556
|
+
|
|
557
|
+
a = AgentAssignment(
|
|
558
|
+
id="analysis-001",
|
|
559
|
+
spec=AssignmentSpec(
|
|
560
|
+
repo_name="api",
|
|
561
|
+
repo_path="/tmp",
|
|
562
|
+
issue_number=1,
|
|
563
|
+
issue_title="t",
|
|
564
|
+
briefing="b",
|
|
565
|
+
issue_labels=["deliverable:analysis"],
|
|
566
|
+
),
|
|
567
|
+
status=DONE,
|
|
568
|
+
analysis_deliverable=True,
|
|
569
|
+
result_text="the diagnosis",
|
|
570
|
+
exit_code=0,
|
|
571
|
+
finished_at=1234567890.0,
|
|
572
|
+
)
|
|
573
|
+
d = a.to_dict()
|
|
574
|
+
assert d["status"] == DONE
|
|
575
|
+
assert d["analysis_deliverable"] is True
|
|
576
|
+
assert d["result_text"] == "the diagnosis"
|
|
577
|
+
|
|
578
|
+
spec_data = d.pop("spec")
|
|
579
|
+
spec = AssignmentSpec(**spec_data)
|
|
580
|
+
a2 = AgentAssignment(spec=spec, **d)
|
|
581
|
+
assert a2.status == DONE
|
|
582
|
+
assert a2.analysis_deliverable is True
|
|
583
|
+
assert a2.result_text == "the diagnosis"
|
|
584
|
+
assert a2.spec.issue_labels == ["deliverable:analysis"]
|
|
@@ -247,6 +247,41 @@ class TestDispatch:
|
|
|
247
247
|
payload = mock_post.call_args.kwargs["json"]
|
|
248
248
|
assert "target_branch" not in payload
|
|
249
249
|
|
|
250
|
+
@patch("coord.dispatch.httpx.post")
|
|
251
|
+
def test_payload_carries_issue_labels_when_set(
|
|
252
|
+
self, mock_post: MagicMock, config: Config,
|
|
253
|
+
) -> None:
|
|
254
|
+
"""#2188: `proposal.issue_labels` flows onto the wire so the agent's
|
|
255
|
+
own reap can see `deliverable:analysis` without a DB/GitHub round
|
|
256
|
+
trip (config-free agent)."""
|
|
257
|
+
mock_resp = MagicMock()
|
|
258
|
+
mock_resp.json.return_value = {"ok": True}
|
|
259
|
+
mock_post.return_value = mock_resp
|
|
260
|
+
|
|
261
|
+
p = Proposal(
|
|
262
|
+
id=1, machine_name="laptop", repo_name="api",
|
|
263
|
+
issue_number=2132, issue_title="Diagnose the 29% rate",
|
|
264
|
+
rationale="analysis",
|
|
265
|
+
issue_labels=["deliverable:analysis", "priority:high"],
|
|
266
|
+
)
|
|
267
|
+
dispatch(p, config)
|
|
268
|
+
payload = mock_post.call_args.kwargs["json"]
|
|
269
|
+
assert payload["issue_labels"] == ["deliverable:analysis", "priority:high"]
|
|
270
|
+
|
|
271
|
+
@patch("coord.dispatch.httpx.post")
|
|
272
|
+
def test_payload_omits_issue_labels_when_unset(
|
|
273
|
+
self, mock_post: MagicMock, config: Config, proposal: Proposal,
|
|
274
|
+
) -> None:
|
|
275
|
+
"""Older agents (pre-#2188) reject unknown kwargs in
|
|
276
|
+
AssignmentSpec(**body), so the field must be omitted when the
|
|
277
|
+
proposal carries no labels — matches `target_branch`'s discipline."""
|
|
278
|
+
mock_resp = MagicMock()
|
|
279
|
+
mock_resp.json.return_value = {"ok": True}
|
|
280
|
+
mock_post.return_value = mock_resp
|
|
281
|
+
dispatch(proposal, config)
|
|
282
|
+
payload = mock_post.call_args.kwargs["json"]
|
|
283
|
+
assert "issue_labels" not in payload
|
|
284
|
+
|
|
250
285
|
@patch("coord.dispatch.httpx.post")
|
|
251
286
|
def test_payload_carries_coordinator_only_files(
|
|
252
287
|
self, mock_post: MagicMock, proposal: Proposal,
|
|
@@ -1406,6 +1406,77 @@ def test_advisory_with_no_branch_at_all_is_terminal():
|
|
|
1406
1406
|
assert "no commits on its branch" in action.message
|
|
1407
1407
|
|
|
1408
1408
|
|
|
1409
|
+
# ── analysis deliverable: done + 0 commits is a SUCCESS, not a dead end (#2188)
|
|
1410
|
+
|
|
1411
|
+
|
|
1412
|
+
def test_analysis_deliverable_done_with_no_commits_succeeds():
|
|
1413
|
+
"""#2188: `coord.agent.AgentServer._reap` never lands a `deliverable:
|
|
1414
|
+
analysis` issue's 0-commit exit on `advisory` — it lands DONE. `coord
|
|
1415
|
+
drive` must record that as a success instead of dying on 'no commits
|
|
1416
|
+
on its branch'/'no branch' the way an ordinary work row would."""
|
|
1417
|
+
action = step(
|
|
1418
|
+
state(
|
|
1419
|
+
work_aid="w1",
|
|
1420
|
+
work_status="done",
|
|
1421
|
+
work_branch="issue-2132-diagnose",
|
|
1422
|
+
issue_labels=("deliverable:analysis",),
|
|
1423
|
+
),
|
|
1424
|
+
verifier=FakeVerifier(has_commits=False),
|
|
1425
|
+
)
|
|
1426
|
+
assert action.is_exit
|
|
1427
|
+
assert action.exit_code == EXIT_OK
|
|
1428
|
+
assert "ANALYSIS" in action.message
|
|
1429
|
+
assert "deliverable:analysis" in action.message
|
|
1430
|
+
|
|
1431
|
+
|
|
1432
|
+
def test_analysis_deliverable_done_with_no_branch_at_all_succeeds():
|
|
1433
|
+
"""Same as above when the reap never captured a branch name at all
|
|
1434
|
+
(e.g. the worktree was already gone) — `not state.work_branch` alone
|
|
1435
|
+
must be enough to take the analysis-deliverable exit, without ever
|
|
1436
|
+
calling `verifier.branch_has_commits` on an empty branch."""
|
|
1437
|
+
verifier = FakeVerifier(has_commits=True)
|
|
1438
|
+
action = step(
|
|
1439
|
+
state(
|
|
1440
|
+
work_aid="w1",
|
|
1441
|
+
work_status="done",
|
|
1442
|
+
work_branch="",
|
|
1443
|
+
issue_labels=("deliverable:analysis",),
|
|
1444
|
+
),
|
|
1445
|
+
verifier=verifier,
|
|
1446
|
+
)
|
|
1447
|
+
assert action.is_exit
|
|
1448
|
+
assert action.exit_code == EXIT_OK
|
|
1449
|
+
assert verifier.commits_calls == 0
|
|
1450
|
+
|
|
1451
|
+
|
|
1452
|
+
def test_analysis_deliverable_done_with_commits_falls_through_unchanged():
|
|
1453
|
+
"""The label describes the common case, not a hard rule: a
|
|
1454
|
+
`deliverable:analysis` issue whose worker DID push commits must reach
|
|
1455
|
+
the ordinary Test/Review/Merge pipeline exactly like any other done
|
|
1456
|
+
row, not the analysis short-circuit."""
|
|
1457
|
+
action = step(
|
|
1458
|
+
done_work(work_test_state="", issue_labels=("deliverable:analysis",)),
|
|
1459
|
+
verifier=FakeVerifier(has_commits=True),
|
|
1460
|
+
)
|
|
1461
|
+
assert action.kind == WAIT # waiting on coord to dispatch the Test stage
|
|
1462
|
+
|
|
1463
|
+
|
|
1464
|
+
def test_unlabelled_done_with_no_commits_is_unaffected_by_2188():
|
|
1465
|
+
"""#2188 acceptance: an ordinary (unlabelled) issue must be completely
|
|
1466
|
+
unaffected by the analysis-deliverable short-circuit — `coord.agent.
|
|
1467
|
+
AgentServer._reap` never puts an unlabelled 0-commit work row on
|
|
1468
|
+
`done` in the first place (it stays `advisory`, covered by the tests
|
|
1469
|
+
above), but this guards `decide()`'s own logic in case a `done` row
|
|
1470
|
+
with no branch/commits reaches it some other way."""
|
|
1471
|
+
action = step(
|
|
1472
|
+
state(work_aid="w1", work_status="done", work_branch=""),
|
|
1473
|
+
verifier=FakeVerifier(has_commits=False),
|
|
1474
|
+
)
|
|
1475
|
+
assert action.is_exit
|
|
1476
|
+
assert "no branch" in action.message
|
|
1477
|
+
assert "ANALYSIS" not in action.message
|
|
1478
|
+
|
|
1479
|
+
|
|
1409
1480
|
# ═══════════════════════════════════════════════════════════════════════════
|
|
1410
1481
|
# the TEST gate
|
|
1411
1482
|
# ═══════════════════════════════════════════════════════════════════════════
|
|
@@ -206,6 +206,66 @@ class TestRun:
|
|
|
206
206
|
assert row is not None, "assignment row must exist"
|
|
207
207
|
assert row["failure_reason"] == "remote: Invalid username or token."
|
|
208
208
|
|
|
209
|
+
def test_analysis_deliverable_completion_posts_final_message(
|
|
210
|
+
self, coord_dir: Path, config: Config
|
|
211
|
+
) -> None:
|
|
212
|
+
"""#2188: a `deliverable:analysis` issue's 0-commit completion has no
|
|
213
|
+
diff to point at — the deliverable IS the worker's own final message
|
|
214
|
+
(`AgentAssignment.result_text`). It must be posted automatically as
|
|
215
|
+
the completion comment's summary, since the worker itself has no
|
|
216
|
+
`gh` access to post it."""
|
|
217
|
+
_record("an1")
|
|
218
|
+
agent_status = {
|
|
219
|
+
"active": [],
|
|
220
|
+
"completed": [
|
|
221
|
+
_agent_completed(
|
|
222
|
+
"an1",
|
|
223
|
+
"done",
|
|
224
|
+
analysis_deliverable=True,
|
|
225
|
+
result_text=(
|
|
226
|
+
"Diagnosis: 74% of blocking review findings were "
|
|
227
|
+
"real defects; zero were false positives or style "
|
|
228
|
+
"nits."
|
|
229
|
+
),
|
|
230
|
+
)
|
|
231
|
+
],
|
|
232
|
+
}
|
|
233
|
+
with patch.object(notify_mod, "_agent_status", return_value=agent_status), \
|
|
234
|
+
patch("coord.dispatch.github_ops.post_issue_comment") as mock_post:
|
|
235
|
+
posted, _stuck, _attn, _stalled, _liveness = notify_mod.run(config)
|
|
236
|
+
assert len(posted) == 1
|
|
237
|
+
mock_post.assert_called_once()
|
|
238
|
+
body = mock_post.call_args.args[2]
|
|
239
|
+
assert "Coordinator: Assignment Complete" in body
|
|
240
|
+
assert "### Summary" in body
|
|
241
|
+
assert "74% of blocking review findings were real defects" in body
|
|
242
|
+
|
|
243
|
+
def test_ordinary_completion_has_no_summary_section(
|
|
244
|
+
self, coord_dir: Path, config: Config
|
|
245
|
+
) -> None:
|
|
246
|
+
"""#2188 acceptance: an ordinary (non-analysis) completion must be
|
|
247
|
+
unaffected — `result_text` is only ever folded into the posted
|
|
248
|
+
comment when `analysis_deliverable` is set on the same entry."""
|
|
249
|
+
_record("ord1")
|
|
250
|
+
agent_status = {
|
|
251
|
+
"active": [],
|
|
252
|
+
"completed": [
|
|
253
|
+
_agent_completed(
|
|
254
|
+
"ord1",
|
|
255
|
+
"done",
|
|
256
|
+
analysis_deliverable=False,
|
|
257
|
+
result_text="some unrelated final message",
|
|
258
|
+
)
|
|
259
|
+
],
|
|
260
|
+
}
|
|
261
|
+
with patch.object(notify_mod, "_agent_status", return_value=agent_status), \
|
|
262
|
+
patch("coord.dispatch.github_ops.post_issue_comment") as mock_post:
|
|
263
|
+
notify_mod.run(config)
|
|
264
|
+
body = mock_post.call_args.args[2]
|
|
265
|
+
assert "Coordinator: Assignment Complete" in body
|
|
266
|
+
assert "### Summary" not in body
|
|
267
|
+
assert "some unrelated final message" not in body
|
|
268
|
+
|
|
209
269
|
|
|
210
270
|
# ── #448: advisory (0-commit clean exit) notify ─────────────────────────────
|
|
211
271
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|