code-coordinator 0.5.107__tar.gz → 0.5.109__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.107 → code_coordinator-0.5.109}/PKG-INFO +1 -1
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/agent.py +56 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/providers/claude.py +12 -1
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/providers/claude_pty.py +14 -1
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/smoke.py +18 -7
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_agent.py +163 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_providers.py +46 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_providers_pty.py +46 -1
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_smoke.py +39 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_worker_test_scoping.py +18 -3
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/.github/workflows/release-tui.yml +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/.gitignore +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/CLAUDE.md +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/GOAL.md +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/LICENSE +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/MANIFEST.in +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/README.md +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/__init__.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/audit.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/block_log.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/board_bool_guard.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/board_service.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/brain.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/claim.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/cli.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/client.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/comments.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/config.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dao.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/.gitignore +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/components.json +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/dist/assets/Gallery-Cq84itDE.js +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/dist/assets/Terminal-DOXLcMue.js +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/dist/assets/index-DHn-RIJ8.js +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/dist/index.html +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/dist/sw.js +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/eslint.config.js +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/index.html +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/package-lock.json +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/package.json +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/playwright.config.ts +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/postcss.config.js +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/App.tsx +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/api/client.ts +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/api/generated.ts +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/index.css +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/main.tsx +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/test-setup.ts +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/tailwind.config.js +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/tsconfig.json +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/tsconfig.node.json +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dashboard/webapp/vite.config.ts +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/db.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/deps.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/drive.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/events.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/filelock.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/freshness.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/gates.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/goal.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/health/context.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/health/models.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/health/render.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/health/units.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/hooks.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/interactive.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/models.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/network.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/notify.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/openapi.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/parentage.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/plans.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/progress.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/release_window.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/reports.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/review.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/split_work.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/state.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/test_author.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/test_report.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/usage.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/install-agent.sh +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/pyproject.toml +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/setup.cfg +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/__init__.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/acceptance/ms-33/audit_1039.rs +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/acceptance/ms-33/contract.md +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/acceptance/ms-33/manifest.yml +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/acceptance/ms-38/contract.md +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/acceptance/ms-38/manifest.yml +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/conftest.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_config.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_db.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_events.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_init.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_models.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_network.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_no_direct_gh_calls.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_review.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_session.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_split.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_state.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/Cargo.lock +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/Cargo.toml +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/cargo-config-local-quadraui.toml.example +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/src/app/audit.rs +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/src/app/chat.rs +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/src/app/data.rs +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/src/app/dialogs.rs +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/src/app/drive.rs +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/src/app/drive_queue.rs +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/src/app/escalation.rs +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/src/app/events.rs +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/src/app/fixtures.rs +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/src/app/fleet_health.rs +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/src/app/fleet_sessions.rs +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/src/app/fleet_terminals.rs +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/src/app/format.rs +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/src/app/milestone_dag.rs +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/src/app/mod.rs +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/src/app/msv.rs +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/src/app/pipeline.rs +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/src/app/plans.rs +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/src/app/render.rs +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/src/app/reports.rs +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/src/app/sessions.rs +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/src/app/settings_ui.rs +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/src/app/sidebar.rs +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/src/app/terminal.rs +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/src/app/tests.rs +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/src/app/types.rs +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/src/app/workspace.rs +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/src/bin/gtk.rs +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/src/commands.rs +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/src/lib.rs +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/src/main.rs +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/src/settings.rs +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/tests/acceptance.rs +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/tests/cli.rs +0 -0
- {code_coordinator-0.5.107 → code_coordinator-0.5.109}/tui/tests/fixtures/board_sample.json +0 -0
|
@@ -3850,6 +3850,12 @@ def default_worker_command(spec: AssignmentSpec, *, binary: str = DEFAULT_WORKER
|
|
|
3850
3850
|
For ``type="plan"`` specs the worker gets :data:`WORKER_PLAN_PROMPT` as
|
|
3851
3851
|
its system prompt and only ``Read,Bash`` in ``--allowedTools`` — no
|
|
3852
3852
|
Edit/Write tools so it cannot modify the repository.
|
|
3853
|
+
|
|
3854
|
+
For ``type="smoke"`` specs the worker gets ``Read,Bash`` only — no
|
|
3855
|
+
Edit/Write, and deliberately no ``Monitor`` (#2301): a smoke leg is a
|
|
3856
|
+
one-shot ``claude -p`` session, and ``Monitor`` ends the turn to await a
|
|
3857
|
+
notification that can never arrive in time to resume it, which silently
|
|
3858
|
+
kills a backgrounded smoke suite mid-run and leaves no verdict printed.
|
|
3853
3859
|
"""
|
|
3854
3860
|
if spec.type == "plan":
|
|
3855
3861
|
system_prompt = spec.system_prompt if spec.system_prompt else WORKER_PLAN_PROMPT
|
|
@@ -3907,6 +3913,33 @@ def default_worker_command(spec: AssignmentSpec, *, binary: str = DEFAULT_WORKER
|
|
|
3907
3913
|
system_prompt = spec.system_prompt if spec.system_prompt else MOCK_AUTHOR_SYSTEM_PROMPT
|
|
3908
3914
|
system_prompt += build_deny_prompt(MOCK_AUTHOR_DENY_COMMANDS)
|
|
3909
3915
|
allowed_tools = "Read,Edit,Write,Bash"
|
|
3916
|
+
elif spec.type == "smoke":
|
|
3917
|
+
# #2301: smoke gets its own branch instead of falling through to the
|
|
3918
|
+
# generic `else` below (which is where it used to land, and where
|
|
3919
|
+
# it inherited the #2169 `Monitor` grant meant for *work* legs).
|
|
3920
|
+
# A smoke runner's whole job is "pull the branch, run the smoke
|
|
3921
|
+
# command, report pass/fail" (see SMOKE_SYSTEM_PROMPT) — it edits
|
|
3922
|
+
# nothing and pushes nothing, so it has no business holding
|
|
3923
|
+
# Edit/Write either.
|
|
3924
|
+
#
|
|
3925
|
+
# `Monitor` is deliberately withheld: it is an await-a-notification
|
|
3926
|
+
# tool — calling it ends the current turn so the harness can wake
|
|
3927
|
+
# the model back up once the condition it's watching fires. That
|
|
3928
|
+
# only resumes anything in an INTERACTIVE session. A smoke leg is a
|
|
3929
|
+
# one-shot `claude -p` session like every coord leg (#1394): ending
|
|
3930
|
+
# the turn ends the session itself, permanently, before any
|
|
3931
|
+
# notification can arrive. The agent was observed reaching for
|
|
3932
|
+
# `Monitor` via ToolSearch to poll a backgrounded smoke suite, then
|
|
3933
|
+
# ending its turn to "wait" — the session (and the backgrounded
|
|
3934
|
+
# suite, reaped ~30s later) died silently with no verdict printed,
|
|
3935
|
+
# burning a Test dispatch for zero signal every single retry.
|
|
3936
|
+
# `BashOutput`/`TaskOutput` (already reachable without an explicit
|
|
3937
|
+
# grant — see the #2169 comment above) return synchronously and are
|
|
3938
|
+
# the correct way to poll a backgrounded task from here.
|
|
3939
|
+
from coord.smoke import SMOKE_SYSTEM_PROMPT # noqa: PLC0415
|
|
3940
|
+
system_prompt = spec.system_prompt if spec.system_prompt else SMOKE_SYSTEM_PROMPT
|
|
3941
|
+
system_prompt += build_deny_prompt(spec.deny_commands)
|
|
3942
|
+
allowed_tools = "Read,Bash"
|
|
3910
3943
|
else:
|
|
3911
3944
|
system_prompt = spec.system_prompt if spec.system_prompt else WORKER_SYSTEM_PROMPT
|
|
3912
3945
|
system_prompt += build_deny_prompt(spec.deny_commands)
|
|
@@ -3916,6 +3949,15 @@ def default_worker_command(spec: AssignmentSpec, *, binary: str = DEFAULT_WORKER
|
|
|
3916
3949
|
# past the 600s Bash ceiling. `TaskOutput`/`TaskStop` were already
|
|
3917
3950
|
# reachable without being in this list; `Monitor` was the one
|
|
3918
3951
|
# observed denied.
|
|
3952
|
+
#
|
|
3953
|
+
# #2301: this grant is for *work*-shaped legs (work/review/fix/
|
|
3954
|
+
# conflict-fix) whose system prompt (WORKER_SYSTEM_PROMPT, the
|
|
3955
|
+
# ONE-SHOT section) explicitly teaches the bounded-poll pattern and
|
|
3956
|
+
# explains why an await-a-notification tool is safe to reach for
|
|
3957
|
+
# ONLY with that guidance attached. `smoke` used to fall through to
|
|
3958
|
+
# this branch and inherit `Monitor` with none of that context — see
|
|
3959
|
+
# the dedicated `elif spec.type == "smoke"` branch above, which
|
|
3960
|
+
# deliberately withholds it instead.
|
|
3919
3961
|
allowed_tools = "Read,Edit,Write,Bash,Monitor"
|
|
3920
3962
|
|
|
3921
3963
|
# NOTE: briefing is NOT passed as a positional arg — it is written to
|
|
@@ -7079,6 +7121,20 @@ class AgentServer:
|
|
|
7079
7121
|
assert proc.stdin is not None
|
|
7080
7122
|
proc.stdin.write(initial_input)
|
|
7081
7123
|
proc.stdin.flush()
|
|
7124
|
+
# #2306: a provider that does not support stdin message injection
|
|
7125
|
+
# (``capabilities().inject == False``, e.g. OpenCodeProvider,
|
|
7126
|
+
# which takes its briefing on argv) never writes to or closes
|
|
7127
|
+
# this pipe again. Leaving it open blocks the worker forever —
|
|
7128
|
+
# it never sees an EOF on stdin — until the 600s TTFT watchdog
|
|
7129
|
+
# kills it having emitted zero bytes. Close it here so such a
|
|
7130
|
+
# worker gets its EOF immediately after the (empty) initial
|
|
7131
|
+
# write. ``provider_obj`` is ``None`` on the legacy path
|
|
7132
|
+
# (``spec.provider is None``, pre-#324 behaviour) — treat that
|
|
7133
|
+
# as claude/inject-capable and leave stdin open, matching
|
|
7134
|
+
# ``inject_message``'s existing "no provider info => allow"
|
|
7135
|
+
# fallback.
|
|
7136
|
+
if provider_obj is not None and not provider_obj.capabilities().inject: # type: ignore[attr-defined]
|
|
7137
|
+
proc.stdin.close()
|
|
7082
7138
|
except (BrokenPipeError, OSError) as e:
|
|
7083
7139
|
log_fh.write(f"\n# failed to send initial briefing: {e}\n")
|
|
7084
7140
|
|
|
@@ -120,6 +120,7 @@ class ClaudeProvider(Provider):
|
|
|
120
120
|
_sealed_write_guard_tools,
|
|
121
121
|
build_deny_prompt,
|
|
122
122
|
)
|
|
123
|
+
from coord.smoke import SMOKE_SYSTEM_PROMPT # noqa: PLC0415
|
|
123
124
|
|
|
124
125
|
binary = self._binary if self._binary is not None else DEFAULT_WORKER_BINARY
|
|
125
126
|
|
|
@@ -170,12 +171,22 @@ class ClaudeProvider(Provider):
|
|
|
170
171
|
_sp = spec.system_prompt if spec.system_prompt else MOCK_AUTHOR_SYSTEM_PROMPT
|
|
171
172
|
_sp += build_deny_prompt(MOCK_AUTHOR_DENY_COMMANDS)
|
|
172
173
|
_at = "Read,Edit,Write,Bash"
|
|
174
|
+
elif spec.type == "smoke":
|
|
175
|
+
# #2301: keep in sync with default_worker_command's identical
|
|
176
|
+
# branch — smoke gets Read,Bash only, deliberately WITHOUT
|
|
177
|
+
# Monitor (an await-a-notification tool that ends a smoke
|
|
178
|
+
# leg's one-shot session before any wake-up can arrive) or
|
|
179
|
+
# Edit/Write (a smoke leg validates; it never mutates).
|
|
180
|
+
_sp = spec.system_prompt if spec.system_prompt else SMOKE_SYSTEM_PROMPT
|
|
181
|
+
_sp += build_deny_prompt(spec.deny_commands)
|
|
182
|
+
_at = "Read,Bash"
|
|
173
183
|
else:
|
|
174
184
|
_sp = spec.system_prompt if spec.system_prompt else WORKER_SYSTEM_PROMPT
|
|
175
185
|
_sp += build_deny_prompt(spec.deny_commands)
|
|
176
186
|
# #2169: keep in sync with default_worker_command's identical
|
|
177
187
|
# branch — Monitor is the sanctioned bounded-poll tool for a
|
|
178
|
-
# backgrounded long-running command.
|
|
188
|
+
# backgrounded long-running command. #2301: this grant is for
|
|
189
|
+
# work-shaped legs only — smoke has its own branch above.
|
|
179
190
|
_at = "Read,Edit,Write,Bash,Monitor"
|
|
180
191
|
|
|
181
192
|
if system_prompt is None:
|
|
@@ -485,13 +485,26 @@ class ClaudePtyProvider(Provider):
|
|
|
485
485
|
_sp = spec.system_prompt if spec.system_prompt else MILESTONE_CHAT_SYSTEM_PROMPT
|
|
486
486
|
_sp += build_deny_prompt(MILESTONE_CHAT_DENY_COMMANDS)
|
|
487
487
|
_at = "Read,Bash"
|
|
488
|
+
elif spec.type == "smoke":
|
|
489
|
+
# #2301: keep in sync with default_worker_command's and
|
|
490
|
+
# ClaudeProvider.build_command's identical branch — smoke
|
|
491
|
+
# gets SMOKE_SYSTEM_PROMPT and Read,Bash only, deliberately
|
|
492
|
+
# WITHOUT `Monitor` (an await-a-notification tool: calling it
|
|
493
|
+
# ends the turn, which ends a one-shot leg's session before
|
|
494
|
+
# any wake-up can arrive) and without Edit/Write (a smoke leg
|
|
495
|
+
# validates; it never mutates).
|
|
496
|
+
from coord.smoke import SMOKE_SYSTEM_PROMPT # noqa: PLC0415
|
|
497
|
+
_sp = spec.system_prompt if spec.system_prompt else SMOKE_SYSTEM_PROMPT
|
|
498
|
+
_sp += build_deny_prompt(spec.deny_commands)
|
|
499
|
+
_at = "Read,Bash"
|
|
488
500
|
else:
|
|
489
501
|
_sp = spec.system_prompt if spec.system_prompt else WORKER_SYSTEM_PROMPT
|
|
490
502
|
_sp += build_deny_prompt(spec.deny_commands)
|
|
491
503
|
# #2169: keep in sync with default_worker_command's and
|
|
492
504
|
# ClaudeProvider.build_command's identical branch — Monitor
|
|
493
505
|
# is the sanctioned bounded-poll tool for a backgrounded
|
|
494
|
-
# long-running command.
|
|
506
|
+
# long-running command. #2301: that grant is for *work*-shaped
|
|
507
|
+
# legs only — smoke has its own branch above.
|
|
495
508
|
_at = "Read,Edit,Write,Bash,Monitor"
|
|
496
509
|
|
|
497
510
|
if system_prompt is None:
|
|
@@ -111,13 +111,24 @@ suite off and stopping there prints no marker, so the Test stage records NO \
|
|
|
111
111
|
verdict and re-dispatches; because the ceiling is deterministic, every \
|
|
112
112
|
re-dispatch does exactly the same thing, which is why this loop bills \
|
|
113
113
|
indefinitely. Instead: POLL the backgrounded task to completion from THIS \
|
|
114
|
-
same session, in bounded steps
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
identical 600s wall.
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
114
|
+
same session, in bounded steps, with `BashOutput`/`TaskOutput` and the task \
|
|
115
|
+
id, and read its REAL exit status before you report anything. Do NOT use a \
|
|
116
|
+
foreground `until ! pgrep ...; do sleep ...; done` wait — it hits the \
|
|
117
|
+
identical 600s wall.
|
|
118
|
+
- NEVER USE `Monitor` OR ANY OTHER AWAIT-A-NOTIFICATION TOOL TO WAIT FOR A \
|
|
119
|
+
RESULT (#2301). Those tools work by ending your turn so the harness can wake \
|
|
120
|
+
the model back up once the condition they're watching fires — that only \
|
|
121
|
+
resumes anything in an INTERACTIVE session. This is a one-shot `claude -p` \
|
|
122
|
+
session: ending your turn ends the session itself, permanently, and no \
|
|
123
|
+
notification will ever arrive to resume it. The backgrounded suite you were \
|
|
124
|
+
polling is then reaped mid-run by the coordinator, and you have printed no \
|
|
125
|
+
verdict marker — exactly the silent failure the previous bullet exists to \
|
|
126
|
+
prevent, just reached by a different tool. Only `BashOutput`/`TaskOutput` \
|
|
127
|
+
return synchronously without ending your turn; those are the only \
|
|
128
|
+
correct way to poll a backgrounded task from here. If you genuinely cannot \
|
|
129
|
+
obtain an exit status before you run out of room, print `SMOKE: fail <the \
|
|
130
|
+
smoke command never returned an exit status within this session>` rather \
|
|
131
|
+
than ending mute: a stated verdict is recoverable, silence is not.
|
|
121
132
|
|
|
122
133
|
Where you are:
|
|
123
134
|
- You are in a dedicated git worktree created for this run. Every git command \
|
|
@@ -1134,6 +1134,64 @@ def test_default_worker_command_resume_flag_present() -> None:
|
|
|
1134
1134
|
assert argv[idx + 1] == "ses-abc123"
|
|
1135
1135
|
|
|
1136
1136
|
|
|
1137
|
+
# ── #2301: smoke legs must not hold Monitor (or Edit/Write) ────────────────
|
|
1138
|
+
#
|
|
1139
|
+
# Root cause: smoke fell through to the generic `else` branch and inherited
|
|
1140
|
+
# the #2169 `Monitor` grant meant for *work*-shaped legs. `Monitor` is an
|
|
1141
|
+
# await-a-notification tool — calling it ends the current turn to wait for a
|
|
1142
|
+
# wake-up condition, which only resumes anything in an INTERACTIVE session.
|
|
1143
|
+
# Every coord leg, smoke included, is a one-shot `claude -p` session (#1394):
|
|
1144
|
+
# ending the turn ends the session itself, permanently, before any
|
|
1145
|
+
# notification can arrive. Two real smoke legs did exactly this — reached
|
|
1146
|
+
# `Monitor` via ToolSearch to poll a backgrounded `cargo test`, ended their
|
|
1147
|
+
# turn to "wait" for it, and died 16-24s later with no verdict printed, while
|
|
1148
|
+
# the backgrounded suite was reaped out from under them ~30s after that.
|
|
1149
|
+
|
|
1150
|
+
|
|
1151
|
+
def _smoke_spec(**overrides) -> AssignmentSpec:
|
|
1152
|
+
base = dict(
|
|
1153
|
+
repo_name="api",
|
|
1154
|
+
repo_path="/tmp/repo",
|
|
1155
|
+
issue_number=2301,
|
|
1156
|
+
issue_title="[smoke] t",
|
|
1157
|
+
briefing="b",
|
|
1158
|
+
branch="main",
|
|
1159
|
+
type="smoke",
|
|
1160
|
+
)
|
|
1161
|
+
base.update(overrides)
|
|
1162
|
+
return AssignmentSpec(**base)
|
|
1163
|
+
|
|
1164
|
+
|
|
1165
|
+
def test_default_worker_command_smoke_type_does_not_grant_monitor() -> None:
|
|
1166
|
+
argv = default_worker_command(_smoke_spec())
|
|
1167
|
+
allowed = argv[argv.index("--allowedTools") + 1].split(",")
|
|
1168
|
+
assert "Monitor" not in allowed
|
|
1169
|
+
|
|
1170
|
+
|
|
1171
|
+
def test_default_worker_command_smoke_type_gets_read_bash_only() -> None:
|
|
1172
|
+
"""A smoke leg validates; it never mutates — no Edit/Write either."""
|
|
1173
|
+
argv = default_worker_command(_smoke_spec())
|
|
1174
|
+
allowed = argv[argv.index("--allowedTools") + 1]
|
|
1175
|
+
assert allowed == "Read,Bash"
|
|
1176
|
+
|
|
1177
|
+
|
|
1178
|
+
def test_default_worker_command_smoke_type_uses_smoke_system_prompt() -> None:
|
|
1179
|
+
"""Confirms the smoke branch's default system prompt is
|
|
1180
|
+
coord.smoke.SMOKE_SYSTEM_PROMPT, not the generic WORKER_SYSTEM_PROMPT
|
|
1181
|
+
the old fall-through `else` branch would have used."""
|
|
1182
|
+
from coord.smoke import SMOKE_SYSTEM_PROMPT
|
|
1183
|
+
|
|
1184
|
+
argv = default_worker_command(_smoke_spec())
|
|
1185
|
+
system_prompt = argv[argv.index("--system-prompt") + 1]
|
|
1186
|
+
assert system_prompt.startswith(SMOKE_SYSTEM_PROMPT)
|
|
1187
|
+
|
|
1188
|
+
|
|
1189
|
+
def test_default_worker_command_smoke_type_honours_explicit_system_prompt() -> None:
|
|
1190
|
+
argv = default_worker_command(_smoke_spec(system_prompt="custom smoke prompt"))
|
|
1191
|
+
system_prompt = argv[argv.index("--system-prompt") + 1]
|
|
1192
|
+
assert system_prompt.startswith("custom smoke prompt")
|
|
1193
|
+
|
|
1194
|
+
|
|
1137
1195
|
# ── #1315: structural sealing enforcement (write-guard) ─────────────────────
|
|
1138
1196
|
|
|
1139
1197
|
|
|
@@ -4350,6 +4408,111 @@ class TestCapabilityGates:
|
|
|
4350
4408
|
assert final.status == ADVISORY
|
|
4351
4409
|
server.shutdown()
|
|
4352
4410
|
|
|
4411
|
+
def test_stdin_closed_after_spawn_when_provider_inject_is_false(
|
|
4412
|
+
self, tmp_path: Path
|
|
4413
|
+
) -> None:
|
|
4414
|
+
"""#2306: a provider with capabilities().inject=False (e.g. opencode,
|
|
4415
|
+
which takes its briefing on argv, not stdin) must have its stdin
|
|
4416
|
+
pipe closed right after the initial (possibly empty) write.
|
|
4417
|
+
|
|
4418
|
+
Before the fix, stdin was held open for the process's entire
|
|
4419
|
+
lifetime regardless of provider. A worker that never writes to or
|
|
4420
|
+
reads more from stdin itself (opencode) then blocked forever on its
|
|
4421
|
+
own read of an unclosed pipe that would never see EOF, and was
|
|
4422
|
+
killed by the 600s TTFT watchdog having emitted zero bytes. ``cat``
|
|
4423
|
+
reproduces that shape exactly: it blocks reading stdin until EOF.
|
|
4424
|
+
With stdin closed after the initial write, ``cat`` sees EOF
|
|
4425
|
+
immediately and the assignment finishes well within the test
|
|
4426
|
+
timeout instead of hanging.
|
|
4427
|
+
"""
|
|
4428
|
+
repo = _init_repo(tmp_path / "repo")
|
|
4429
|
+
no_inject_provider = _make_provider(
|
|
4430
|
+
inject=False,
|
|
4431
|
+
# argv-only briefing (like opencode) — nothing more is ever
|
|
4432
|
+
# written to stdin by the harness for this provider.
|
|
4433
|
+
build_argv=["/bin/sh", "-c", "cat >/dev/null; echo done"],
|
|
4434
|
+
initial_input_bytes=b"",
|
|
4435
|
+
)
|
|
4436
|
+
server = AgentServer(
|
|
4437
|
+
machine_name="test",
|
|
4438
|
+
repos=["api"],
|
|
4439
|
+
state_dir=tmp_path / "state",
|
|
4440
|
+
repo_paths={"api": str(repo)},
|
|
4441
|
+
providers={"no-inject": no_inject_provider},
|
|
4442
|
+
)
|
|
4443
|
+
a = server.assign(_spec(repo, provider="no-inject"))
|
|
4444
|
+
# The Popen object is available synchronously once assign() returns
|
|
4445
|
+
# for the non-PTY, no-pull path used here.
|
|
4446
|
+
proc = server._processes.get(a.id)
|
|
4447
|
+
assert proc is not None, "process not recorded"
|
|
4448
|
+
assert proc.stdin is not None and proc.stdin.closed, (
|
|
4449
|
+
"stdin must be closed immediately after spawn for a provider "
|
|
4450
|
+
"with capabilities().inject=False"
|
|
4451
|
+
)
|
|
4452
|
+
# And the worker actually completes — proof the closed pipe gave it
|
|
4453
|
+
# an EOF rather than leaving it to hang until the watchdog kills it.
|
|
4454
|
+
final = server.wait_for(a.id, timeout=5)
|
|
4455
|
+
assert final.status == ADVISORY # no commits made
|
|
4456
|
+
server.shutdown()
|
|
4457
|
+
|
|
4458
|
+
def test_stdin_left_open_after_spawn_when_provider_inject_is_true(
|
|
4459
|
+
self, tmp_path: Path
|
|
4460
|
+
) -> None:
|
|
4461
|
+
"""#2306 regression guard: a provider with capabilities().inject=True
|
|
4462
|
+
(e.g. ClaudeProvider) must still have its stdin left open after
|
|
4463
|
+
spawn — this is the behaviour ``inject_message`` depends on, and it
|
|
4464
|
+
must be bit-for-bit unchanged by the #2306 fix."""
|
|
4465
|
+
repo = _init_repo(tmp_path / "repo")
|
|
4466
|
+
inject_provider = _make_provider(
|
|
4467
|
+
inject=True,
|
|
4468
|
+
build_argv=["/bin/sh", "-c", "read a; read b; echo $b"],
|
|
4469
|
+
)
|
|
4470
|
+
server = AgentServer(
|
|
4471
|
+
machine_name="test",
|
|
4472
|
+
repos=["api"],
|
|
4473
|
+
state_dir=tmp_path / "state",
|
|
4474
|
+
repo_paths={"api": str(repo)},
|
|
4475
|
+
providers={"yes-inject": inject_provider},
|
|
4476
|
+
)
|
|
4477
|
+
a = server.assign(_spec(repo, provider="yes-inject"))
|
|
4478
|
+
proc = server._processes.get(a.id)
|
|
4479
|
+
assert proc is not None, "process not recorded"
|
|
4480
|
+
assert proc.stdin is not None and not proc.stdin.closed, (
|
|
4481
|
+
"stdin must stay open after spawn for a provider with "
|
|
4482
|
+
"capabilities().inject=True"
|
|
4483
|
+
)
|
|
4484
|
+
# inject_message must still work over that open pipe.
|
|
4485
|
+
server.inject_message(a.id, "injected")
|
|
4486
|
+
final = server.wait_for(a.id, timeout=5)
|
|
4487
|
+
assert final.status == ADVISORY
|
|
4488
|
+
server.shutdown()
|
|
4489
|
+
|
|
4490
|
+
def test_stdin_left_open_after_spawn_on_legacy_no_provider_path(
|
|
4491
|
+
self, tmp_path: Path
|
|
4492
|
+
) -> None:
|
|
4493
|
+
"""#2306: when spec.provider is None, ``_spawn`` takes the legacy
|
|
4494
|
+
path where ``provider_obj`` is ``None``. That must be treated as
|
|
4495
|
+
claude/inject-capable (stdin left open), matching
|
|
4496
|
+
``inject_message``'s existing "no provider info => allow" fallback
|
|
4497
|
+
— not closed, which would regress every no-config deployment."""
|
|
4498
|
+
repo = _init_repo(tmp_path / "repo")
|
|
4499
|
+
server = _server(
|
|
4500
|
+
tmp_path,
|
|
4501
|
+
argv=["/bin/sh", "-c", "read a; read b; echo $b"],
|
|
4502
|
+
repo_path=repo,
|
|
4503
|
+
)
|
|
4504
|
+
a = server.assign(_spec(repo)) # no provider → legacy path
|
|
4505
|
+
proc = server._processes.get(a.id)
|
|
4506
|
+
assert proc is not None, "process not recorded"
|
|
4507
|
+
assert proc.stdin is not None and not proc.stdin.closed, (
|
|
4508
|
+
"stdin must stay open after spawn on the legacy (provider_obj "
|
|
4509
|
+
"is None) path"
|
|
4510
|
+
)
|
|
4511
|
+
server.inject_message(a.id, "injected")
|
|
4512
|
+
final = server.wait_for(a.id, timeout=5)
|
|
4513
|
+
assert final.status == ADVISORY
|
|
4514
|
+
server.shutdown()
|
|
4515
|
+
|
|
4353
4516
|
|
|
4354
4517
|
# ── #452: Completed-assignment history cap ─────────────────────────────────────
|
|
4355
4518
|
|
|
@@ -242,6 +242,52 @@ def test_custom_binary() -> None:
|
|
|
242
242
|
assert result[0] == "my-claude"
|
|
243
243
|
|
|
244
244
|
|
|
245
|
+
# ── #2301: the smoke branch, across every call site of the same logic ────────
|
|
246
|
+
|
|
247
|
+
|
|
248
|
+
def test_claude_build_command_smoke_matches_legacy_and_withholds_monitor() -> None:
|
|
249
|
+
"""#2301: ``spec.type == "smoke"`` gets ``SMOKE_SYSTEM_PROMPT`` and
|
|
250
|
+
``Read,Bash`` only.
|
|
251
|
+
|
|
252
|
+
``Monitor`` is deliberately withheld: it is an await-a-notification tool,
|
|
253
|
+
so calling it ends the turn — and a smoke leg is a one-shot ``claude -p``
|
|
254
|
+
session (#1394), where ending the turn ends the session permanently,
|
|
255
|
+
before any wake-up can arrive. Edit/Write are withheld too (a smoke leg
|
|
256
|
+
validates; it never mutates). This must stay in parity with
|
|
257
|
+
``default_worker_command`` — the same logic lives at three call sites and
|
|
258
|
+
#2169 already shipped a drift where only some were updated.
|
|
259
|
+
"""
|
|
260
|
+
from coord.smoke import SMOKE_SYSTEM_PROMPT
|
|
261
|
+
|
|
262
|
+
spec = _make_spec(type="smoke")
|
|
263
|
+
argv = ClaudeProvider().build_command(spec)
|
|
264
|
+
legacy = default_worker_command(spec)
|
|
265
|
+
sp = argv[argv.index("--system-prompt") + 1]
|
|
266
|
+
at = argv[argv.index("--allowedTools") + 1]
|
|
267
|
+
assert sp == legacy[legacy.index("--system-prompt") + 1]
|
|
268
|
+
assert at == legacy[legacy.index("--allowedTools") + 1]
|
|
269
|
+
# Pin the values too, so a *matched* regression on both sides still fails.
|
|
270
|
+
assert sp.startswith(SMOKE_SYSTEM_PROMPT)
|
|
271
|
+
assert at == "Read,Bash"
|
|
272
|
+
assert "Monitor" not in at.split(",")
|
|
273
|
+
|
|
274
|
+
|
|
275
|
+
def test_claude_build_command_smoke_honours_explicit_system_prompt() -> None:
|
|
276
|
+
"""#2301: the smoke branch still respects ``spec.system_prompt`` (the
|
|
277
|
+
dispatcher's per-run prompt) instead of always forcing the default."""
|
|
278
|
+
argv = ClaudeProvider().build_command(
|
|
279
|
+
_make_spec(type="smoke", system_prompt="custom smoke prompt")
|
|
280
|
+
)
|
|
281
|
+
assert argv[argv.index("--system-prompt") + 1].startswith("custom smoke prompt")
|
|
282
|
+
|
|
283
|
+
|
|
284
|
+
def test_claude_build_command_work_still_grants_monitor() -> None:
|
|
285
|
+
"""Scope check for #2301: withholding Monitor from smoke must not have
|
|
286
|
+
taken it away from the generic worker branch (#2169's grant)."""
|
|
287
|
+
argv = ClaudeProvider().build_command(_make_spec(type="work"))
|
|
288
|
+
assert "Monitor" in argv[argv.index("--allowedTools") + 1].split(",")
|
|
289
|
+
|
|
290
|
+
|
|
245
291
|
# ── #1706: definition model / env / extra_args threading ──────────────────────
|
|
246
292
|
|
|
247
293
|
|
|
@@ -199,7 +199,7 @@ def test_pty_build_command_branches_match_claude_for_plan_type() -> None:
|
|
|
199
199
|
assert argv[argv.index("--allowedTools") + 1] == legacy_at
|
|
200
200
|
|
|
201
201
|
|
|
202
|
-
@pytest.mark.parametrize("spec_type", ["work", "review", "
|
|
202
|
+
@pytest.mark.parametrize("spec_type", ["work", "review", "conflict-fix", "fix"])
|
|
203
203
|
def test_pty_build_command_branches_match_claude_for_work_type(spec_type: str) -> None:
|
|
204
204
|
"""#2169: the generic-worker (``else``) branch must stay in parity too.
|
|
205
205
|
|
|
@@ -210,6 +210,12 @@ def test_pty_build_command_branches_match_claude_for_work_type(spec_type: str) -
|
|
|
210
210
|
system-prompt/allowed-tools logic and must not drift from it — this
|
|
211
211
|
regression-guards the drift where only two of the three call sites
|
|
212
212
|
were updated to add ``Monitor``.
|
|
213
|
+
|
|
214
|
+
``smoke`` used to be parametrized here because it fell through the same
|
|
215
|
+
``else`` branch; #2301 gave it a branch of its own, so its parity is
|
|
216
|
+
guarded by
|
|
217
|
+
:func:`test_pty_build_command_smoke_branch_matches_claude_and_withholds_monitor`
|
|
218
|
+
below instead.
|
|
213
219
|
"""
|
|
214
220
|
spec = _make_spec(type=spec_type)
|
|
215
221
|
argv = ClaudePtyProvider().build_command(spec)
|
|
@@ -221,6 +227,45 @@ def test_pty_build_command_branches_match_claude_for_work_type(spec_type: str) -
|
|
|
221
227
|
assert "Monitor" in argv[argv.index("--allowedTools") + 1]
|
|
222
228
|
|
|
223
229
|
|
|
230
|
+
def test_pty_build_command_smoke_branch_matches_claude_and_withholds_monitor() -> None:
|
|
231
|
+
"""#2301: the smoke branch is the *third* call site of the same logic.
|
|
232
|
+
|
|
233
|
+
``default_worker_command`` and ``ClaudeProvider.build_command`` both give
|
|
234
|
+
``spec.type == "smoke"`` its own branch — ``SMOKE_SYSTEM_PROMPT`` plus
|
|
235
|
+
``Read,Bash`` only, deliberately withholding ``Monitor`` (an await-a-
|
|
236
|
+
notification tool that ends a one-shot ``claude -p`` leg's session before
|
|
237
|
+
any wake-up can arrive) and Edit/Write (a smoke leg validates; it never
|
|
238
|
+
mutates). ``ClaudePtyProvider.build_command`` must not drift from them —
|
|
239
|
+
this regression-guards exactly the drift #2169 hit, where only two of the
|
|
240
|
+
three call sites were updated.
|
|
241
|
+
"""
|
|
242
|
+
from coord.smoke import SMOKE_SYSTEM_PROMPT
|
|
243
|
+
|
|
244
|
+
spec = _make_spec(type="smoke")
|
|
245
|
+
argv = ClaudePtyProvider().build_command(spec)
|
|
246
|
+
legacy = default_worker_command(spec)
|
|
247
|
+
legacy_sp = legacy[legacy.index("--system-prompt") + 1]
|
|
248
|
+
legacy_at = legacy[legacy.index("--allowedTools") + 1]
|
|
249
|
+
pty_sp = argv[argv.index("--system-prompt") + 1]
|
|
250
|
+
pty_at = argv[argv.index("--allowedTools") + 1]
|
|
251
|
+
assert pty_sp == legacy_sp
|
|
252
|
+
assert pty_at == legacy_at
|
|
253
|
+
# Pin the values too, so a *matched* regression on both sides still fails.
|
|
254
|
+
assert pty_sp.startswith(SMOKE_SYSTEM_PROMPT)
|
|
255
|
+
assert pty_at == "Read,Bash"
|
|
256
|
+
assert "Monitor" not in pty_at.split(",")
|
|
257
|
+
|
|
258
|
+
|
|
259
|
+
def test_pty_build_command_smoke_honours_explicit_system_prompt() -> None:
|
|
260
|
+
"""#2301: the new smoke branch must still respect ``spec.system_prompt``
|
|
261
|
+
(the dispatcher's per-run briefing prompt) rather than always forcing
|
|
262
|
+
``SMOKE_SYSTEM_PROMPT`` — same precedence as every other branch."""
|
|
263
|
+
argv = ClaudePtyProvider().build_command(
|
|
264
|
+
_make_spec(type="smoke", system_prompt="custom smoke prompt")
|
|
265
|
+
)
|
|
266
|
+
assert argv[argv.index("--system-prompt") + 1].startswith("custom smoke prompt")
|
|
267
|
+
|
|
268
|
+
|
|
224
269
|
# ── ClaudePtyProvider: capabilities ──────────────────────────────────────────
|
|
225
270
|
|
|
226
271
|
|
|
@@ -474,6 +474,45 @@ def test_smoke_system_prompt_tells_the_worker_to_poll_a_backgrounded_run() -> No
|
|
|
474
474
|
assert not any(line.startswith("SMOKE:") for line in prompt.splitlines())
|
|
475
475
|
|
|
476
476
|
|
|
477
|
+
# ── #2301: Monitor is an await-a-notification tool — it ends a headless leg ─
|
|
478
|
+
|
|
479
|
+
|
|
480
|
+
def test_smoke_system_prompt_does_not_recommend_monitor_for_polling() -> None:
|
|
481
|
+
"""#2272's own fix text used to name `Monitor` as a sanctioned polling
|
|
482
|
+
option alongside `BashOutput`/`TaskOutput`. Two real smoke legs took that
|
|
483
|
+
literally on 2026-08-15: reached `Monitor` via ToolSearch, called it to
|
|
484
|
+
"wait" for a backgrounded `cargo test`, and ended their turn — which IS
|
|
485
|
+
the end of a one-shot `claude -p` session (#1394). Both legs died in
|
|
486
|
+
16-24s, before the suite even finished compiling, with no verdict ever
|
|
487
|
+
printed; the backgrounded suite was reaped ~30s later by the coordinator.
|
|
488
|
+
`Monitor` must not appear as a recommended polling tool in this prompt
|
|
489
|
+
any more — `BashOutput`/`TaskOutput` still do the job without ending the
|
|
490
|
+
turn."""
|
|
491
|
+
prompt = SMOKE_SYSTEM_PROMPT
|
|
492
|
+
assert "BashOutput" in prompt
|
|
493
|
+
assert "TaskOutput" in prompt
|
|
494
|
+
# The old phrasing offered Monitor as an alternative poll mechanism
|
|
495
|
+
# ("...with the id, or `Monitor`)") right next to BashOutput/TaskOutput
|
|
496
|
+
# — that specific recommendation must be gone.
|
|
497
|
+
assert "or `Monitor`" not in prompt
|
|
498
|
+
|
|
499
|
+
|
|
500
|
+
def test_smoke_system_prompt_states_monitor_ends_a_headless_session() -> None:
|
|
501
|
+
"""Positive statement, not just an absence: the prompt must explain WHY
|
|
502
|
+
Monitor (and tools like it) are wrong here, or the next worker reaches
|
|
503
|
+
for it again under a different name — mirrors the #2158 lesson that
|
|
504
|
+
WORKER_SYSTEM_PROMPT's ONE-SHOT section bakes in for work legs."""
|
|
505
|
+
prompt = SMOKE_SYSTEM_PROMPT
|
|
506
|
+
assert "#2301" in prompt
|
|
507
|
+
assert "Monitor" in prompt
|
|
508
|
+
lowered = prompt.lower()
|
|
509
|
+
assert "await-a-notification" in lowered
|
|
510
|
+
assert "one-shot" in lowered
|
|
511
|
+
# The actual mechanism, not just "don't do this": ending the turn to
|
|
512
|
+
# await a notification ends the whole headless session, permanently.
|
|
513
|
+
assert "ending your turn ends the session itself" in lowered
|
|
514
|
+
|
|
515
|
+
|
|
477
516
|
def test_briefing_tells_the_worker_to_poll_a_backgrounded_run() -> None:
|
|
478
517
|
"""The briefing carries the same instruction as the system prompt — it is
|
|
479
518
|
what the worker re-reads while deciding what to do next."""
|
|
@@ -124,15 +124,30 @@ def test_default_worker_command_grants_monitor_for_work_type() -> None:
|
|
|
124
124
|
assert tool in allowed.split(",")
|
|
125
125
|
|
|
126
126
|
|
|
127
|
-
@pytest.mark.parametrize("spec_type", ["review", "fix", "
|
|
127
|
+
@pytest.mark.parametrize("spec_type", ["review", "fix", "conflict-fix"])
|
|
128
128
|
def test_default_worker_command_other_write_types_also_get_monitor(spec_type: str) -> None:
|
|
129
|
-
"""`review`/`fix`/`
|
|
130
|
-
|
|
129
|
+
"""`review`/`fix`/`conflict-fix` all fall through the same `else` branch
|
|
130
|
+
as `work` — confirm the grant isn't accidentally work-only.
|
|
131
|
+
|
|
132
|
+
`smoke` used to be in this list too, but #2301 gave it its own branch
|
|
133
|
+
(see test_default_worker_command_smoke_type_withholds_monitor below) —
|
|
134
|
+
smoke legs are one-shot sessions where an await-a-notification tool
|
|
135
|
+
like `Monitor` ends the session before any wake-up can arrive."""
|
|
131
136
|
argv = default_worker_command(_work_spec(type=spec_type))
|
|
132
137
|
allowed = argv[argv.index("--allowedTools") + 1]
|
|
133
138
|
assert "Monitor" in allowed.split(",")
|
|
134
139
|
|
|
135
140
|
|
|
141
|
+
def test_default_worker_command_smoke_type_withholds_monitor() -> None:
|
|
142
|
+
"""#2301: a smoke leg is a one-shot `claude -p` session (#1394) — calling
|
|
143
|
+
`Monitor` there ends the session permanently before any notification can
|
|
144
|
+
arrive, silently killing a backgrounded smoke suite mid-run. Smoke must
|
|
145
|
+
not hold Monitor, or Edit/Write (it validates; it never mutates)."""
|
|
146
|
+
argv = default_worker_command(_work_spec(type="smoke"))
|
|
147
|
+
allowed = argv[argv.index("--allowedTools") + 1]
|
|
148
|
+
assert allowed == "Read,Bash"
|
|
149
|
+
|
|
150
|
+
|
|
136
151
|
def test_mock_author_type_does_not_gain_monitor() -> None:
|
|
137
152
|
"""Scope check: the Monitor grant is deliberately added to the generic
|
|
138
153
|
worker branch only, not copy-pasted onto every Edit-capable type."""
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{code_coordinator-0.5.107 → code_coordinator-0.5.109}/code_coordinator.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{code_coordinator-0.5.107 → code_coordinator-0.5.109}/code_coordinator.egg-info/entry_points.txt
RENAMED
|
File without changes
|