code-coordinator 0.5.116__tar.gz → 0.5.118__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.116 → code_coordinator-0.5.118}/PKG-INFO +1 -1
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/agent.py +161 -3
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/agents/opencode/agents/work.md +34 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/commands/agent_ops.py +6 -3
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_agent.py +274 -7
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_providers.py +188 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/.github/workflows/release-tui.yml +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/.gitignore +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/CLAUDE.md +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/GOAL.md +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/LICENSE +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/MANIFEST.in +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/README.md +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/__init__.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/audit.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/block_log.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/board_bool_guard.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/board_service.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/brain.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/claim.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/cli.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/client.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/comments.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/config.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dao.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/.gitignore +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/components.json +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/dist/assets/Gallery-BoKs3mpY.js +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/dist/assets/Terminal-CEsP08iX.js +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/dist/assets/index-CDHPlB6k.js +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/dist/index.html +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/dist/sw.js +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/eslint.config.js +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/index.html +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/package-lock.json +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/package.json +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/playwright.config.ts +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/postcss.config.js +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/App.tsx +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/api/client.ts +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/api/generated.ts +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/index.css +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/main.tsx +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/test-setup.ts +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/tailwind.config.js +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/tsconfig.json +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/tsconfig.node.json +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dashboard/webapp/vite.config.ts +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/db.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/deps.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/drive.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/events.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/filelock.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/freshness.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/gates.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/goal.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/health/context.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/health/models.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/health/render.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/health/units.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/hooks.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/interactive.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/models.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/network.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/notify.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/openapi.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/parentage.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/plans.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/progress.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/release_window.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/reports.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/review.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/smoke.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/split_work.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/state.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/test_author.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/test_report.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/usage.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/install-agent.sh +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/pyproject.toml +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/setup.cfg +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/__init__.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/acceptance/ms-33/audit_1039.rs +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/acceptance/ms-33/contract.md +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/acceptance/ms-33/manifest.yml +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/acceptance/ms-38/contract.md +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/acceptance/ms-38/manifest.yml +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/conftest.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_config.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_db.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_events.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_init.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_models.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_network.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_no_direct_gh_calls.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_review.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_session.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_split.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_state.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/Cargo.lock +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/Cargo.toml +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/cargo-config-local-quadraui.toml.example +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/src/app/audit.rs +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/src/app/chat.rs +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/src/app/data.rs +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/src/app/dialogs.rs +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/src/app/drive.rs +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/src/app/drive_queue.rs +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/src/app/escalation.rs +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/src/app/events.rs +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/src/app/fixtures.rs +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/src/app/fleet_health.rs +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/src/app/fleet_sessions.rs +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/src/app/fleet_terminals.rs +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/src/app/format.rs +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/src/app/milestone_dag.rs +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/src/app/mod.rs +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/src/app/msv.rs +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/src/app/pipeline.rs +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/src/app/plans.rs +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/src/app/render.rs +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/src/app/reports.rs +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/src/app/sessions.rs +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/src/app/settings_ui.rs +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/src/app/sidebar.rs +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/src/app/terminal.rs +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/src/app/tests.rs +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/src/app/types.rs +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/src/app/workspace.rs +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/src/bin/gtk.rs +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/src/commands.rs +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/src/lib.rs +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/src/main.rs +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/src/settings.rs +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/tests/acceptance.rs +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/tests/cli.rs +0 -0
- {code_coordinator-0.5.116 → code_coordinator-0.5.118}/tui/tests/fixtures/board_sample.json +0 -0
|
@@ -4416,9 +4416,26 @@ class AgentServer:
|
|
|
4416
4416
|
#: capability that disappears simply stops
|
|
4417
4417
|
#: attracting new work (degrade) instead of
|
|
4418
4418
|
#: stranding anything in flight.
|
|
4419
|
+
#: * ``providers`` — #2326: rebuilt from ``providers.definitions``
|
|
4420
|
+
#: at DISPATCH time (``assign()``, before
|
|
4421
|
+
#: ``_resolve_provider``), not on a timer — that
|
|
4422
|
+
#: is the only moment the answer matters. Before
|
|
4423
|
+
#: #2326 this dict was parsed once at startup and
|
|
4424
|
+
#: never invalidated, so an agent with its own
|
|
4425
|
+
#: local ``coordinator.yml`` silently ran on a
|
|
4426
|
+
#: days-stale provider definition (wrong model,
|
|
4427
|
+
#: missing env) even though every coordinator-
|
|
4428
|
+
#: side surface (``coord config``, the daemon's
|
|
4429
|
+
#: own ``build_provider(...)``) showed the edit
|
|
4430
|
+
#: as live. Any provider name in use by a
|
|
4431
|
+
#: PENDING/RUNNING assignment is pinned to its
|
|
4432
|
+
#: pre-reload entry (present or absent) —
|
|
4433
|
+
#: swapping a live worker's provider identity
|
|
4434
|
+
#: mid-flight (model, env, log-parser shape)
|
|
4435
|
+
#: remains forbidden; only the NEXT dispatch
|
|
4436
|
+
#: sees the new definition.
|
|
4419
4437
|
#:
|
|
4420
4438
|
#: RESTART-ONLY (documented at their assignment sites in ``__init__``):
|
|
4421
|
-
#: * ``providers`` — a live worker holds a resolved provider.
|
|
4422
4439
|
#: * ``bash_wrap_spawn`` / ``first_output_timeout`` — process tuning.
|
|
4423
4440
|
#: * bind host/port — uvicorn has already bound the socket.
|
|
4424
4441
|
_RELOADABLE_FIELDS = (
|
|
@@ -4427,6 +4444,7 @@ class AgentServer:
|
|
|
4427
4444
|
"artifact_paths",
|
|
4428
4445
|
"build_commands",
|
|
4429
4446
|
"capabilities",
|
|
4447
|
+
"providers",
|
|
4430
4448
|
)
|
|
4431
4449
|
|
|
4432
4450
|
def _maybe_reload_config(self) -> bool:
|
|
@@ -4491,6 +4509,40 @@ class AgentServer:
|
|
|
4491
4509
|
self._apply_reloaded_config(reloaded, machine)
|
|
4492
4510
|
return True
|
|
4493
4511
|
|
|
4512
|
+
def _rebuild_providers(self, cfg: "Any") -> "dict[str, object] | None":
|
|
4513
|
+
"""Build a fresh provider registry from *cfg*'s ``providers.definitions``.
|
|
4514
|
+
|
|
4515
|
+
Mirrors the startup-time loop in
|
|
4516
|
+
``coord.commands.agent_ops._resolve_agent_startup`` (``build_provider``
|
|
4517
|
+
for every entry), but — unlike startup — must never raise. A typo'd
|
|
4518
|
+
``providers.definitions`` entry reaching this agent via a hot reload
|
|
4519
|
+
must not take a running daemon down; ``reload_config_if_stale``
|
|
4520
|
+
already applies that same fail-soft contract to a malformed YAML
|
|
4521
|
+
edit, and a config that parses fine but names an unknown provider
|
|
4522
|
+
``type`` deserves the identical treatment. Returns ``None`` (rather
|
|
4523
|
+
than a partial dict) on any failure, so the caller keeps the
|
|
4524
|
+
entire previous registry until the edit is fixed — matching the
|
|
4525
|
+
"keep last-good config" behaviour for a bad ``coordinator.yml``.
|
|
4526
|
+
"""
|
|
4527
|
+
from coord.providers import build_provider # noqa: PLC0415
|
|
4528
|
+
|
|
4529
|
+
fresh: dict[str, object] = {}
|
|
4530
|
+
try:
|
|
4531
|
+
for name, defn in cfg.providers.definitions.items():
|
|
4532
|
+
fresh[name] = build_provider(name, defn, cfg.models)
|
|
4533
|
+
except Exception as exc: # noqa: BLE001 — never let a bad edit kill the agent
|
|
4534
|
+
_log.warning(
|
|
4535
|
+
"coord agent: %s's providers.definitions failed to rebuild "
|
|
4536
|
+
"(%s: %s); keeping the previous provider registry (%s) "
|
|
4537
|
+
"until the edit is fixed",
|
|
4538
|
+
cfg.path,
|
|
4539
|
+
type(exc).__name__,
|
|
4540
|
+
exc,
|
|
4541
|
+
sorted(self._providers) if self._providers else "none configured",
|
|
4542
|
+
)
|
|
4543
|
+
return None
|
|
4544
|
+
return fresh
|
|
4545
|
+
|
|
4494
4546
|
def _apply_reloaded_config(self, cfg: "Any", machine: "Any") -> None:
|
|
4495
4547
|
"""Swap the reloadable fields in place, pinning anything in flight.
|
|
4496
4548
|
|
|
@@ -4510,6 +4562,17 @@ class AgentServer:
|
|
|
4510
4562
|
advertise *new* work only, so removing a repo correctly means "take no
|
|
4511
4563
|
more dispatches for it", not "abandon the worker already running".
|
|
4512
4564
|
|
|
4565
|
+
#2326: ``providers`` gets the exact same pin treatment, keyed by
|
|
4566
|
+
provider *name* instead of repo name. A provider name in use by a
|
|
4567
|
+
PENDING/RUNNING assignment keeps its pre-reload instance (including
|
|
4568
|
+
absence) — ``_reap`` re-resolves the same ``spec`` after the worker
|
|
4569
|
+
exits (to pick a log parser), and it must get back the SAME provider
|
|
4570
|
+
identity ``assign()``/``_spawn()`` resolved, not one a reload swapped
|
|
4571
|
+
underneath it (different model/env/log-parser shape). Any provider
|
|
4572
|
+
name with no in-flight assignment is free to pick up the new
|
|
4573
|
+
definition immediately — that is the entire point of #2326: the next
|
|
4574
|
+
*dispatch*, not the next restart, sees a config edit.
|
|
4575
|
+
|
|
4513
4576
|
Every field is *rebound* to a freshly-built list/dict rather than
|
|
4514
4577
|
mutated in place, so the many unsynchronized readers elsewhere in this
|
|
4515
4578
|
class (``_servable_repos``, ``_stash_artifacts``, ``assign``, ...) see
|
|
@@ -4525,6 +4588,11 @@ class AgentServer:
|
|
|
4525
4588
|
new_build_commands: dict[str, str] = {
|
|
4526
4589
|
r.name: r.build_command for r in cfg.repos if r.build_command
|
|
4527
4590
|
}
|
|
4591
|
+
# #2326: built outside the lock — `build_provider` is pure
|
|
4592
|
+
# construction (no I/O), but there is no reason to hold `self._lock`
|
|
4593
|
+
# across it. `None` means "rebuild failed, keep the old registry
|
|
4594
|
+
# verbatim" (see `_rebuild_providers`'s docstring).
|
|
4595
|
+
new_providers = self._rebuild_providers(cfg)
|
|
4528
4596
|
|
|
4529
4597
|
def _pin(old: dict, new: dict, keys: "Iterable[str]") -> None:
|
|
4530
4598
|
"""Restore *old*'s entry for each pinned key — including absence."""
|
|
@@ -4553,6 +4621,33 @@ class AgentServer:
|
|
|
4553
4621
|
self.repo_paths = new_repo_paths
|
|
4554
4622
|
self.artifact_paths = new_artifact_paths
|
|
4555
4623
|
self.build_commands = new_build_commands
|
|
4624
|
+
|
|
4625
|
+
providers_added: list[str] = []
|
|
4626
|
+
providers_removed: list[str] = []
|
|
4627
|
+
providers_pinned: list[str] = []
|
|
4628
|
+
if new_providers is not None:
|
|
4629
|
+
in_flight_providers = {
|
|
4630
|
+
a.spec.provider
|
|
4631
|
+
for a in self._assignments.values()
|
|
4632
|
+
if a.status in (PENDING, RUNNING) and a.spec.provider is not None
|
|
4633
|
+
}
|
|
4634
|
+
old_providers = self._providers
|
|
4635
|
+
_pin(old_providers, new_providers, in_flight_providers)
|
|
4636
|
+
# Deliberately NOT trying to report "changed vs unchanged" per
|
|
4637
|
+
# provider: `build_provider` mints a fresh instance every call
|
|
4638
|
+
# and the provider classes carry no value equality, so any such
|
|
4639
|
+
# comparison is really just "was it rebuilt", which is always
|
|
4640
|
+
# true for every non-pinned entry. Report what IS knowable —
|
|
4641
|
+
# the resulting registry, which names appeared/disappeared, and
|
|
4642
|
+
# which kept their pre-reload instance because a PENDING/
|
|
4643
|
+
# RUNNING assignment pinned them.
|
|
4644
|
+
providers_added = [p for p in new_providers if p not in old_providers]
|
|
4645
|
+
providers_removed = [p for p in old_providers if p not in new_providers]
|
|
4646
|
+
providers_pinned = sorted(
|
|
4647
|
+
p for p in in_flight_providers if p in old_providers
|
|
4648
|
+
)
|
|
4649
|
+
self._providers = new_providers
|
|
4650
|
+
|
|
4556
4651
|
self._health_config = cfg
|
|
4557
4652
|
self._config_reloads += 1
|
|
4558
4653
|
self._config_reloaded_at = time.time()
|
|
@@ -4565,7 +4660,7 @@ class AgentServer:
|
|
|
4565
4660
|
|
|
4566
4661
|
_log.info(
|
|
4567
4662
|
"coord agent: applied config reload from %s — repos=%s "
|
|
4568
|
-
"(added=%s removed=%s) capabilities=%s%s",
|
|
4663
|
+
"(added=%s removed=%s) capabilities=%s%s%s",
|
|
4569
4664
|
getattr(cfg, "path", None),
|
|
4570
4665
|
new_repos,
|
|
4571
4666
|
added or "[]",
|
|
@@ -4576,6 +4671,17 @@ class AgentServer:
|
|
|
4576
4671
|
if in_flight
|
|
4577
4672
|
else ""
|
|
4578
4673
|
),
|
|
4674
|
+
(
|
|
4675
|
+
# #2326: separate clause so a provider-only edit (the #2321
|
|
4676
|
+
# incident this issue describes) shows up even when no repo
|
|
4677
|
+
# changed at all.
|
|
4678
|
+
f" providers={sorted(self._providers)}"
|
|
4679
|
+
f"{f' (added={providers_added})' if providers_added else ''}"
|
|
4680
|
+
f"{f' (removed={providers_removed})' if providers_removed else ''}"
|
|
4681
|
+
f"{f' (pinned in-flight={providers_pinned})' if providers_pinned else ''}"
|
|
4682
|
+
if new_providers is not None
|
|
4683
|
+
else " providers=rebuild failed, kept previous registry"
|
|
4684
|
+
),
|
|
4579
4685
|
)
|
|
4580
4686
|
|
|
4581
4687
|
# ── Public API ──────────────────────────────────────────────────────────
|
|
@@ -4681,6 +4787,29 @@ class AgentServer:
|
|
|
4681
4787
|
"watching": str(watched_config) if watched_config else None,
|
|
4682
4788
|
"reloads": self._config_reloads,
|
|
4683
4789
|
"last_reload_at": self._config_reloaded_at,
|
|
4790
|
+
# #2326: this agent's own last-observed mtime of `watching`
|
|
4791
|
+
# (seeded from the file at startup, advanced on every
|
|
4792
|
+
# reload attempt — including a swallowed bad edit, see
|
|
4793
|
+
# `reload_config_if_stale`). `coord status` can diff this
|
|
4794
|
+
# against the coordinator's own mtime for the SAME path to
|
|
4795
|
+
# flag an agent whose config — and therefore whose
|
|
4796
|
+
# `provider_names` below — predates the edit, without
|
|
4797
|
+
# needing to probe `/proc/<pid>/environ` on the worker to
|
|
4798
|
+
# notice (the failure mode that made #2326 a live-process
|
|
4799
|
+
# investigation instead of a one-line `coord status` read).
|
|
4800
|
+
# `None` for a config-free/thin-client agent, same as
|
|
4801
|
+
# `watching`.
|
|
4802
|
+
"config_mtime": self._config_mtime,
|
|
4803
|
+
# #2326: the provider names THIS process would actually
|
|
4804
|
+
# resolve `spec.provider` against right now — i.e. the keys
|
|
4805
|
+
# of `self._providers`, refreshed at dispatch time (see
|
|
4806
|
+
# `_apply_reloaded_config`). Lets `coord status` compare this
|
|
4807
|
+
# list (or `config_mtime` above) against the coordinator's
|
|
4808
|
+
# `providers.definitions` and flag drift directly, instead of
|
|
4809
|
+
# every surface short of the worker's own process agreeing
|
|
4810
|
+
# while the running registry is actually stale — exactly the
|
|
4811
|
+
# split-brain #2326 describes.
|
|
4812
|
+
"provider_names": sorted(self._providers) if self._providers else [],
|
|
4684
4813
|
},
|
|
4685
4814
|
}
|
|
4686
4815
|
|
|
@@ -5940,7 +6069,36 @@ class AgentServer:
|
|
|
5940
6069
|
if spec.provider is None:
|
|
5941
6070
|
return None
|
|
5942
6071
|
if spec.provider in self._providers:
|
|
5943
|
-
|
|
6072
|
+
local = self._providers[spec.provider]
|
|
6073
|
+
if spec.provider_def is not None:
|
|
6074
|
+
# #2326: step 2 (local override) is winning over a wire
|
|
6075
|
+
# provider_def the coordinator DID send — the precedence is
|
|
6076
|
+
# deliberate (see docstring), but before this the decision
|
|
6077
|
+
# left no trace, which is why a days-stale local registry
|
|
6078
|
+
# silently shadowing a fresh coordinator edit took a live
|
|
6079
|
+
# `/proc/<pid>/environ` probe to catch instead of a log
|
|
6080
|
+
# line. Env keys only (not values) — provider env commonly
|
|
6081
|
+
# carries API keys/tokens, and the point here is "does this
|
|
6082
|
+
# instance carry the key the coordinator's does", not the
|
|
6083
|
+
# secret itself.
|
|
6084
|
+
try:
|
|
6085
|
+
local_env_keys = sorted(local.env()) # type: ignore[attr-defined]
|
|
6086
|
+
except Exception: # noqa: BLE001 — logging must never break dispatch
|
|
6087
|
+
local_env_keys = None
|
|
6088
|
+
wire_env_keys = sorted((spec.provider_def or {}).get("env") or {})
|
|
6089
|
+
_log.info(
|
|
6090
|
+
"coord agent: provider %r resolved from this agent's "
|
|
6091
|
+
"local providers.definitions (env keys=%s), overriding "
|
|
6092
|
+
"the coordinator's wire-carried provider_def (env "
|
|
6093
|
+
"keys=%s) — local-wins-over-wire is deliberate "
|
|
6094
|
+
"precedence (#1796); if that's not what you expected, "
|
|
6095
|
+
"check this agent's own coordinator.yml for a stale "
|
|
6096
|
+
"definition (#2326)",
|
|
6097
|
+
spec.provider,
|
|
6098
|
+
local_env_keys,
|
|
6099
|
+
wire_env_keys,
|
|
6100
|
+
)
|
|
6101
|
+
return local
|
|
5944
6102
|
if spec.provider_def is not None:
|
|
5945
6103
|
from coord.providers import build_provider_from_wire # noqa: PLC0415
|
|
5946
6104
|
|
|
@@ -63,6 +63,40 @@ there are lost, or collide with other workers running at the same time. If \
|
|
|
63
63
|
your worktree looks unexpectedly empty or unwritable, STOP and report it — \
|
|
64
64
|
do not fall back to editing the base checkout and copying files over.
|
|
65
65
|
|
|
66
|
+
Write incrementally — this is the single most important rule in this file:
|
|
67
|
+
- Every request you make has a hard output-token budget, and on a \
|
|
68
|
+
reasoning model those tokens are shared with your own thinking. Truncation \
|
|
69
|
+
can happen at any budget size — raising the ceiling makes it rarer, not \
|
|
70
|
+
impossible — so the rule below holds regardless of what the current limit \
|
|
71
|
+
is.
|
|
72
|
+
- Write each file as soon as its content is decided. Do NOT design the \
|
|
73
|
+
whole change, plan every file, and only then start emitting `write`/`edit` \
|
|
74
|
+
calls — a turn that spends its whole budget reasoning can be truncated \
|
|
75
|
+
before it emits a single tool call. Truncation produces a clean-looking \
|
|
76
|
+
exit with zero commits and nothing on disk: the work is not "mostly done", \
|
|
77
|
+
it is entirely lost, because nothing you only thought about was ever sent \
|
|
78
|
+
as a tool call.
|
|
79
|
+
- Prefer many small steps over one large one: read/understand one file, \
|
|
80
|
+
write it, move to the next. Small increments stay nowhere near the cap; \
|
|
81
|
+
a single-shot "figure out the whole diff, then write it all" turn is what \
|
|
82
|
+
exhausts it.
|
|
83
|
+
- Issue one command per `bash` call — do not chain with `&&`, `;` or `|`. \
|
|
84
|
+
Permission rules are prefix-matched against the whole command string, so \
|
|
85
|
+
`git status && git log` matches no `allow` entry and is denied outright, \
|
|
86
|
+
wasting a turn for nothing. Run `git status`, then separately `git log`.
|
|
87
|
+
- These are the only `bash` commands you can run; everything else is \
|
|
88
|
+
denied, including `pwd`, `ls`, `cat` and `grep` (use your own file-read \
|
|
89
|
+
and search tools for those): `git status`, `git diff`, `git log`, \
|
|
90
|
+
`git show`, `git add`, `git commit`, `git checkout`, `git branch`, \
|
|
91
|
+
`git rev-parse`, `git push`, `cargo …`, `make…`, `pytest…`, \
|
|
92
|
+
`python3 -m pytest…`, `python -m pytest…`, `npm …`, `pip install…`, \
|
|
93
|
+
`pip3 install…`. `gh` is denied — the coordinator owns GitHub.
|
|
94
|
+
- If a `bash` or `edit` call does come back denied, don't probe with \
|
|
95
|
+
variations to find what's allowed — every denial replays the entire \
|
|
96
|
+
permission ruleset back to you, burning output budget you need for \
|
|
97
|
+
`write` calls without telling you anything the list above didn't already \
|
|
98
|
+
say. Take the denial as final and move on.
|
|
99
|
+
|
|
66
100
|
This session is ONE-SHOT and non-interactive:
|
|
67
101
|
- There is no next turn and no human to reply to you. Background-task \
|
|
68
102
|
completion notifications will NEVER reach you — nothing wakes you up.
|
|
@@ -333,9 +333,12 @@ def _resolve_agent_startup(
|
|
|
333
333
|
if cfg.path is not None:
|
|
334
334
|
notices.append(
|
|
335
335
|
f"coord agent: watching {cfg.path} for edits — repos, repo_paths, "
|
|
336
|
-
"capabilities, artifact_paths
|
|
337
|
-
"next /health poll
|
|
338
|
-
"
|
|
336
|
+
"capabilities, artifact_paths, build_command and (#2326) "
|
|
337
|
+
"providers.definitions are re-read on the next /health poll or "
|
|
338
|
+
"dispatch, no restart needed (#2299). providers.definitions "
|
|
339
|
+
"changes apply to the NEXT dispatch of that provider name — an "
|
|
340
|
+
"in-flight assignment keeps the definition it started with. "
|
|
341
|
+
"RESTART-ONLY: concurrency (bash_wrap_spawn/first_output_timeout) "
|
|
339
342
|
"and the bind host/port."
|
|
340
343
|
)
|
|
341
344
|
else:
|
|
@@ -4210,6 +4210,56 @@ class TestProviderLayerDispatch:
|
|
|
4210
4210
|
assert "legacy-SHOULD-NOT-RUN" not in log
|
|
4211
4211
|
server.shutdown()
|
|
4212
4212
|
|
|
4213
|
+
def test_local_wins_over_wire_provider_def_is_logged(
|
|
4214
|
+
self, tmp_path: Path, caplog: pytest.LogCaptureFixture
|
|
4215
|
+
) -> None:
|
|
4216
|
+
"""#2326 item 3: when `_resolve_provider` takes the local-registry
|
|
4217
|
+
branch over an available `spec.provider_def`, it must say so in the
|
|
4218
|
+
agent log, naming both — this decision used to leave no trace,
|
|
4219
|
+
which is why a stale local override took a live-process probe to
|
|
4220
|
+
catch instead of a `journalctl` grep."""
|
|
4221
|
+
from coord.config import ProviderDef
|
|
4222
|
+
from coord.providers import build_provider
|
|
4223
|
+
|
|
4224
|
+
repo = _init_repo(tmp_path / "repo")
|
|
4225
|
+
defn = ProviderDef(type="claude", env={"LOCAL_ONLY": "1"})
|
|
4226
|
+
provider = build_provider("myprovider", defn, None)
|
|
4227
|
+
|
|
4228
|
+
server = AgentServer(
|
|
4229
|
+
machine_name="test",
|
|
4230
|
+
repos=["api"],
|
|
4231
|
+
state_dir=tmp_path / "state",
|
|
4232
|
+
worker_command=lambda spec: ["/bin/sh", "-c", "echo legacy-SHOULD-NOT-RUN"],
|
|
4233
|
+
repo_paths={"api": str(repo)},
|
|
4234
|
+
providers={"myprovider": provider},
|
|
4235
|
+
bash_wrap_spawn=False,
|
|
4236
|
+
)
|
|
4237
|
+
spec = _spec(
|
|
4238
|
+
repo,
|
|
4239
|
+
provider="myprovider",
|
|
4240
|
+
provider_def={
|
|
4241
|
+
"type": "claude",
|
|
4242
|
+
"binary": None,
|
|
4243
|
+
"model": None,
|
|
4244
|
+
"attach_url": None,
|
|
4245
|
+
"env": {"FROM_WIRE": "1"},
|
|
4246
|
+
"extra_args": [],
|
|
4247
|
+
},
|
|
4248
|
+
)
|
|
4249
|
+
try:
|
|
4250
|
+
with caplog.at_level("INFO", logger="coord.agent"):
|
|
4251
|
+
resolved = server._resolve_provider(spec)
|
|
4252
|
+
finally:
|
|
4253
|
+
server.shutdown()
|
|
4254
|
+
|
|
4255
|
+
assert resolved is provider
|
|
4256
|
+
assert "myprovider" in caplog.text
|
|
4257
|
+
assert "local providers.definitions" in caplog.text
|
|
4258
|
+
assert "wire-carried provider_def" in caplog.text
|
|
4259
|
+
# Env KEYS only — never the values (secrets commonly live here).
|
|
4260
|
+
assert "LOCAL_ONLY" in caplog.text
|
|
4261
|
+
assert "FROM_WIRE" in caplog.text
|
|
4262
|
+
|
|
4213
4263
|
|
|
4214
4264
|
class TestCapabilityGates:
|
|
4215
4265
|
"""#324/#425: assign() enforces capability gates before spawning."""
|
|
@@ -5563,6 +5613,45 @@ def _bump_mtime(path: Path, seconds_ahead: float = 5.0) -> None:
|
|
|
5563
5613
|
os.utime(path, (new_time, new_time))
|
|
5564
5614
|
|
|
5565
5615
|
|
|
5616
|
+
def _write_config_with_provider(
|
|
5617
|
+
path: Path,
|
|
5618
|
+
*,
|
|
5619
|
+
repos: list[str],
|
|
5620
|
+
repo_paths: dict[str, str],
|
|
5621
|
+
provider_binary: str,
|
|
5622
|
+
provider_env: dict[str, str] | None = None,
|
|
5623
|
+
machine_name: str = "test",
|
|
5624
|
+
) -> Path:
|
|
5625
|
+
"""Write a minimal coordinator.yml with one `providers.definitions`
|
|
5626
|
+
entry named "myprovider" (#2326 hot-reload coverage)."""
|
|
5627
|
+
provider_env = provider_env or {}
|
|
5628
|
+
lines = ["repos:"]
|
|
5629
|
+
for name in repos:
|
|
5630
|
+
lines.append(f" - name: {name}")
|
|
5631
|
+
lines.append(f" github: acme/{name}")
|
|
5632
|
+
lines.append("")
|
|
5633
|
+
lines.append("providers:")
|
|
5634
|
+
lines.append(" definitions:")
|
|
5635
|
+
lines.append(" myprovider:")
|
|
5636
|
+
lines.append(" type: claude")
|
|
5637
|
+
lines.append(f" binary: {provider_binary!r}")
|
|
5638
|
+
if provider_env:
|
|
5639
|
+
lines.append(" env:")
|
|
5640
|
+
for k, v in provider_env.items():
|
|
5641
|
+
lines.append(f" {k}: {v!r}")
|
|
5642
|
+
lines.append("")
|
|
5643
|
+
lines.append("machines:")
|
|
5644
|
+
lines.append(f" - name: {machine_name}")
|
|
5645
|
+
lines.append(f" host: {machine_name}.tailnet")
|
|
5646
|
+
lines.append(" capabilities: [python]")
|
|
5647
|
+
lines.append(f" repos: [{', '.join(repos)}]")
|
|
5648
|
+
lines.append(" repo_paths:")
|
|
5649
|
+
for name, p in repo_paths.items():
|
|
5650
|
+
lines.append(f" {name}: {p!r}")
|
|
5651
|
+
path.write_text("\n".join(lines) + "\n")
|
|
5652
|
+
return path
|
|
5653
|
+
|
|
5654
|
+
|
|
5566
5655
|
class TestConfigHotReload:
|
|
5567
5656
|
"""#2299: `coordinator.yml` edits land within one health tick, no restart.
|
|
5568
5657
|
|
|
@@ -5887,14 +5976,17 @@ class TestConfigHotReload:
|
|
|
5887
5976
|
server.shutdown()
|
|
5888
5977
|
|
|
5889
5978
|
def test_restart_only_fields_are_not_reloaded(self, tmp_path: Path) -> None:
|
|
5890
|
-
"""`
|
|
5891
|
-
|
|
5892
|
-
|
|
5893
|
-
|
|
5894
|
-
|
|
5979
|
+
"""`bash_wrap_spawn` and `first_output_timeout` are documented
|
|
5980
|
+
restart-only process tuning that uvicorn/`_spawn` already committed
|
|
5981
|
+
to at startup. A reload must leave both exactly as they were.
|
|
5982
|
+
|
|
5983
|
+
#2326: `providers` used to be on this list too — a sibling test,
|
|
5984
|
+
`test_provider_registry_is_hot_reloaded_when_not_in_flight` below,
|
|
5985
|
+
now covers that it IS reloaded (a live worker's OWN resolved
|
|
5986
|
+
provider is still protected, just via in-flight pinning rather than
|
|
5987
|
+
blanket restart-only-ness — see `_apply_reloaded_config`)."""
|
|
5895
5988
|
server, cfg_path, api, web = self._build(
|
|
5896
5989
|
tmp_path,
|
|
5897
|
-
providers={"stub": sentinel},
|
|
5898
5990
|
bash_wrap_spawn=False,
|
|
5899
5991
|
first_output_timeout=12.5,
|
|
5900
5992
|
)
|
|
@@ -5907,12 +5999,187 @@ class TestConfigHotReload:
|
|
|
5907
5999
|
_bump_mtime(cfg_path)
|
|
5908
6000
|
assert server._maybe_reload_config() is True
|
|
5909
6001
|
|
|
5910
|
-
assert server._providers == {"stub": sentinel}
|
|
5911
6002
|
assert server.bash_wrap_spawn is False
|
|
5912
6003
|
assert server.first_output_timeout == 12.5
|
|
5913
6004
|
finally:
|
|
5914
6005
|
server.shutdown()
|
|
5915
6006
|
|
|
6007
|
+
# ── #2326: providers.definitions is hot too ─────────────────────────────
|
|
6008
|
+
|
|
6009
|
+
def test_provider_registry_is_hot_reloaded_when_not_in_flight(
|
|
6010
|
+
self, tmp_path: Path
|
|
6011
|
+
) -> None:
|
|
6012
|
+
"""An agent with its own local `coordinator.yml` must not pin
|
|
6013
|
+
`providers.definitions` at startup (#2326) — a provider config
|
|
6014
|
+
change (new env, new binary, ...) must apply on the NEXT dispatch,
|
|
6015
|
+
no restart, exactly like `repos`/`capabilities`/etc already do.
|
|
6016
|
+
|
|
6017
|
+
Verifies the resolution itself: the env dict a fresh dispatch's
|
|
6018
|
+
provider carries, not a re-read of the config file."""
|
|
6019
|
+
from coord.config import load as load_config
|
|
6020
|
+
from coord.providers import build_provider
|
|
6021
|
+
|
|
6022
|
+
api = _init_repo(tmp_path / "api")
|
|
6023
|
+
stub = tmp_path / "fake-claude.sh"
|
|
6024
|
+
stub.write_text('#!/bin/sh\necho "SPAWN_ENV_FOO=$SPAWN_ENV_FOO"\n')
|
|
6025
|
+
stub.chmod(0o755)
|
|
6026
|
+
|
|
6027
|
+
cfg_path = _write_config_with_provider(
|
|
6028
|
+
tmp_path / "coordinator.yml",
|
|
6029
|
+
repos=["api"],
|
|
6030
|
+
repo_paths={"api": str(api)},
|
|
6031
|
+
provider_binary=str(stub),
|
|
6032
|
+
)
|
|
6033
|
+
cfg = load_config(cfg_path)
|
|
6034
|
+
|
|
6035
|
+
server = AgentServer(
|
|
6036
|
+
machine_name="test",
|
|
6037
|
+
capabilities=["python"],
|
|
6038
|
+
repos=["api"],
|
|
6039
|
+
state_dir=tmp_path / "state",
|
|
6040
|
+
worker_command=lambda spec: [
|
|
6041
|
+
"/bin/sh", "-c", "echo legacy-SHOULD-NOT-RUN"
|
|
6042
|
+
],
|
|
6043
|
+
repo_paths={"api": str(api)},
|
|
6044
|
+
providers={
|
|
6045
|
+
"myprovider": build_provider(
|
|
6046
|
+
"myprovider",
|
|
6047
|
+
cfg.providers.definitions["myprovider"],
|
|
6048
|
+
cfg.models,
|
|
6049
|
+
)
|
|
6050
|
+
},
|
|
6051
|
+
health_config=cfg,
|
|
6052
|
+
worktree_writable_settings_files=[],
|
|
6053
|
+
bash_wrap_spawn=False,
|
|
6054
|
+
)
|
|
6055
|
+
try:
|
|
6056
|
+
a1 = server.assign(_spec(api, provider="myprovider"))
|
|
6057
|
+
final1 = server.wait_for(a1.id, timeout=5)
|
|
6058
|
+
log1 = Path(final1.log_path).read_text()
|
|
6059
|
+
assert "SPAWN_ENV_FOO=bar" not in log1
|
|
6060
|
+
assert "legacy-SHOULD-NOT-RUN" not in log1
|
|
6061
|
+
|
|
6062
|
+
_write_config_with_provider(
|
|
6063
|
+
cfg_path,
|
|
6064
|
+
repos=["api"],
|
|
6065
|
+
repo_paths={"api": str(api)},
|
|
6066
|
+
provider_binary=str(stub),
|
|
6067
|
+
provider_env={"SPAWN_ENV_FOO": "bar"},
|
|
6068
|
+
)
|
|
6069
|
+
_bump_mtime(cfg_path)
|
|
6070
|
+
|
|
6071
|
+
a2 = server.assign(_spec(api, provider="myprovider"))
|
|
6072
|
+
final2 = server.wait_for(a2.id, timeout=5)
|
|
6073
|
+
log2 = Path(final2.log_path).read_text()
|
|
6074
|
+
assert "SPAWN_ENV_FOO=bar" in log2, (
|
|
6075
|
+
f"providers.definitions edit did not reach the next "
|
|
6076
|
+
f"dispatch: {log2!r}"
|
|
6077
|
+
)
|
|
6078
|
+
# An implicit "claude" entry is always materialised alongside
|
|
6079
|
+
# whatever's explicitly configured (see `ProvidersConfig`).
|
|
6080
|
+
assert server.health()["config_reload"]["provider_names"] == [
|
|
6081
|
+
"claude",
|
|
6082
|
+
"myprovider",
|
|
6083
|
+
]
|
|
6084
|
+
finally:
|
|
6085
|
+
server.shutdown()
|
|
6086
|
+
|
|
6087
|
+
def test_in_flight_provider_is_pinned_across_a_reload(
|
|
6088
|
+
self, tmp_path: Path
|
|
6089
|
+
) -> None:
|
|
6090
|
+
"""The #2299 in-flight invariant applies to providers too (#2326): a
|
|
6091
|
+
RUNNING assignment must keep resolving to the provider instance it
|
|
6092
|
+
started with, even though a reload landed while it was running —
|
|
6093
|
+
`_reap` re-resolves the SAME spec afterwards to pick a log parser,
|
|
6094
|
+
and must get back the SAME identity `_spawn` used, not one a reload
|
|
6095
|
+
swapped underneath it."""
|
|
6096
|
+
from coord.config import load as load_config
|
|
6097
|
+
from coord.providers import build_provider
|
|
6098
|
+
|
|
6099
|
+
api = _init_repo(tmp_path / "api")
|
|
6100
|
+
go = tmp_path / "go"
|
|
6101
|
+
stub = tmp_path / "fake-claude.sh"
|
|
6102
|
+
stub.write_text(
|
|
6103
|
+
"#!/bin/sh\n"
|
|
6104
|
+
f"while [ ! -f {go} ]; do sleep 0.05; done\n"
|
|
6105
|
+
'echo "SPAWN_ENV_FOO=$SPAWN_ENV_FOO"\n'
|
|
6106
|
+
)
|
|
6107
|
+
stub.chmod(0o755)
|
|
6108
|
+
|
|
6109
|
+
cfg_path = _write_config_with_provider(
|
|
6110
|
+
tmp_path / "coordinator.yml",
|
|
6111
|
+
repos=["api"],
|
|
6112
|
+
repo_paths={"api": str(api)},
|
|
6113
|
+
provider_binary=str(stub),
|
|
6114
|
+
)
|
|
6115
|
+
cfg = load_config(cfg_path)
|
|
6116
|
+
server = AgentServer(
|
|
6117
|
+
machine_name="test",
|
|
6118
|
+
capabilities=["python"],
|
|
6119
|
+
repos=["api"],
|
|
6120
|
+
state_dir=tmp_path / "state",
|
|
6121
|
+
worker_command=lambda spec: ["/bin/sh", "-c", "echo legacy"],
|
|
6122
|
+
repo_paths={"api": str(api)},
|
|
6123
|
+
providers={
|
|
6124
|
+
"myprovider": build_provider(
|
|
6125
|
+
"myprovider",
|
|
6126
|
+
cfg.providers.definitions["myprovider"],
|
|
6127
|
+
cfg.models,
|
|
6128
|
+
)
|
|
6129
|
+
},
|
|
6130
|
+
health_config=cfg,
|
|
6131
|
+
worktree_writable_settings_files=[],
|
|
6132
|
+
bash_wrap_spawn=False,
|
|
6133
|
+
)
|
|
6134
|
+
try:
|
|
6135
|
+
a = server.assign(_spec(api, provider="myprovider"))
|
|
6136
|
+
deadline = time.time() + 10
|
|
6137
|
+
while server.get(a.id).status != RUNNING and time.time() < deadline:
|
|
6138
|
+
time.sleep(0.05)
|
|
6139
|
+
assert server.get(a.id).status == RUNNING
|
|
6140
|
+
pre_reload_provider = server._providers["myprovider"]
|
|
6141
|
+
|
|
6142
|
+
# Edit lands WHILE the worker above is running.
|
|
6143
|
+
_write_config_with_provider(
|
|
6144
|
+
cfg_path,
|
|
6145
|
+
repos=["api"],
|
|
6146
|
+
repo_paths={"api": str(api)},
|
|
6147
|
+
provider_binary=str(stub),
|
|
6148
|
+
provider_env={"SPAWN_ENV_FOO": "bar"},
|
|
6149
|
+
)
|
|
6150
|
+
_bump_mtime(cfg_path)
|
|
6151
|
+
assert server._maybe_reload_config() is True
|
|
6152
|
+
|
|
6153
|
+
# The RUNNING assignment's own provider identity must survive
|
|
6154
|
+
# the reload untouched — asserted directly (object identity),
|
|
6155
|
+
# not just inferred from behaviour.
|
|
6156
|
+
in_flight_provider = server._resolve_provider(server.get(a.id).spec)
|
|
6157
|
+
assert in_flight_provider is pre_reload_provider
|
|
6158
|
+
assert in_flight_provider.env().get("SPAWN_ENV_FOO") is None
|
|
6159
|
+
|
|
6160
|
+
go.write_text("done")
|
|
6161
|
+
final = server.wait_for(a.id, timeout=10)
|
|
6162
|
+
log = Path(final.log_path).read_text()
|
|
6163
|
+
assert "SPAWN_ENV_FOO=bar" not in log, (
|
|
6164
|
+
"a reload must not retarget an in-flight worker's provider "
|
|
6165
|
+
f"mid-run: {log!r}"
|
|
6166
|
+
)
|
|
6167
|
+
|
|
6168
|
+
# The pin lifts once the assignment is terminal AND the next
|
|
6169
|
+
# reload runs (a pin is only re-evaluated when a reload actually
|
|
6170
|
+
# happens — an unchanged file triggers no reload at all, so it
|
|
6171
|
+
# takes one more on-disk change, exactly like a genuine second
|
|
6172
|
+
# `coordinator.yml` edit would).
|
|
6173
|
+
_bump_mtime(cfg_path)
|
|
6174
|
+
assert server._maybe_reload_config() is True
|
|
6175
|
+
a2 = server.assign(_spec(api, provider="myprovider"))
|
|
6176
|
+
final2 = server.wait_for(a2.id, timeout=10)
|
|
6177
|
+
log2 = Path(final2.log_path).read_text()
|
|
6178
|
+
assert "SPAWN_ENV_FOO=bar" in log2
|
|
6179
|
+
finally:
|
|
6180
|
+
server._assignments.clear()
|
|
6181
|
+
server.shutdown()
|
|
6182
|
+
|
|
5916
6183
|
def test_reload_busts_the_local_health_cache(self, tmp_path: Path) -> None:
|
|
5917
6184
|
"""The H-1 block in /health is built from the loaded Config's
|
|
5918
6185
|
checkouts — a cache left in place would keep republishing the
|