code-coordinator 0.5.113__tar.gz → 0.5.115__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.113 → code_coordinator-0.5.115}/PKG-INFO +1 -1
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/commands/dispatch.py +27 -10
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/config.py +59 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/diagnose.py +6 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/github_ops.py +69 -1
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/providers/opencode.py +96 -23
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_config.py +87 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_diagnose.py +37 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_github_ops.py +187 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_providers.py +34 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_retry_advisory_1606.py +9 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/.github/workflows/release-tui.yml +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/.gitignore +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/CLAUDE.md +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/GOAL.md +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/LICENSE +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/MANIFEST.in +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/README.md +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/__init__.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/agent.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/audit.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/block_log.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/board_bool_guard.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/board_service.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/brain.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/claim.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/cli.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/client.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/comments.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dao.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/.gitignore +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/components.json +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/dist/assets/Gallery-BoKs3mpY.js +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/dist/assets/Terminal-CEsP08iX.js +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/dist/assets/index-CDHPlB6k.js +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/dist/index.html +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/dist/sw.js +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/eslint.config.js +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/index.html +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/package-lock.json +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/package.json +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/playwright.config.ts +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/postcss.config.js +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/App.tsx +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/api/client.ts +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/api/generated.ts +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/index.css +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/main.tsx +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/test-setup.ts +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/tailwind.config.js +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/tsconfig.json +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/tsconfig.node.json +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dashboard/webapp/vite.config.ts +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/db.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/deps.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/drive.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/events.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/filelock.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/freshness.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/gates.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/goal.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/health/context.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/health/models.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/health/render.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/health/units.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/hooks.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/interactive.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/models.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/network.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/notify.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/openapi.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/parentage.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/plans.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/progress.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/release_window.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/reports.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/review.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/smoke.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/split_work.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/state.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/test_author.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/test_report.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/usage.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/install-agent.sh +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/pyproject.toml +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/setup.cfg +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/__init__.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/acceptance/ms-33/audit_1039.rs +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/acceptance/ms-33/contract.md +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/acceptance/ms-33/manifest.yml +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/acceptance/ms-38/contract.md +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/acceptance/ms-38/manifest.yml +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/conftest.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_db.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_events.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_init.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_models.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_network.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_no_direct_gh_calls.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_review.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_session.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_split.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_state.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/Cargo.lock +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/Cargo.toml +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/cargo-config-local-quadraui.toml.example +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/src/app/audit.rs +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/src/app/chat.rs +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/src/app/data.rs +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/src/app/dialogs.rs +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/src/app/drive.rs +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/src/app/drive_queue.rs +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/src/app/escalation.rs +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/src/app/events.rs +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/src/app/fixtures.rs +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/src/app/fleet_health.rs +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/src/app/fleet_sessions.rs +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/src/app/fleet_terminals.rs +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/src/app/format.rs +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/src/app/milestone_dag.rs +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/src/app/mod.rs +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/src/app/msv.rs +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/src/app/pipeline.rs +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/src/app/plans.rs +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/src/app/render.rs +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/src/app/reports.rs +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/src/app/sessions.rs +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/src/app/settings_ui.rs +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/src/app/sidebar.rs +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/src/app/terminal.rs +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/src/app/tests.rs +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/src/app/types.rs +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/src/app/workspace.rs +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/src/bin/gtk.rs +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/src/commands.rs +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/src/lib.rs +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/src/main.rs +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/src/settings.rs +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/tests/acceptance.rs +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/tests/cli.rs +0 -0
- {code_coordinator-0.5.113 → code_coordinator-0.5.115}/tui/tests/fixtures/board_sample.json +0 -0
|
@@ -1873,18 +1873,35 @@ def retry(assignment_id: str, config_path: Path, acknowledge_cost: bool = False)
|
|
|
1873
1873
|
# an independent inline copy of the same "branch empty → 0, repo
|
|
1874
1874
|
# missing → None, else ask GitHub" logic.
|
|
1875
1875
|
ahead = github_ops.branch_commits_ahead_for_assignment(assignment, cfg)
|
|
1876
|
-
if ahead
|
|
1877
|
-
|
|
1878
|
-
|
|
1879
|
-
|
|
1880
|
-
|
|
1876
|
+
if ahead is None:
|
|
1877
|
+
# #2324: a genuine lookup failure (network error, auth, rate
|
|
1878
|
+
# limit, repo missing) is NOT evidence that commits exist — it's
|
|
1879
|
+
# just an unanswered question. Don't assert the #1357
|
|
1880
|
+
# false-positive shape or point at `--accept-advisory`, which
|
|
1881
|
+
# assumes real commits are sitting on the branch; nothing here
|
|
1882
|
+
# established that. Say the lookup failed and name what to
|
|
1883
|
+
# check instead. (A confirmed 404 on the head branch is handled
|
|
1884
|
+
# above this `is None` check — `branch_commits_ahead_for_assignment`
|
|
1885
|
+
# reads that as 0, not None.)
|
|
1886
|
+
click.echo(
|
|
1887
|
+
f"error: assignment {assignment_id} is 'advisory', and its "
|
|
1888
|
+
"commit count could not be confirmed (gh lookup failed) — "
|
|
1889
|
+
"coord retry only re-dispatches a GENUINE zero-commit "
|
|
1890
|
+
"advisory, and a failed lookup isn't confirmation either "
|
|
1891
|
+
"way. Check `gh api` access and the recorded branch/repo, "
|
|
1892
|
+
"then retry; or inspect by hand: coord log "
|
|
1893
|
+
f"{assignment_id}.",
|
|
1894
|
+
err=True,
|
|
1881
1895
|
)
|
|
1896
|
+
sys.exit(1)
|
|
1897
|
+
if ahead != 0:
|
|
1882
1898
|
click.echo(
|
|
1883
|
-
f"error: assignment {assignment_id} is 'advisory', and
|
|
1884
|
-
"
|
|
1885
|
-
"
|
|
1886
|
-
"signature instead; use `coord
|
|
1887
|
-
"proceed with the existing
|
|
1899
|
+
f"error: assignment {assignment_id} is 'advisory', and "
|
|
1900
|
+
f"{ahead} commit(s) are present on its branch — coord retry "
|
|
1901
|
+
"only re-dispatches a GENUINE zero-commit advisory. This is "
|
|
1902
|
+
"the #1357 false-positive signature instead; use `coord "
|
|
1903
|
+
"drive --accept-advisory` to proceed with the existing "
|
|
1904
|
+
"commits, or inspect by hand.",
|
|
1888
1905
|
err=True,
|
|
1889
1906
|
)
|
|
1890
1907
|
sys.exit(1)
|
|
@@ -3321,6 +3321,51 @@ def _expand_env_vars(value: str) -> str:
|
|
|
3321
3321
|
return _ENV_VAR_RE.sub(_replace, value)
|
|
3322
3322
|
|
|
3323
3323
|
|
|
3324
|
+
#: Matches exactly what opencode's own ``OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX``
|
|
3325
|
+
#: parser (#2321) accepts as a *string form* of a number: one or more ASCII
|
|
3326
|
+
#: digits, nothing else — no sign, no decimal point, no whitespace, no
|
|
3327
|
+
#: underscore digit-grouping. Combined with the ``> 0`` check below this
|
|
3328
|
+
#: mirrors opencode's own rule (integer, ``> 0``) closely enough to reject
|
|
3329
|
+
#: every value opencode is documented to silently discard: ``"131072 "``
|
|
3330
|
+
#: (trailing whitespace), ``"131_072"`` (underscore grouping — Python's
|
|
3331
|
+
#: ``int()`` would accept this but JS ``Number()`` coercion does not),
|
|
3332
|
+
#: ``"0"`` (fails ``> 0``), ``"1.5"`` (decimal point), and ``"unlimited"``
|
|
3333
|
+
#: (non-numeric).
|
|
3334
|
+
_OPENCODE_OUTPUT_TOKEN_MAX_RE = re.compile(r"[0-9]+")
|
|
3335
|
+
|
|
3336
|
+
#: The env var name gated by :data:`_OPENCODE_OUTPUT_TOKEN_MAX_RE` — kept as
|
|
3337
|
+
#: a constant rather than a literal so config.py and opencode.py can be
|
|
3338
|
+
#: grepped for the exact same string (deliberately NOT imported from
|
|
3339
|
+
#: coord.providers.opencode: config.py must not depend on provider modules).
|
|
3340
|
+
OPENCODE_OUTPUT_TOKEN_MAX_ENV_VAR = "OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX"
|
|
3341
|
+
|
|
3342
|
+
|
|
3343
|
+
def _validate_opencode_output_token_max_env(value: str, *, context: str) -> None:
|
|
3344
|
+
"""Reject an ``OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX`` override that
|
|
3345
|
+
opencode's own parser would silently discard (#2321).
|
|
3346
|
+
|
|
3347
|
+
opencode's env-var parser demands an integer ``> 0``; anything else
|
|
3348
|
+
(a non-numeric string, a decimal, a value with surrounding whitespace
|
|
3349
|
+
or underscore digit-grouping, zero or negative) maps to ``undefined``
|
|
3350
|
+
internally, which silently restores opencode's 32,000-token default
|
|
3351
|
+
with **no warning anywhere** — exactly the failure mode #2321 exists
|
|
3352
|
+
to end. Config-parse time is the only point where "silently reverted
|
|
3353
|
+
to 32,000" can be turned into a loud, actionable error instead of a
|
|
3354
|
+
truncated worker run discovered hours later.
|
|
3355
|
+
|
|
3356
|
+
Raises:
|
|
3357
|
+
ConfigError: when *value* is not a bare positive-integer string.
|
|
3358
|
+
"""
|
|
3359
|
+
if not _OPENCODE_OUTPUT_TOKEN_MAX_RE.fullmatch(value) or int(value) <= 0:
|
|
3360
|
+
raise ConfigError(
|
|
3361
|
+
f"{context} must be a positive integer string with no "
|
|
3362
|
+
"surrounding whitespace, sign, decimal point, or underscores "
|
|
3363
|
+
"(opencode's OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX parser "
|
|
3364
|
+
"silently discards anything else and reverts to its 32000 "
|
|
3365
|
+
f"default) — got {value!r}"
|
|
3366
|
+
)
|
|
3367
|
+
|
|
3368
|
+
|
|
3324
3369
|
_PORTAL_PLAIN_STR_FIELDS = ("base_url",)
|
|
3325
3370
|
_PORTAL_SECRET_STR_FIELDS = ("bridge_client_id", "bridge_client_secret")
|
|
3326
3371
|
|
|
@@ -3471,6 +3516,20 @@ def _parse_providers(raw: Any) -> ProvidersConfig:
|
|
|
3471
3516
|
# Expand ${VAR} in env values.
|
|
3472
3517
|
env: dict[str, str] = {k: _expand_env_vars(v) for k, v in env_raw.items()}
|
|
3473
3518
|
|
|
3519
|
+
# #2321: an operator override of opencode's output-token-cap knob
|
|
3520
|
+
# must be a value opencode's own parser will actually honour — see
|
|
3521
|
+
# _validate_opencode_output_token_max_env for why a bad value here
|
|
3522
|
+
# (e.g. a trailing space) is worse than a normal type error: it
|
|
3523
|
+
# doesn't fail, it silently reverts to the 32000 default.
|
|
3524
|
+
if OPENCODE_OUTPUT_TOKEN_MAX_ENV_VAR in env:
|
|
3525
|
+
_validate_opencode_output_token_max_env(
|
|
3526
|
+
env[OPENCODE_OUTPUT_TOKEN_MAX_ENV_VAR],
|
|
3527
|
+
context=(
|
|
3528
|
+
f"providers.definitions[{def_name!r}].env"
|
|
3529
|
+
f"[{OPENCODE_OUTPUT_TOKEN_MAX_ENV_VAR!r}]"
|
|
3530
|
+
),
|
|
3531
|
+
)
|
|
3532
|
+
|
|
3474
3533
|
extra_args_raw = def_raw.get("extra_args", []) or []
|
|
3475
3534
|
if not isinstance(extra_args_raw, list) or not all(
|
|
3476
3535
|
isinstance(a, str) for a in extra_args_raw
|
|
@@ -1069,6 +1069,12 @@ def _work_advisory_commits_ahead(assignment: "Assignment", config: "Config") ->
|
|
|
1069
1069
|
zero-commit gate uses) rather than a local git checkout — `coord
|
|
1070
1070
|
diagnose` runs on the daemon host, which has no guarantee of a local
|
|
1071
1071
|
clone of every worker's branch.
|
|
1072
|
+
|
|
1073
|
+
#2324: ``None`` here means the lookup genuinely couldn't be confirmed
|
|
1074
|
+
(network/auth/rate-limit/repo-missing) — a head branch GitHub positively
|
|
1075
|
+
404s, with the base branch still resolving, comes back as ``0`` instead
|
|
1076
|
+
(see :func:`coord.github_ops.branch_commits_ahead`), since a deleted
|
|
1077
|
+
branch is proof nothing was pushed, not an unknown.
|
|
1072
1078
|
"""
|
|
1073
1079
|
from coord import github_ops # noqa: PLC0415
|
|
1074
1080
|
|
|
@@ -1775,6 +1775,58 @@ def get_compare_files(repo: str, base: str, head: str) -> list[str] | None:
|
|
|
1775
1775
|
return [line for line in (ln.strip() for ln in raw.splitlines()) if line]
|
|
1776
1776
|
|
|
1777
1777
|
|
|
1778
|
+
def _gh_ref_confirmed_missing(exc: Exception) -> bool:
|
|
1779
|
+
"""True when *exc* (raised by ``_gh`` for a ``gh api`` ref/compare call)
|
|
1780
|
+
is GitHub positively saying "no such ref" — a 404 — as opposed to an
|
|
1781
|
+
auth, rate-limit, network, or other transient failure that merely looks
|
|
1782
|
+
like one from the caller's point of view.
|
|
1783
|
+
|
|
1784
|
+
#2324: deliberately narrower than the "http 4" match
|
|
1785
|
+
:func:`branch_exists_on_remote` uses (which folds 401/403/429 in with
|
|
1786
|
+
404, and fails open elsewhere for that function's own reasons). This is
|
|
1787
|
+
the one call site where conflating "confirmed gone" with "auth/rate-limit
|
|
1788
|
+
blip" would make `coord retry`'s zero-commit gate treat a locked-out
|
|
1789
|
+
``gh`` as proof a branch was deleted and race ahead re-dispatching real,
|
|
1790
|
+
unconfirmed work — so it checks :func:`_is_transient_error`'s keywords
|
|
1791
|
+
first and only then looks for an explicit "404"/"not found" signal.
|
|
1792
|
+
"""
|
|
1793
|
+
if _is_transient_error(exc):
|
|
1794
|
+
return False
|
|
1795
|
+
msg = str(exc).lower()
|
|
1796
|
+
return "404" in msg or "not found" in msg
|
|
1797
|
+
|
|
1798
|
+
|
|
1799
|
+
def _head_branch_confirmed_deleted(repo: str, base: str, branch: str) -> bool:
|
|
1800
|
+
"""True when *branch* 404s on *repo* while *base* still resolves.
|
|
1801
|
+
|
|
1802
|
+
#2324: :func:`branch_commits_ahead`'s three-dot compare call 404s
|
|
1803
|
+
identically whether it's the head branch that's gone, the base branch,
|
|
1804
|
+
or something else entirely obscures both — the compare error text alone
|
|
1805
|
+
can't tell them apart. This asks each ref directly (the same
|
|
1806
|
+
``git/refs/heads`` lookup :func:`branch_exists_on_remote` uses) so a
|
|
1807
|
+
branch that was genuinely deleted — the normal cleanup after a
|
|
1808
|
+
zero-commit worker exit — reads as "confirmed gone" instead of being
|
|
1809
|
+
lumped in with an unrelated failure and reported as unknown.
|
|
1810
|
+
|
|
1811
|
+
Only returns True on the one shape that's actually conclusive: the head
|
|
1812
|
+
ref 404s (via :func:`_gh_ref_confirmed_missing`) *and* the base ref
|
|
1813
|
+
still resolves. Any other combination — head resolves fine, head lookup
|
|
1814
|
+
itself fails inconclusively, or base can't be confirmed either — returns
|
|
1815
|
+
False so the caller keeps its existing fail-closed ``None``.
|
|
1816
|
+
"""
|
|
1817
|
+
try:
|
|
1818
|
+
_gh("api", f"repos/{repo}/git/refs/heads/{branch}")
|
|
1819
|
+
return False # head resolves fine; compare failed for some other reason
|
|
1820
|
+
except RuntimeError as exc:
|
|
1821
|
+
if not _gh_ref_confirmed_missing(exc):
|
|
1822
|
+
return False # inconclusive — do not guess
|
|
1823
|
+
try:
|
|
1824
|
+
_gh("api", f"repos/{repo}/git/refs/heads/{base}")
|
|
1825
|
+
except RuntimeError:
|
|
1826
|
+
return False # base itself unconfirmable — don't trust the read
|
|
1827
|
+
return True # head confirmed gone, base confirmed present
|
|
1828
|
+
|
|
1829
|
+
|
|
1778
1830
|
def branch_commits_ahead(repo: str, base: str, branch: str) -> int | None:
|
|
1779
1831
|
"""Commits *branch* is ahead of *base* on the remote, or ``None``.
|
|
1780
1832
|
|
|
@@ -1790,6 +1842,16 @@ def branch_commits_ahead(repo: str, base: str, branch: str) -> int | None:
|
|
|
1790
1842
|
real reviews. This is the opposite polarity from
|
|
1791
1843
|
:func:`branch_is_fully_merged`, which returns a plain ``False`` on error
|
|
1792
1844
|
because *its* fail-safe direction is "keep the PR open".
|
|
1845
|
+
|
|
1846
|
+
#2324 exception: when the compare call fails, a *confirmed* 404 on the
|
|
1847
|
+
head branch while the base branch still resolves
|
|
1848
|
+
(:func:`_head_branch_confirmed_deleted`) returns ``0``, not ``None`` — a
|
|
1849
|
+
head ref that GitHub positively says doesn't exist is the strongest
|
|
1850
|
+
possible evidence nothing was ever pushed to it (a branch carrying
|
|
1851
|
+
commits would still be there). Every other failure shape — the compare
|
|
1852
|
+
call fails for a reason that isn't a confirmed head-branch 404, or the
|
|
1853
|
+
follow-up ref checks themselves are inconclusive — keeps the existing
|
|
1854
|
+
fail-closed ``None``.
|
|
1793
1855
|
"""
|
|
1794
1856
|
if not branch or not base:
|
|
1795
1857
|
return None
|
|
@@ -1799,6 +1861,8 @@ def branch_commits_ahead(repo: str, base: str, branch: str) -> int | None:
|
|
|
1799
1861
|
raw = _gh("api", f"repos/{repo}/compare/{base}...{branch}")
|
|
1800
1862
|
cmp = json.loads(raw)
|
|
1801
1863
|
except Exception: # noqa: BLE001 — unknown, not zero
|
|
1864
|
+
if _head_branch_confirmed_deleted(repo, base, branch):
|
|
1865
|
+
return 0
|
|
1802
1866
|
return None
|
|
1803
1867
|
if not isinstance(cmp, dict):
|
|
1804
1868
|
return None
|
|
@@ -1832,7 +1896,11 @@ def branch_commits_ahead_for_assignment(assignment: Any, config: Any) -> int | N
|
|
|
1832
1896
|
that ``config`` doesn't know about returns ``None`` ("cannot confirm"),
|
|
1833
1897
|
never a bare 0, matching :func:`branch_commits_ahead`'s own fail-closed
|
|
1834
1898
|
polarity: an unconfirmable commit count must never be silently read as
|
|
1835
|
-
"empty branch, safe to touch"
|
|
1899
|
+
"empty branch, safe to touch" — *except* the one case
|
|
1900
|
+
:func:`branch_commits_ahead` itself carves out (#2324): a recorded
|
|
1901
|
+
branch whose head ref GitHub positively 404s, with the base branch still
|
|
1902
|
+
resolving, comes back as 0 rather than ``None`` — a deleted branch
|
|
1903
|
+
proves nothing was pushed at least as conclusively as a blank one does.
|
|
1836
1904
|
"""
|
|
1837
1905
|
branch = (getattr(assignment, "branch", None) or "").strip()
|
|
1838
1906
|
if not branch:
|
|
@@ -76,6 +76,12 @@ Differences from :class:`~.claude.ClaudeProvider`:
|
|
|
76
76
|
* ``env()`` always sets ``OPENCODE_CONFIG_DIR`` (agent-file discovery, see
|
|
77
77
|
above) and ``OPENCODE_CONFIG`` (the OpenRouter upstream-routing pin, see
|
|
78
78
|
``coord/agents/opencode/routing.jsonc`` and :data:`ROUTING_PIN_PATH`).
|
|
79
|
+
* ``env()`` also seeds ``OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX`` to
|
|
80
|
+
:data:`OUTPUT_TOKEN_MAX_DEFAULT` (#2321) — unlike the two variables
|
|
81
|
+
above, this one *is* operator-overridable (it's a tuning knob, not a
|
|
82
|
+
safety mechanism); see :meth:`env`'s docstring for why it sits on the
|
|
83
|
+
opposite side of ``self._env`` from ``OPENCODE_CONFIG_DIR``/
|
|
84
|
+
``OPENCODE_CONFIG``.
|
|
79
85
|
"""
|
|
80
86
|
|
|
81
87
|
from __future__ import annotations
|
|
@@ -148,6 +154,46 @@ AGENTS_ROOT = Path(__file__).resolve().parent.parent / "agents" / "opencode"
|
|
|
148
154
|
#: onto the worker's environment as ``OPENCODE_CONFIG`` by :meth:`env`.
|
|
149
155
|
ROUTING_PIN_PATH = AGENTS_ROOT / "routing.jsonc"
|
|
150
156
|
|
|
157
|
+
#: Default value for ``OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX`` (#2321).
|
|
158
|
+
#:
|
|
159
|
+
#: opencode caps every request's output tokens at 32,000 (its internal
|
|
160
|
+
#: ``OY = 32000`` default) unless this environment variable overrides it —
|
|
161
|
+
#: and on a reasoning model that 32,000-token budget is *shared* with the
|
|
162
|
+
#: model's own reasoning, so a long reasoning block can consume the whole
|
|
163
|
+
#: cap before a single tool call is emitted. This is not hypothetical:
|
|
164
|
+
#: space-invaders#1 (``8c95182b0749``) spent all 32,000 tokens on one
|
|
165
|
+
#: 113 KB reasoning block, was truncated (``"reason":"length"``), emitted
|
|
166
|
+
#: no tool call, and exited 0 with nothing on disk — the run this issue is
|
|
167
|
+
#: named for.
|
|
168
|
+
#:
|
|
169
|
+
#: opencode computes the *effective* cap as
|
|
170
|
+
#: ``min(model.limit.output, $OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX)`` —
|
|
171
|
+
#: it is a ceiling suggestion, not a per-model override. Raising it can
|
|
172
|
+
#: never push a model's output above what that model's own
|
|
173
|
+
#: ``limit.output`` allows; it can only stop opencode's own 32,000
|
|
174
|
+
#: default from clamping a model that allows more. That makes a single
|
|
175
|
+
#: generous constant safe across every model dispatched through this
|
|
176
|
+
#: provider — no need to look up ``limit.output`` per model at dispatch
|
|
177
|
+
#: time.
|
|
178
|
+
#:
|
|
179
|
+
#: Chosen as 384,000 — the largest ``limit.output`` among the opencode
|
|
180
|
+
#: model definitions coord currently routes through (``oc-cheap`` /
|
|
181
|
+
#: ``opencode/deepseek-v4-flash`` and ``oc-heavy`` /
|
|
182
|
+
#: ``opencode/deepseek-v4-pro``, both 384,000; ``oc-mid`` /
|
|
183
|
+
#: ``opencode/glm-5.2`` is lower at 131,072 and is naturally clamped to
|
|
184
|
+
#: its own true ceiling by the ``min()`` above — never pushed past it).
|
|
185
|
+
#:
|
|
186
|
+
#: Both fleet binaries already read this variable (1.18.11 on dellserver —
|
|
187
|
+
#: the machine that hit the space-invaders#1 truncation — and 1.18.12 on
|
|
188
|
+
#: precision), and it is not gated behind ``OPENCODE_EXPERIMENTAL`` the
|
|
189
|
+
#: way other ``experimental*``-named flags are (that gating uses a
|
|
190
|
+
#: different internal helper; this flag's parser reads the env var
|
|
191
|
+
#: directly, unconditionally). No version-floor probe is needed here and
|
|
192
|
+
#: none should be added later on speculation: on a binary that predates
|
|
193
|
+
#: this flag it is simply inert and the cap silently stays at 32,000 —
|
|
194
|
+
#: never a hard failure.
|
|
195
|
+
OUTPUT_TOKEN_MAX_DEFAULT = 384_000
|
|
196
|
+
|
|
151
197
|
|
|
152
198
|
class OpenCodeAgentNotFoundError(RuntimeError):
|
|
153
199
|
"""Raised when no committed opencode agent definition exists for a
|
|
@@ -641,35 +687,62 @@ class OpenCodeProvider(Provider):
|
|
|
641
687
|
def env(self) -> dict[str, str]:
|
|
642
688
|
"""Extra environment variables for the worker subprocess.
|
|
643
689
|
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
690
|
+
Three parts, deliberately split across **both sides** of
|
|
691
|
+
``self._env`` — that asymmetry is the whole point, see below:
|
|
692
|
+
|
|
693
|
+
1. **#2321, seeded BEFORE ``self._env``, operator-overridable:**
|
|
694
|
+
``OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX`` defaults to
|
|
695
|
+
:data:`OUTPUT_TOKEN_MAX_DEFAULT` (see that constant for the
|
|
696
|
+
full rationale). Unlike part 3 below, this is a *tuning knob*,
|
|
697
|
+
not a safety mechanism — an operator has a legitimate reason to
|
|
698
|
+
pin it lower (e.g. to cap cost) or higher (a future model with
|
|
699
|
+
a larger ``limit.output``), so it is seeded first and then
|
|
700
|
+
allowed to be shadowed by ``self._env`` like any other
|
|
701
|
+
``ProviderDef.env`` entry. ``coord/config.py``'s
|
|
702
|
+
``_parse_providers`` rejects a value at config-parse time that
|
|
703
|
+
opencode's own parser would silently discard (non-integer,
|
|
704
|
+
``<= 0``, or containing whitespace/underscores) — see that
|
|
705
|
+
function for the validation opencode itself performs.
|
|
706
|
+
2. ``ProviderDef.env`` (already ``${VAR}``-expanded by config
|
|
647
707
|
parsing, #1706) — how an operator points a named ``opencode``
|
|
648
708
|
provider definition at a specific set of credentials without
|
|
649
|
-
baking them into the machine's agent unit.
|
|
650
|
-
|
|
651
|
-
``
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
709
|
+
baking them into the machine's agent unit. This is also where
|
|
710
|
+
an operator's override of part 1 above lands, since dict
|
|
711
|
+
``.update()`` here happens after the default is seeded.
|
|
712
|
+
3. **#1705, always set AFTER ``self._env``, NOT
|
|
713
|
+
operator-overridable:** ``OPENCODE_CONFIG_DIR``
|
|
714
|
+
(:data:`AGENTS_ROOT` — where the committed per-spec-type agent
|
|
715
|
+
files live, see the module docstring for why an env var rather
|
|
716
|
+
than a worktree file copy) and ``OPENCODE_CONFIG``
|
|
717
|
+
(:data:`ROUTING_PIN_PATH` — the OpenRouter routing pin, see
|
|
718
|
+
``coord/agents/opencode/routing.jsonc``). These are applied
|
|
719
|
+
**after** ``self._env`` so a ``ProviderDef.env`` entry cannot
|
|
720
|
+
accidentally (or maliciously, via a compromised
|
|
721
|
+
``coordinator.yml`` edit that isn't the security-reviewed
|
|
722
|
+
agent-file path) shadow the deny-list discovery mechanism —
|
|
723
|
+
see :class:`OpenCodeAgentNotFoundError`'s docstring for why
|
|
724
|
+
silently losing this would be bad. Verified empirically that
|
|
725
|
+
``OPENCODE_CONFIG_DIR`` is inert for a provider the operator
|
|
726
|
+
hasn't configured credentials for (real opencode 1.18.11 run
|
|
727
|
+
against a non-OpenRouter model with both variables set
|
|
728
|
+
completed normally) — see
|
|
666
729
|
``test_opencode_routing_pin_inert_without_openrouter_credential_end_to_end``.
|
|
667
730
|
|
|
731
|
+
The asymmetry: part 1 is a default an operator must be able to
|
|
732
|
+
override (seeded *before* the merge, operator wins); part 3 is a
|
|
733
|
+
safety mechanism an operator must never be able to override (set
|
|
734
|
+
*after* the merge, coord wins). Do not "fix" this into a single
|
|
735
|
+
consistent ordering — the two groups need opposite precedence on
|
|
736
|
+
purpose.
|
|
737
|
+
|
|
668
738
|
Returns a fresh dict each call.
|
|
669
739
|
"""
|
|
670
|
-
merged =
|
|
671
|
-
|
|
672
|
-
|
|
740
|
+
merged: dict[str, str] = {
|
|
741
|
+
"OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX": str(OUTPUT_TOKEN_MAX_DEFAULT),
|
|
742
|
+
}
|
|
743
|
+
merged.update(self._env) # operator wins over the tuning-knob default
|
|
744
|
+
merged["OPENCODE_CONFIG_DIR"] = str(AGENTS_ROOT) # coord wins, unchanged
|
|
745
|
+
merged["OPENCODE_CONFIG"] = str(ROUTING_PIN_PATH) # coord wins, unchanged
|
|
673
746
|
return merged
|
|
674
747
|
|
|
675
748
|
def parse_log(
|
|
@@ -1349,6 +1349,93 @@ def test_providers_definition_env_non_string_value_raises(tmp_path: Path) -> Non
|
|
|
1349
1349
|
load(p)
|
|
1350
1350
|
|
|
1351
1351
|
|
|
1352
|
+
# ── providers.definitions[*].env OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX (#2321) ─
|
|
1353
|
+
|
|
1354
|
+
|
|
1355
|
+
def test_providers_output_token_max_valid_value_accepted(tmp_path: Path) -> None:
|
|
1356
|
+
"""A bare positive-integer string is accepted and stored verbatim."""
|
|
1357
|
+
p = tmp_path / "coordinator.yml"
|
|
1358
|
+
p.write_text(
|
|
1359
|
+
_MIN_CONFIG
|
|
1360
|
+
+ "providers:\n"
|
|
1361
|
+
" definitions:\n"
|
|
1362
|
+
" oc:\n"
|
|
1363
|
+
" type: opencode\n"
|
|
1364
|
+
" env:\n"
|
|
1365
|
+
" OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX: '131072'\n"
|
|
1366
|
+
)
|
|
1367
|
+
cfg = load(p)
|
|
1368
|
+
env = cfg.providers.definitions["oc"].env
|
|
1369
|
+
assert env["OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX"] == "131072"
|
|
1370
|
+
|
|
1371
|
+
|
|
1372
|
+
@pytest.mark.parametrize(
|
|
1373
|
+
"bad_value",
|
|
1374
|
+
[
|
|
1375
|
+
"131072 ", # trailing whitespace — opencode's parser silently discards
|
|
1376
|
+
" 131072", # leading whitespace
|
|
1377
|
+
"131_072", # underscore digit-grouping — Number() coercion rejects
|
|
1378
|
+
"0", # not > 0
|
|
1379
|
+
"-1", # not > 0, has a sign
|
|
1380
|
+
"1.5", # decimal point
|
|
1381
|
+
"unlimited", # non-numeric
|
|
1382
|
+
"", # empty
|
|
1383
|
+
],
|
|
1384
|
+
)
|
|
1385
|
+
def test_providers_output_token_max_bad_value_raises(
|
|
1386
|
+
tmp_path: Path, bad_value: str
|
|
1387
|
+
) -> None:
|
|
1388
|
+
"""A value opencode's own parser would silently discard is rejected
|
|
1389
|
+
loudly at config-parse time (#2321) instead of silently reverting to
|
|
1390
|
+
the 32000 default with no warning."""
|
|
1391
|
+
p = tmp_path / "coordinator.yml"
|
|
1392
|
+
p.write_text(
|
|
1393
|
+
_MIN_CONFIG
|
|
1394
|
+
+ "providers:\n"
|
|
1395
|
+
" definitions:\n"
|
|
1396
|
+
" oc:\n"
|
|
1397
|
+
" type: opencode\n"
|
|
1398
|
+
" env:\n"
|
|
1399
|
+
f" OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX: {bad_value!r}\n"
|
|
1400
|
+
)
|
|
1401
|
+
with pytest.raises(ConfigError, match="OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX"):
|
|
1402
|
+
load(p)
|
|
1403
|
+
|
|
1404
|
+
|
|
1405
|
+
def test_providers_output_token_max_absent_does_not_raise(tmp_path: Path) -> None:
|
|
1406
|
+
"""Not setting the key at all is fine — env() supplies its own default."""
|
|
1407
|
+
p = tmp_path / "coordinator.yml"
|
|
1408
|
+
p.write_text(
|
|
1409
|
+
_MIN_CONFIG
|
|
1410
|
+
+ "providers:\n"
|
|
1411
|
+
" definitions:\n"
|
|
1412
|
+
" oc:\n"
|
|
1413
|
+
" type: opencode\n"
|
|
1414
|
+
)
|
|
1415
|
+
cfg = load(p)
|
|
1416
|
+
assert "OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX" not in cfg.providers.definitions["oc"].env
|
|
1417
|
+
|
|
1418
|
+
|
|
1419
|
+
def test_providers_output_token_max_validated_after_var_expansion(
|
|
1420
|
+
tmp_path: Path, monkeypatch
|
|
1421
|
+
) -> None:
|
|
1422
|
+
"""The value is validated AFTER ${VAR} expansion — an expanded bad
|
|
1423
|
+
value is caught, not just a literal one."""
|
|
1424
|
+
monkeypatch.setenv("COORD_TEST_BAD_TOKEN_MAX", "not-a-number")
|
|
1425
|
+
p = tmp_path / "coordinator.yml"
|
|
1426
|
+
p.write_text(
|
|
1427
|
+
_MIN_CONFIG
|
|
1428
|
+
+ "providers:\n"
|
|
1429
|
+
" definitions:\n"
|
|
1430
|
+
" oc:\n"
|
|
1431
|
+
" type: opencode\n"
|
|
1432
|
+
" env:\n"
|
|
1433
|
+
" OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX: '${COORD_TEST_BAD_TOKEN_MAX}'\n"
|
|
1434
|
+
)
|
|
1435
|
+
with pytest.raises(ConfigError, match="OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX"):
|
|
1436
|
+
load(p)
|
|
1437
|
+
|
|
1438
|
+
|
|
1352
1439
|
def test_providers_extra_args_non_string_element_raises(tmp_path: Path) -> None:
|
|
1353
1440
|
"""extra_args elements must be strings."""
|
|
1354
1441
|
p = tmp_path / "coordinator.yml"
|
|
@@ -1651,6 +1651,43 @@ def test_zero_commit_advisory_is_not_reported_healthy(monkeypatch, config) -> No
|
|
|
1651
1651
|
assert res.recovered is False
|
|
1652
1652
|
|
|
1653
1653
|
|
|
1654
|
+
def test_zero_commit_advisory_with_deleted_branch_is_not_reported_healthy(
|
|
1655
|
+
monkeypatch, config
|
|
1656
|
+
) -> None:
|
|
1657
|
+
"""#2324: space-invaders#1's exact shape — a genuine zero-commit
|
|
1658
|
+
advisory whose branch has already been deleted. Unlike the other tests
|
|
1659
|
+
in this section, `_work_advisory_commits_ahead` is deliberately NOT
|
|
1660
|
+
stubbed here — this exercises the real call into
|
|
1661
|
+
`github_ops.branch_commits_ahead_for_assignment`, mocking only `gh`
|
|
1662
|
+
itself, to prove the full chain (not just the diagnose-side branching)
|
|
1663
|
+
reads a confirmed-404 head branch as 0, not None. Before #2324 this
|
|
1664
|
+
reported "could not be confirmed" and steered toward `coord drive
|
|
1665
|
+
--accept-advisory`, which assumes commits exist."""
|
|
1666
|
+
_stub(monkeypatch, session="dead")
|
|
1667
|
+
|
|
1668
|
+
def _gh_dispatch(*args, **kwargs):
|
|
1669
|
+
path = args[1] if len(args) > 1 else ""
|
|
1670
|
+
if path == "repos/acme/api/compare/main...issue-42-deleted":
|
|
1671
|
+
raise RuntimeError("gh: Not Found (HTTP 404)")
|
|
1672
|
+
if path == "repos/acme/api/git/refs/heads/issue-42-deleted":
|
|
1673
|
+
raise RuntimeError("gh: Not Found (HTTP 404)")
|
|
1674
|
+
if path == "repos/acme/api/git/refs/heads/main":
|
|
1675
|
+
return "{}"
|
|
1676
|
+
raise AssertionError(f"unexpected _gh call: {args!r}")
|
|
1677
|
+
|
|
1678
|
+
monkeypatch.setattr("coord.github_ops._gh", _gh_dispatch)
|
|
1679
|
+
|
|
1680
|
+
a = _assign(aid="w-advisory-deleted", status="advisory", branch="issue-42-deleted")
|
|
1681
|
+
board = Board(completed=[a])
|
|
1682
|
+
res = diagnose.diagnose_stage(board, config, "api", 42, "work")
|
|
1683
|
+
|
|
1684
|
+
assert not any("looks healthy" in f for f in res.findings), res.findings
|
|
1685
|
+
assert not any("could not be confirmed" in f for f in res.findings), res.findings
|
|
1686
|
+
assert any("0 commits" in f for f in res.findings), res.findings
|
|
1687
|
+
assert any("coord retry w-advisory-deleted" in f for f in res.findings), res.findings
|
|
1688
|
+
assert res.recovered is False
|
|
1689
|
+
|
|
1690
|
+
|
|
1654
1691
|
def test_zero_commit_advisory_on_a_plan_row_is_not_reported_healthy(
|
|
1655
1692
|
monkeypatch, config
|
|
1656
1693
|
) -> None:
|