code-coordinator 0.5.115__tar.gz → 0.5.116__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.115 → code_coordinator-0.5.116}/PKG-INFO +1 -1
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/code_coordinator.egg-info/SOURCES.txt +1 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/code_coordinator.egg-info/scm_file_list.json +1 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/commands/dispatch.py +62 -7
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/reconcile.py +240 -35
- code_coordinator-0.5.116/tests/test_reconcile.py +638 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/.github/workflows/release-tui.yml +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/.gitignore +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/CLAUDE.md +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/GOAL.md +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/LICENSE +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/MANIFEST.in +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/README.md +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/__init__.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/agent.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/audit.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/block_log.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/board_bool_guard.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/board_service.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/brain.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/claim.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/cli.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/client.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/comments.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/config.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dao.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/.gitignore +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/components.json +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/dist/assets/Gallery-BoKs3mpY.js +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/dist/assets/Terminal-CEsP08iX.js +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/dist/assets/index-CDHPlB6k.js +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/dist/index.html +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/dist/sw.js +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/eslint.config.js +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/index.html +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/package-lock.json +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/package.json +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/playwright.config.ts +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/postcss.config.js +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/App.tsx +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/api/client.ts +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/api/generated.ts +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/index.css +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/main.tsx +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/test-setup.ts +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/tailwind.config.js +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/tsconfig.json +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/tsconfig.node.json +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dashboard/webapp/vite.config.ts +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/db.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/deps.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/drive.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/events.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/filelock.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/freshness.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/gates.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/goal.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/health/context.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/health/models.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/health/render.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/health/units.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/hooks.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/interactive.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/models.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/network.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/notify.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/openapi.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/parentage.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/plans.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/progress.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/release_window.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/reports.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/review.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/smoke.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/split_work.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/state.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/test_author.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/test_report.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/usage.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/install-agent.sh +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/pyproject.toml +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/setup.cfg +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/__init__.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/acceptance/ms-33/audit_1039.rs +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/acceptance/ms-33/contract.md +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/acceptance/ms-33/manifest.yml +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/acceptance/ms-38/contract.md +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/acceptance/ms-38/manifest.yml +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/conftest.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_config.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_db.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_events.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_init.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_models.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_network.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_no_direct_gh_calls.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_review.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_session.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_split.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_state.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/Cargo.lock +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/Cargo.toml +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/cargo-config-local-quadraui.toml.example +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/src/app/audit.rs +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/src/app/chat.rs +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/src/app/data.rs +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/src/app/dialogs.rs +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/src/app/drive.rs +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/src/app/drive_queue.rs +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/src/app/escalation.rs +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/src/app/events.rs +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/src/app/fixtures.rs +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/src/app/fleet_health.rs +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/src/app/fleet_sessions.rs +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/src/app/fleet_terminals.rs +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/src/app/format.rs +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/src/app/milestone_dag.rs +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/src/app/mod.rs +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/src/app/msv.rs +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/src/app/pipeline.rs +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/src/app/plans.rs +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/src/app/render.rs +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/src/app/reports.rs +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/src/app/sessions.rs +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/src/app/settings_ui.rs +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/src/app/sidebar.rs +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/src/app/terminal.rs +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/src/app/tests.rs +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/src/app/types.rs +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/src/app/workspace.rs +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/src/bin/gtk.rs +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/src/commands.rs +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/src/lib.rs +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/src/main.rs +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/src/settings.rs +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/tests/acceptance.rs +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/tests/cli.rs +0 -0
- {code_coordinator-0.5.115 → code_coordinator-0.5.116}/tui/tests/fixtures/board_sample.json +0 -0
|
@@ -673,6 +673,7 @@ tests/test_quiet_hours.py
|
|
|
673
673
|
tests/test_quiet_hours_store_2146.py
|
|
674
674
|
tests/test_reap_merged_sessions.py
|
|
675
675
|
tests/test_reap_stale_interactive_tick.py
|
|
676
|
+
tests/test_reconcile.py
|
|
676
677
|
tests/test_reconcile_branch.py
|
|
677
678
|
tests/test_reconcile_completions.py
|
|
678
679
|
tests/test_reconcile_merges.py
|
{code_coordinator-0.5.115 → code_coordinator-0.5.116}/code_coordinator.egg-info/scm_file_list.json
RENAMED
|
@@ -704,6 +704,7 @@
|
|
|
704
704
|
"tests/test_quiet_hours_store_2146.py",
|
|
705
705
|
"tests/test_reap_merged_sessions.py",
|
|
706
706
|
"tests/test_reap_stale_interactive_tick.py",
|
|
707
|
+
"tests/test_reconcile.py",
|
|
707
708
|
"tests/test_reconcile_branch.py",
|
|
708
709
|
"tests/test_reconcile_completions.py",
|
|
709
710
|
"tests/test_reconcile_merges.py",
|
|
@@ -1797,9 +1797,12 @@ def retry(assignment_id: str, config_path: Path, acknowledge_cost: bool = False)
|
|
|
1797
1797
|
from coord.board_service import read_board, write_board
|
|
1798
1798
|
from coord.models import WORK_LIKE_TYPES
|
|
1799
1799
|
from coord.reconcile import (
|
|
1800
|
+
RetryProviderMismatch,
|
|
1800
1801
|
UnsupportedRetryType,
|
|
1801
1802
|
_reassign,
|
|
1803
|
+
_resolve_retry_provider,
|
|
1802
1804
|
describe_no_candidate_machines,
|
|
1805
|
+
describe_retry_provider_mismatch,
|
|
1803
1806
|
describe_unsupported_retry_type,
|
|
1804
1807
|
)
|
|
1805
1808
|
|
|
@@ -1920,14 +1923,59 @@ def retry(assignment_id: str, config_path: Path, acknowledge_cost: bool = False)
|
|
|
1920
1923
|
click.echo(f"error: {describe_unsupported_retry_type(exc)}", err=True)
|
|
1921
1924
|
sys.exit(1)
|
|
1922
1925
|
|
|
1923
|
-
#
|
|
1926
|
+
# #2323: resolve (and #437 TOS-guard) the provider this retry would
|
|
1927
|
+
# dispatch through BEFORE deciding anything about the model — printed
|
|
1928
|
+
# up front so it's never left for the drive's own header to contradict
|
|
1929
|
+
# four seconds later, and checked before the escalation message so a
|
|
1930
|
+
# refusal is never preceded by a reassuring "escalating model" line for
|
|
1931
|
+
# a retry that's about to be refused. `providers.labels` is consulted
|
|
1932
|
+
# the same way a first work dispatch consults it (gated to
|
|
1933
|
+
# `type="work"`, coord/dispatch.py:548); a genuine `harness:opencode`
|
|
1934
|
+
# label match here means retry lands back on `opencode`, not the
|
|
1935
|
+
# claude default that a label-blind resolution used to fall through to.
|
|
1936
|
+
from coord.state import get_cached_issue_labels # noqa: PLC0415
|
|
1937
|
+
|
|
1938
|
+
issue_labels = get_cached_issue_labels(
|
|
1939
|
+
assignment.repo_name, assignment.issue_number,
|
|
1940
|
+
)
|
|
1941
|
+
try:
|
|
1942
|
+
resolved_provider_name = _resolve_retry_provider(assignment, cfg, issue_labels)
|
|
1943
|
+
except RetryProviderMismatch as exc:
|
|
1944
|
+
click.echo(f"error: {describe_retry_provider_mismatch(exc)}", err=True)
|
|
1945
|
+
sys.exit(1)
|
|
1946
|
+
except ValueError as exc:
|
|
1947
|
+
click.echo(f"error: {exc}", err=True)
|
|
1948
|
+
sys.exit(1)
|
|
1949
|
+
click.echo(f" provider: {resolved_provider_name}")
|
|
1950
|
+
|
|
1951
|
+
# Determine escalated model for the retry. #2323: `cfg.models.
|
|
1952
|
+
# next_model` walks the claude tier ladder — only meaningful when this
|
|
1953
|
+
# retry actually resolves to a claude-family provider. The precheck
|
|
1954
|
+
# above already guarantees `resolved_provider_name` matches the failed
|
|
1955
|
+
# run's own provider (else it would have refused), so gating on the
|
|
1956
|
+
# resolved provider's TYPE here is equivalent to gating on the failed
|
|
1957
|
+
# run's, without a second lookup.
|
|
1958
|
+
from coord.config import IMPLICIT_PROVIDER_TYPES # noqa: PLC0415
|
|
1959
|
+
from coord.providers import provider_type_for # noqa: PLC0415
|
|
1960
|
+
|
|
1924
1961
|
original_model = assignment.model or cfg.models.default
|
|
1925
|
-
|
|
1926
|
-
|
|
1927
|
-
|
|
1962
|
+
if provider_type_for(resolved_provider_name, cfg.providers) in IMPLICIT_PROVIDER_TYPES:
|
|
1963
|
+
escalated = cfg.models.next_model(original_model)
|
|
1964
|
+
if escalated != original_model:
|
|
1965
|
+
click.echo(f" escalating model: {original_model} → {escalated}")
|
|
1966
|
+
retry_model = escalated
|
|
1967
|
+
else:
|
|
1968
|
+
# Not a claude-family provider — the escalation ladder doesn't
|
|
1969
|
+
# apply; reuse the failed run's own model field exactly (`None`
|
|
1970
|
+
# tells `_reassign` to reuse `assignment.model` verbatim, rather
|
|
1971
|
+
# than stamping `original_model`'s `cfg.models.default` fallback
|
|
1972
|
+
# onto a provider that fallback means nothing to).
|
|
1973
|
+
retry_model = None
|
|
1928
1974
|
|
|
1929
1975
|
try:
|
|
1930
|
-
result = _reassign(
|
|
1976
|
+
result = _reassign(
|
|
1977
|
+
assignment, board, cfg, model=retry_model, issue_labels=issue_labels,
|
|
1978
|
+
)
|
|
1931
1979
|
except UnsupportedRetryType as exc:
|
|
1932
1980
|
# Defense in depth — the precheck above already covers this, but
|
|
1933
1981
|
# `_reassign` is shared with `auto_reassign` and must never silently
|
|
@@ -1935,12 +1983,19 @@ def retry(assignment_id: str, config_path: Path, acknowledge_cost: bool = False)
|
|
|
1935
1983
|
# precheck.
|
|
1936
1984
|
click.echo(f"error: {describe_unsupported_retry_type(exc)}", err=True)
|
|
1937
1985
|
sys.exit(1)
|
|
1986
|
+
except RetryProviderMismatch as exc:
|
|
1987
|
+
# Defense in depth — the precheck above already covers this, but
|
|
1988
|
+
# `_reassign` is shared with `auto_reassign` and must never
|
|
1989
|
+
# silently substitute the provider even if a future caller skips
|
|
1990
|
+
# the precheck.
|
|
1991
|
+
click.echo(f"error: {describe_retry_provider_mismatch(exc)}", err=True)
|
|
1992
|
+
sys.exit(1)
|
|
1938
1993
|
if result is None:
|
|
1939
1994
|
# #1396: name the blocking machines and their apparent load instead
|
|
1940
1995
|
# of a bare "no available machine" — the usual cause is a phantom
|
|
1941
1996
|
# `running` row from a dead interactive session nothing reaped.
|
|
1942
1997
|
click.echo(
|
|
1943
|
-
f"error: {describe_no_candidate_machines(assignment, board, cfg)}",
|
|
1998
|
+
f"error: {describe_no_candidate_machines(assignment, board, cfg, issue_labels)}",
|
|
1944
1999
|
err=True,
|
|
1945
2000
|
)
|
|
1946
2001
|
sys.exit(1)
|
|
@@ -1960,7 +2015,7 @@ def retry(assignment_id: str, config_path: Path, acknowledge_cost: bool = False)
|
|
|
1960
2015
|
click.echo(
|
|
1961
2016
|
f"Retried: {result.machine_name} → {result.repo_name} "
|
|
1962
2017
|
f"#{result.issue_number} (assignment {result.assignment_id}, "
|
|
1963
|
-
f"type={result.type})"
|
|
2018
|
+
f"type={result.type}, provider={resolved_provider_name})"
|
|
1964
2019
|
)
|
|
1965
2020
|
# #1101: surface the continued branch so it's obvious the retry picked
|
|
1966
2021
|
# up existing work instead of forking a fresh branch off the default.
|
|
@@ -1028,21 +1028,140 @@ def describe_unsupported_retry_type(exc: UnsupportedRetryType) -> str:
|
|
|
1028
1028
|
)
|
|
1029
1029
|
|
|
1030
1030
|
|
|
1031
|
+
class RetryProviderMismatch(ValueError):
|
|
1032
|
+
"""Raised by :func:`_reassign` when a retry would resolve to a
|
|
1033
|
+
different provider than the failed run it is replacing (#2323).
|
|
1034
|
+
|
|
1035
|
+
A retry that consults ``providers.labels`` can legitimately land on a
|
|
1036
|
+
different provider than *this exact assignment row* if the issue's
|
|
1037
|
+
labels or ``coordinator.yml`` changed between the original dispatch and
|
|
1038
|
+
the retry — but silently substituting the provider is exactly the #1796
|
|
1039
|
+
failure mode one level up: an operator (or an unattended `coord drive`)
|
|
1040
|
+
asking to retry a `harness:opencode` leg is not asking to move it to
|
|
1041
|
+
`claude`, even if that is where today's precedence chain would land.
|
|
1042
|
+
Refuse instead, the same way the #437 TOS gate refuses rather than
|
|
1043
|
+
substitutes a human-attended provider.
|
|
1044
|
+
"""
|
|
1045
|
+
|
|
1046
|
+
def __init__(self, failed_provider: str, resolved_provider: str):
|
|
1047
|
+
self.failed_provider = failed_provider
|
|
1048
|
+
self.resolved_provider = resolved_provider
|
|
1049
|
+
super().__init__(
|
|
1050
|
+
f"retry would move this assignment from provider "
|
|
1051
|
+
f"{failed_provider!r} to {resolved_provider!r}"
|
|
1052
|
+
)
|
|
1053
|
+
|
|
1054
|
+
|
|
1055
|
+
def describe_retry_provider_mismatch(exc: RetryProviderMismatch) -> str:
|
|
1056
|
+
"""Human-readable refusal message for :class:`RetryProviderMismatch`
|
|
1057
|
+
(#2323).
|
|
1058
|
+
|
|
1059
|
+
Mirrors :func:`describe_unsupported_retry_type`'s shape — names both
|
|
1060
|
+
providers and points at the deliberate override an operator who
|
|
1061
|
+
actually wants the move can use.
|
|
1062
|
+
"""
|
|
1063
|
+
return (
|
|
1064
|
+
f"refusing retry: the failed run dispatched through provider "
|
|
1065
|
+
f"{exc.failed_provider!r}, but this retry resolves to "
|
|
1066
|
+
f"{exc.resolved_provider!r} — retrying would silently move the "
|
|
1067
|
+
"work onto a different provider (and, for a claude provider, walk "
|
|
1068
|
+
"a model-escalation ladder that has no meaning for the other one). "
|
|
1069
|
+
"If the issue's labels or `providers.labels` changed since the "
|
|
1070
|
+
"original dispatch and the move is intentional, dispatch by hand "
|
|
1071
|
+
"instead: `coord assign --interactive`."
|
|
1072
|
+
)
|
|
1073
|
+
|
|
1074
|
+
|
|
1075
|
+
def _resolve_retry_provider(
|
|
1076
|
+
failed: Assignment, config: Config, issue_labels: list[str] | None,
|
|
1077
|
+
) -> str:
|
|
1078
|
+
"""Resolve (and #437 TOS-guard) the provider a retry of *failed* would
|
|
1079
|
+
dispatch through, refusing if it differs from the provider the failed
|
|
1080
|
+
run itself used (#2323).
|
|
1081
|
+
|
|
1082
|
+
Mirrors a first work dispatch's resolution precedence exactly
|
|
1083
|
+
(``coord.dispatch.dispatch``, ``coord/dispatch.py:548``): spec (always
|
|
1084
|
+
``None`` here — a retry never carries a fresh per-spec override) ->
|
|
1085
|
+
``providers.labels`` (gated to ``failed.type == "work"``, the same
|
|
1086
|
+
restriction the first dispatch applies) -> repo default ->
|
|
1087
|
+
``providers.default``.
|
|
1088
|
+
|
|
1089
|
+
Args:
|
|
1090
|
+
failed: The failed/advisory assignment being retried.
|
|
1091
|
+
config: The coordinator config.
|
|
1092
|
+
issue_labels: The target issue's current GitHub label names, or
|
|
1093
|
+
``None``/empty when unavailable — falls back to no label match,
|
|
1094
|
+
reproducing pre-#2323 (label-blind) resolution for that one
|
|
1095
|
+
issue rather than raising.
|
|
1096
|
+
|
|
1097
|
+
Returns:
|
|
1098
|
+
The resolved (and TOS-cleared) provider name.
|
|
1099
|
+
|
|
1100
|
+
Raises:
|
|
1101
|
+
ValueError: the #437 TOS gate refuses (the resolved provider is
|
|
1102
|
+
``human_attended_only``) — same contract
|
|
1103
|
+
:func:`coord.providers.guard_unattended_dispatch` uses.
|
|
1104
|
+
RetryProviderMismatch: the resolved provider differs from
|
|
1105
|
+
``failed.provider_name`` (falling back to ``"claude"`` for a
|
|
1106
|
+
row dispatched before #324 started recording it).
|
|
1107
|
+
"""
|
|
1108
|
+
from coord.providers import guard_unattended_dispatch # noqa: PLC0415
|
|
1109
|
+
|
|
1110
|
+
repo_for_provider = config.repo(failed.repo_name)
|
|
1111
|
+
# #1889/#2323: providers.labels routes work dispatches by the issue's
|
|
1112
|
+
# harness-eval label — gated to type="work" exactly as the first
|
|
1113
|
+
# dispatch gates it (coord/dispatch.py:548) so a label meant for the
|
|
1114
|
+
# eventual work dispatch never leaks into mock-author/test-author
|
|
1115
|
+
# retries that never saw it on their original dispatch either.
|
|
1116
|
+
provider_issue_labels = issue_labels if failed.type == "work" else None
|
|
1117
|
+
resolved = guard_unattended_dispatch(
|
|
1118
|
+
spec_provider=None,
|
|
1119
|
+
repo_provider=(
|
|
1120
|
+
repo_for_provider.provider if repo_for_provider is not None else None
|
|
1121
|
+
),
|
|
1122
|
+
providers_cfg=config.providers,
|
|
1123
|
+
models_cfg=config.models,
|
|
1124
|
+
where="auto-reassign (reconcile)",
|
|
1125
|
+
issue_labels=provider_issue_labels,
|
|
1126
|
+
)
|
|
1127
|
+
# #324: None means "dispatched before #324 landed or via a path that
|
|
1128
|
+
# doesn't set this field" — the documented implicit default is "claude".
|
|
1129
|
+
failed_provider = failed.provider_name or "claude"
|
|
1130
|
+
if resolved != failed_provider:
|
|
1131
|
+
raise RetryProviderMismatch(failed_provider, resolved)
|
|
1132
|
+
return resolved
|
|
1133
|
+
|
|
1134
|
+
|
|
1031
1135
|
def _reassign(
|
|
1032
1136
|
failed: Assignment, board: Board, config: Config,
|
|
1033
1137
|
*,
|
|
1034
1138
|
model: str | None = None,
|
|
1139
|
+
issue_labels: list[str] | None = None,
|
|
1035
1140
|
) -> Assignment | None:
|
|
1036
1141
|
"""Re-dispatch a failed assignment to a machine with spare capacity.
|
|
1037
1142
|
|
|
1038
1143
|
*model* overrides the model tier on the retry. When None, the
|
|
1039
1144
|
original assignment's model is reused (escalation happens at the call
|
|
1040
|
-
site
|
|
1145
|
+
site — and must only be requested when the retry resolves to the same
|
|
1146
|
+
claude-family provider the failed run used, #2323: the claude
|
|
1147
|
+
escalation ladder means nothing to another provider).
|
|
1148
|
+
|
|
1149
|
+
*issue_labels* (#2323) is the target issue's current GitHub label
|
|
1150
|
+
names, threaded into provider resolution via
|
|
1151
|
+
:func:`_resolve_retry_provider` so ``providers.labels`` is honoured on
|
|
1152
|
+
a retry the same way it is on a first dispatch — without this, every
|
|
1153
|
+
retry fell through to the repo/global default regardless of which
|
|
1154
|
+
label originally routed the issue.
|
|
1041
1155
|
|
|
1042
1156
|
Raises :class:`UnsupportedRetryType` when ``failed.type`` is not in
|
|
1043
1157
|
:data:`coord.models.WORK_LIKE_TYPES` — a ``smoke``/``review``/other
|
|
1044
1158
|
non-work row must not be silently re-dispatched as a fresh
|
|
1045
1159
|
``type="work"`` worker (#1636).
|
|
1160
|
+
|
|
1161
|
+
Raises :class:`RetryProviderMismatch` (#2323) when the resolved
|
|
1162
|
+
provider differs from the one the failed run actually used — refuses
|
|
1163
|
+
rather than silently moving the work onto a different provider, the
|
|
1164
|
+
#1796 rule applied at dispatch.
|
|
1046
1165
|
"""
|
|
1047
1166
|
if failed.type not in WORK_LIKE_TYPES:
|
|
1048
1167
|
raise UnsupportedRetryType(failed.type, failed.review_of_assignment_id)
|
|
@@ -1061,22 +1180,59 @@ def _reassign(
|
|
|
1061
1180
|
def has_room(m: Machine) -> bool:
|
|
1062
1181
|
return len(running.get(m.name, [])) < _machine_capacity(m, config)
|
|
1063
1182
|
|
|
1183
|
+
# #437: STRUCTURAL TOS-COMPLIANCE GATE — auto-reassign is an
|
|
1184
|
+
# unattended dispatch path; refuse to retry through a provider that
|
|
1185
|
+
# opts out of unattended use. #2323: also resolves through
|
|
1186
|
+
# `providers.labels` (gated to type="work", exactly as a first
|
|
1187
|
+
# dispatch gates it) instead of skipping straight to the repo/global
|
|
1188
|
+
# default, and refuses outright — RetryProviderMismatch, NOT a silent
|
|
1189
|
+
# `return None` — when the resolution disagrees with the provider the
|
|
1190
|
+
# failed run actually used. A plain TOS ValueError still resolves to
|
|
1191
|
+
# `return None`: skip the reassignment, leaving the failed assignment
|
|
1192
|
+
# for human attention rather than getting silently re-tried on the
|
|
1193
|
+
# wrong provider. Resolved BEFORE machine selection so the #1711
|
|
1194
|
+
# capability filter below can key off it.
|
|
1195
|
+
try:
|
|
1196
|
+
resolved_provider_name = _resolve_retry_provider(failed, config, issue_labels)
|
|
1197
|
+
except RetryProviderMismatch:
|
|
1198
|
+
raise
|
|
1199
|
+
except ValueError:
|
|
1200
|
+
return None
|
|
1201
|
+
|
|
1202
|
+
# #1711: STRUCTURAL PROVIDER-AVAILABILITY GATE, applied as a candidate
|
|
1203
|
+
# filter — a retry must never route to a machine that hasn't declared
|
|
1204
|
+
# it can run the resolved provider (e.g. an `opencode` retry landing on
|
|
1205
|
+
# a machine with no `provider:opencode` capability), exactly as a first
|
|
1206
|
+
# dispatch refuses that combination (`coord.dispatch.dispatch` →
|
|
1207
|
+
# `guard_provider_machine_capability`). Filtering (rather than raising
|
|
1208
|
+
# on `candidates[0]`) means a fleet where SOME machine declares the
|
|
1209
|
+
# capability still retries there; a fleet where none does falls through
|
|
1210
|
+
# to the "no candidates" `return None`, leaving the row for human
|
|
1211
|
+
# attention — `describe_no_candidate_machines` names the reason.
|
|
1212
|
+
from coord.providers import machine_supports_provider # noqa: PLC0415
|
|
1213
|
+
|
|
1214
|
+
def can_run_provider(m: Machine) -> bool:
|
|
1215
|
+
return machine_supports_provider(m, resolved_provider_name, config.providers)
|
|
1216
|
+
|
|
1064
1217
|
candidates = [
|
|
1065
1218
|
m for m in config.machines
|
|
1066
1219
|
if m.can_work_on(failed.repo_name)
|
|
1067
1220
|
and m.repo_path(failed.repo_name) is not None
|
|
1068
1221
|
and has_room(m)
|
|
1222
|
+
and can_run_provider(m)
|
|
1069
1223
|
and m.name != failed.machine_name
|
|
1070
1224
|
and m.name not in paused
|
|
1071
1225
|
]
|
|
1072
1226
|
if not candidates:
|
|
1073
1227
|
# Fall back to including the same machine that failed last time —
|
|
1074
|
-
# paused machines
|
|
1228
|
+
# paused machines (and #1711 capability-lacking machines) stay
|
|
1229
|
+
# excluded even from the fallback.
|
|
1075
1230
|
candidates = [
|
|
1076
1231
|
m for m in config.machines
|
|
1077
1232
|
if m.can_work_on(failed.repo_name)
|
|
1078
1233
|
and m.repo_path(failed.repo_name) is not None
|
|
1079
1234
|
and has_room(m)
|
|
1235
|
+
and can_run_provider(m)
|
|
1080
1236
|
and m.name not in paused
|
|
1081
1237
|
]
|
|
1082
1238
|
if not candidates:
|
|
@@ -1085,31 +1241,6 @@ def _reassign(
|
|
|
1085
1241
|
machine = candidates[0]
|
|
1086
1242
|
repo_path = machine.repo_path(failed.repo_name)
|
|
1087
1243
|
|
|
1088
|
-
# #437: STRUCTURAL TOS-COMPLIANCE GATE — auto-reassign is an
|
|
1089
|
-
# unattended dispatch path; refuse to retry through a provider that
|
|
1090
|
-
# opts out of unattended use. Resolve precedence with per-repo
|
|
1091
|
-
# override and the global default (the failed assignment doesn't
|
|
1092
|
-
# carry a spec-level provider into this path). On refusal: skip the
|
|
1093
|
-
# reassignment — the failed assignment stays failed for human
|
|
1094
|
-
# attention rather than getting silently re-tried on the wrong
|
|
1095
|
-
# provider.
|
|
1096
|
-
from coord.providers import guard_unattended_dispatch # noqa: PLC0415
|
|
1097
|
-
repo_for_provider = config.repo(failed.repo_name)
|
|
1098
|
-
try:
|
|
1099
|
-
guard_unattended_dispatch(
|
|
1100
|
-
spec_provider=None,
|
|
1101
|
-
repo_provider=(
|
|
1102
|
-
repo_for_provider.provider
|
|
1103
|
-
if repo_for_provider is not None
|
|
1104
|
-
else None
|
|
1105
|
-
),
|
|
1106
|
-
providers_cfg=config.providers,
|
|
1107
|
-
models_cfg=config.models,
|
|
1108
|
-
where="auto-reassign (reconcile)",
|
|
1109
|
-
)
|
|
1110
|
-
except ValueError:
|
|
1111
|
-
return None
|
|
1112
|
-
|
|
1113
1244
|
retry_model = model if model is not None else failed.model
|
|
1114
1245
|
# The Assignment keeps the alias for legibility; the wire payload is
|
|
1115
1246
|
# resolved through models.versions when an exact id is pinned.
|
|
@@ -1156,6 +1287,18 @@ def _reassign(
|
|
|
1156
1287
|
# worker's integration base (the start point / rebase target).
|
|
1157
1288
|
"branch": retry_default_branch,
|
|
1158
1289
|
}
|
|
1290
|
+
# #2323: name the resolved provider on the wire the same way a first
|
|
1291
|
+
# dispatch does (`coord.dispatch._wire_payload_needs_provider_field`) —
|
|
1292
|
+
# omitted only for the vanilla, uncustomized "claude" definition so
|
|
1293
|
+
# byte-identical payloads survive for every deployment that never
|
|
1294
|
+
# touches `providers:`. Without this, `resolved_provider_name` above
|
|
1295
|
+
# was resolved (and TOS-guarded, and matched against the failed run)
|
|
1296
|
+
# purely for bookkeeping, and the wire payload silently fell back to
|
|
1297
|
+
# the agent's hardcoded legacy claude spawn path regardless — the exact
|
|
1298
|
+
# bug #2323 reported.
|
|
1299
|
+
from coord.dispatch import _wire_payload_needs_provider_field # noqa: PLC0415
|
|
1300
|
+
if _wire_payload_needs_provider_field(resolved_provider_name, config):
|
|
1301
|
+
payload["provider"] = resolved_provider_name
|
|
1159
1302
|
# #1101: continue the failed assignment's actual branch instead of
|
|
1160
1303
|
# silently forking a fresh one off the repo default — any real work it
|
|
1161
1304
|
# already committed and pushed must not be orphaned by a retry. Mirrors
|
|
@@ -1187,6 +1330,12 @@ def _reassign(
|
|
|
1187
1330
|
dispatched_at=time.time(),
|
|
1188
1331
|
type=failed.type,
|
|
1189
1332
|
model=retry_model,
|
|
1333
|
+
# #2323: record the resolved provider the same way a first dispatch
|
|
1334
|
+
# does (`response.get("_provider_name")` in coord/commands/
|
|
1335
|
+
# dispatch.py) — so the board/TUI and the next retry's own
|
|
1336
|
+
# `_resolve_retry_provider` mismatch check see the provider this
|
|
1337
|
+
# retry actually ran under, not the one the failed row ran under.
|
|
1338
|
+
provider_name=resolved_provider_name,
|
|
1190
1339
|
# #1101: record the continued branch on the board immediately
|
|
1191
1340
|
# instead of waiting for a later reconcile backfill from agent
|
|
1192
1341
|
# /status — the retry payload above already told the agent to
|
|
@@ -1222,6 +1371,7 @@ def _reassign(
|
|
|
1222
1371
|
|
|
1223
1372
|
def describe_no_candidate_machines(
|
|
1224
1373
|
failed: Assignment, board: Board, config: Config,
|
|
1374
|
+
issue_labels: list[str] | None = None,
|
|
1225
1375
|
) -> str:
|
|
1226
1376
|
"""Explain why :func:`_reassign` found no candidate machine (#1396).
|
|
1227
1377
|
|
|
@@ -1235,15 +1385,39 @@ def describe_no_candidate_machines(
|
|
|
1235
1385
|
reaped, still counted against the machine's capacity.
|
|
1236
1386
|
|
|
1237
1387
|
Mirrors ``_reassign``'s exact candidate filter (repo capability, repo
|
|
1238
|
-
path, pause set, capacity check,
|
|
1239
|
-
the old binary "any running
|
|
1240
|
-
capacity count against
|
|
1241
|
-
max_workers``) but keeps a
|
|
1242
|
-
discarding it, so the message
|
|
1243
|
-
they're apparently running —
|
|
1244
|
-
400-hour-old phantom obvious at a
|
|
1388
|
+
path, pause set, capacity check, #1711 provider-capability check,
|
|
1389
|
+
same-machine exclusion — #1417 replaced the old binary "any running
|
|
1390
|
+
assignment = busy" rule with a per-machine capacity count against
|
|
1391
|
+
``machines[].max_workers``/``concurrency.max_workers``) but keeps a
|
|
1392
|
+
reason per excluded machine instead of discarding it, so the message
|
|
1393
|
+
names the blocking machines and what they're apparently running —
|
|
1394
|
+
including the age, which makes a 400-hour-old phantom obvious at a
|
|
1395
|
+
glance.
|
|
1396
|
+
|
|
1397
|
+
*issue_labels* (#2323) threads the same label list the caller handed
|
|
1398
|
+
``_reassign``, so the provider this diagnostic resolves (for the #1711
|
|
1399
|
+
capability lines) matches the one the retry actually resolved.
|
|
1245
1400
|
"""
|
|
1246
1401
|
from coord.machine_pause import paused_set # noqa: PLC0415
|
|
1402
|
+
from coord.providers import ( # noqa: PLC0415
|
|
1403
|
+
machine_supports_provider,
|
|
1404
|
+
resolve_provider_name,
|
|
1405
|
+
)
|
|
1406
|
+
|
|
1407
|
+
# #1711: resolve the provider the retry would use, so machines that
|
|
1408
|
+
# can't run it are named as such instead of reading as "free". A
|
|
1409
|
+
# resolution failure (unknown provider name in config) degrades to
|
|
1410
|
+
# skipping the capability lines — this is a diagnostic, not a gate.
|
|
1411
|
+
repo_for_capability = config.repo(failed.repo_name)
|
|
1412
|
+
try:
|
|
1413
|
+
provider_for_capability: str | None = resolve_provider_name(
|
|
1414
|
+
None,
|
|
1415
|
+
repo_for_capability.provider if repo_for_capability is not None else None,
|
|
1416
|
+
config.providers,
|
|
1417
|
+
issue_labels=issue_labels if failed.type == "work" else None,
|
|
1418
|
+
)
|
|
1419
|
+
except ValueError:
|
|
1420
|
+
provider_for_capability = None
|
|
1247
1421
|
|
|
1248
1422
|
paused = paused_set(config.machines)
|
|
1249
1423
|
now = time.time()
|
|
@@ -1271,6 +1445,18 @@ def describe_no_candidate_machines(
|
|
|
1271
1445
|
if m.name in paused:
|
|
1272
1446
|
lines.append(f" {m.name}: paused")
|
|
1273
1447
|
continue
|
|
1448
|
+
if provider_for_capability is not None and not machine_supports_provider(
|
|
1449
|
+
m, provider_for_capability, config.providers,
|
|
1450
|
+
):
|
|
1451
|
+
# #1711: mirrors `_reassign`'s capability filter — this machine
|
|
1452
|
+
# never declared it can run the resolved provider, so it was
|
|
1453
|
+
# excluded regardless of load.
|
|
1454
|
+
lines.append(
|
|
1455
|
+
f" {m.name}: cannot run provider {provider_for_capability!r} "
|
|
1456
|
+
"(no matching capability in coordinator.yml "
|
|
1457
|
+
"machines[].capabilities)"
|
|
1458
|
+
)
|
|
1459
|
+
continue
|
|
1274
1460
|
running = running_by_machine.get(m.name, [])
|
|
1275
1461
|
cap = _machine_capacity(m, config)
|
|
1276
1462
|
own_full = len(running) >= cap
|
|
@@ -1787,7 +1973,26 @@ def reconcile(board: Board, config: Config) -> list[str]:
|
|
|
1787
1973
|
getattr(failed_a, "failure_reason", None)
|
|
1788
1974
|
):
|
|
1789
1975
|
continue
|
|
1790
|
-
|
|
1976
|
+
# #2323: thread the issue's cached labels through so
|
|
1977
|
+
# auto-reassign resolves `providers.labels` the same way a
|
|
1978
|
+
# first dispatch (and `coord retry`) does — best-effort local
|
|
1979
|
+
# cache read (never a GitHub call from this passive tick); an
|
|
1980
|
+
# uncached issue falls back to label-blind resolution, same as
|
|
1981
|
+
# passing `None`.
|
|
1982
|
+
from coord.state import get_cached_issue_labels # noqa: PLC0415
|
|
1983
|
+
|
|
1984
|
+
cached_labels = get_cached_issue_labels(
|
|
1985
|
+
failed_a.repo_name, failed_a.issue_number,
|
|
1986
|
+
)
|
|
1987
|
+
try:
|
|
1988
|
+
reassigned = _reassign(
|
|
1989
|
+
failed_a, board, config, issue_labels=cached_labels,
|
|
1990
|
+
)
|
|
1991
|
+
except RetryProviderMismatch:
|
|
1992
|
+
# Refuse rather than substitute (#2323) — leave the failed
|
|
1993
|
+
# assignment for human attention (`coord retry`) instead of
|
|
1994
|
+
# silently auto-moving it to a different provider.
|
|
1995
|
+
continue
|
|
1791
1996
|
if reassigned is not None and reassigned.assignment_id is not None:
|
|
1792
1997
|
changed.append(reassigned.assignment_id)
|
|
1793
1998
|
|