code-coordinator 0.5.163__tar.gz → 0.5.165__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.163 → code_coordinator-0.5.165}/PKG-INFO +1 -1
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/drive.py +96 -17
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/drive_queue.py +96 -3
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_drive.py +95 -1
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_drive_queue.py +177 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/.github/workflows/acceptance-web.yml +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/.github/workflows/release-tui.yml +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/.gitignore +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/CLAUDE.md +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/GOAL.md +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/LICENSE +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/MANIFEST.in +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/README.md +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/__init__.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/agent.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/audit.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/block_log.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/board_bool_guard.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/board_service.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/brain.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/claim.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/cli.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/client.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/comments.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/config.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dao.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/.gitignore +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/components.json +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/dist/assets/Gallery-BoKs3mpY.js +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/dist/assets/Terminal-CEsP08iX.js +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/dist/assets/index-CDHPlB6k.js +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/dist/index.html +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/dist/sw.js +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/eslint.config.js +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/index.html +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/package-lock.json +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/package.json +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/playwright.config.ts +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/postcss.config.js +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/App.tsx +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/api/client.ts +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/api/generated.ts +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/index.css +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/main.tsx +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/test-setup.ts +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/tailwind.config.js +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/tsconfig.json +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/tsconfig.node.json +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dashboard/webapp/vite.config.ts +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/db.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/deps.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/events.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/filelock.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/freshness.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/gates.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/goal.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/health/context.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/health/models.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/health/render.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/health/units.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/hooks.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/interactive.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/models.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/network.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/notify.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/openapi.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/parentage.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/plans.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/progress.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/release_window.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/reports.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/review.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/smoke.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/split_work.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/state.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/test_author.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/test_report.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/usage.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/install-agent.sh +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/pyproject.toml +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/setup.cfg +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/__init__.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-33/audit_1039.rs +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-33/contract.md +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-33/manifest.yml +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-38/contract.md +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-38/manifest.yml +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-65/contract.md +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-65/manifest.yml +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/conftest.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_config.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_db.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_events.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_init.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_models.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_network.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_no_direct_gh_calls.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_review.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_session.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_split.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_state.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/Cargo.lock +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/Cargo.toml +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/cargo-config-local-quadraui.toml.example +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/src/app/audit.rs +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/src/app/chat.rs +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/src/app/data.rs +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/src/app/dialogs.rs +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/src/app/doc_tabs.rs +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/src/app/drive.rs +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/src/app/drive_queue.rs +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/src/app/escalation.rs +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/src/app/events.rs +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/src/app/fixtures.rs +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/src/app/fleet_health.rs +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/src/app/fleet_sessions.rs +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/src/app/fleet_terminals.rs +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/src/app/format.rs +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/src/app/milestone_dag.rs +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/src/app/mod.rs +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/src/app/msv.rs +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/src/app/pipeline.rs +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/src/app/plans.rs +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/src/app/render.rs +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/src/app/reports.rs +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/src/app/sessions.rs +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/src/app/settings_ui.rs +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/src/app/sidebar.rs +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/src/app/terminal.rs +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/src/app/tests.rs +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/src/app/types.rs +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/src/app/workspace.rs +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/src/bin/gtk.rs +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/src/commands.rs +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/src/lib.rs +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/src/main.rs +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/src/settings.rs +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/tests/acceptance.rs +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/tests/cli.rs +0 -0
- {code_coordinator-0.5.163 → code_coordinator-0.5.165}/tui/tests/fixtures/board_sample.json +0 -0
|
@@ -996,22 +996,35 @@ def _decide_acceptance_landing(
|
|
|
996
996
|
something that will happen, and waiting for the fourth is the #1526
|
|
997
997
|
defect: an unbounded wait for an event that cannot occur.
|
|
998
998
|
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
999
|
+
Two shapes get an immediate, actionable exit instead of a wait, because
|
|
1000
|
+
for each of them the corrective action belongs to a loop that will never
|
|
1001
|
+
run for this row:
|
|
1002
1002
|
|
|
1003
1003
|
* a FAILED slice test — the work row's equivalent dispatches
|
|
1004
1004
|
``coord fix``, but nothing dispatches one for a ``test-author`` row
|
|
1005
1005
|
whose Test stage failed;
|
|
1006
|
-
* a ``request-changes`` slice review — ``auto_loop`` accepts a
|
|
1007
|
-
``test-author`` fix (``FIX_DISPATCH_TYPES``), but the daemon drain
|
|
1008
|
-
deliberately excludes fix dispatch (#476/#477, and #1692's own
|
|
1009
|
-
analysis), so for the work row it is THIS driver that runs
|
|
1010
|
-
``coord fix``; there was no such arm for the slice;
|
|
1011
1006
|
* ``--no-merge`` — the slice merge is a hard prerequisite for
|
|
1012
1007
|
dispatching any work at all (#1138), so with merging switched off the
|
|
1013
1008
|
run cannot progress, and saying so beats idling to the deadline.
|
|
1014
1009
|
|
|
1010
|
+
A third shape — a ``request-changes`` slice review — used to be a fourth
|
|
1011
|
+
immediate exit for the identical reason (``auto_loop`` accepts a
|
|
1012
|
+
``test-author`` fix via ``FIX_DISPATCH_TYPES``, but the daemon drain
|
|
1013
|
+
deliberately excludes fix dispatch — #476/#477, and #1692's own
|
|
1014
|
+
analysis — so for the work row it is THIS driver that runs
|
|
1015
|
+
``coord fix``, and there was no such arm for the slice). #2425: it no
|
|
1016
|
+
longer is. Every retry of this lane re-dispatched a fresh author on the
|
|
1017
|
+
SAME branch name instead of fixing the one review blocking it
|
|
1018
|
+
(claude-coordinator#2286 — 11 re-authoring attempts over ~11h with the
|
|
1019
|
+
review's findings never once addressed), because re-authoring was the
|
|
1020
|
+
only path this lane had. Below, ``request-changes`` now gets the same
|
|
1021
|
+
bounded ``coord fix <acceptance_review_aid>`` arm :func:`decide` already
|
|
1022
|
+
runs for the work row's own review (the ``REVIEW: request-changes → fix
|
|
1023
|
+
round`` arm), spending :attr:`DriveCounters.acceptance`'s OWN
|
|
1024
|
+
``fix_rounds`` — not the work row's — for the same #2079 reason the
|
|
1025
|
+
slice's merge attempts get their own budget: a struggling slice review
|
|
1026
|
+
must not silently leave the issue's real fix budget at zero.
|
|
1027
|
+
|
|
1015
1028
|
The merge itself reuses :func:`_decide_merge` verbatim against a shadow
|
|
1016
1029
|
:class:`~coord.drive_state.IssueState` whose "work row" IS the slice —
|
|
1017
1030
|
that is what carries #1891 (CI not reported → wait, don't retry), #1892
|
|
@@ -1049,15 +1062,81 @@ def _decide_acceptance_landing(
|
|
|
1049
1062
|
)
|
|
1050
1063
|
|
|
1051
1064
|
if state.acceptance_review_verdict == "request-changes":
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1065
|
+
# #2425: the slice's own twin of `decide()`'s `REVIEW: request-
|
|
1066
|
+
# changes → fix round` arm — see the docstring above for why this
|
|
1067
|
+
# used to be a bare `_die()`. `coord fix` already accepts a
|
|
1068
|
+
# `type="test-author"` review id (#1622/#1692:
|
|
1069
|
+
# `auto_loop.FIX_DISPATCH_TYPES` includes `SEALED_PATH_AUTHOR_TYPES`,
|
|
1070
|
+
# which is where "test-author" lives), so this is the SAME command
|
|
1071
|
+
# the work-row arm dispatches, not a second implementation of it.
|
|
1072
|
+
slice_counters = counters.slice_budget()
|
|
1073
|
+
if not state.auto_loop:
|
|
1074
|
+
return _die(
|
|
1075
|
+
"the JIT acceptance slice's review requested changes, but "
|
|
1076
|
+
"pipeline.auto_loop is OFF — the review→fix path is "
|
|
1077
|
+
"switched off in coordinator.yml, so no fix can be "
|
|
1078
|
+
"dispatched.\n"
|
|
1079
|
+
f" Findings: coord log {state.acceptance_review_aid or aid}\n"
|
|
1080
|
+
" Continue by hand: coord assign --interactive --fix-of "
|
|
1081
|
+
f"{state.acceptance_review_aid or aid}"
|
|
1082
|
+
)
|
|
1083
|
+
# Belt-and-braces, mirroring the work-row arm: `acceptance_review_
|
|
1084
|
+
# verdict` and `acceptance_review_aid` are read off the SAME board
|
|
1085
|
+
# row (drive_state.project), so a verdict without an id is
|
|
1086
|
+
# impossible today. Refuse to guess rather than dispatch `coord fix`
|
|
1087
|
+
# against the wrong assignment.
|
|
1088
|
+
if not state.acceptance_review_aid:
|
|
1089
|
+
return _die(
|
|
1090
|
+
"the JIT acceptance slice's review verdict is "
|
|
1091
|
+
"'request-changes' but no review assignment id is on the "
|
|
1092
|
+
"board — refusing to guess which review to fix. Inspect: "
|
|
1093
|
+
f"coord gates {state.repo} {state.issue}"
|
|
1094
|
+
)
|
|
1095
|
+
# Same de-duplication latch as `review_fix_dispatched_for` on the
|
|
1096
|
+
# work row's own arm, just on the slice's own counters: `coord fix`
|
|
1097
|
+
# returns as soon as the fix worker is dispatched, and the board
|
|
1098
|
+
# this driver polls needs a beat to show the new row.
|
|
1099
|
+
if slice_counters.review_fix_dispatched_for == state.acceptance_review_aid:
|
|
1100
|
+
return _wait(
|
|
1101
|
+
label=(
|
|
1102
|
+
"ACCEPTANCE: fix already dispatched for "
|
|
1103
|
+
f"{state.acceptance_review_aid} — waiting for the fix "
|
|
1104
|
+
"row to appear on the board"
|
|
1105
|
+
)
|
|
1106
|
+
)
|
|
1107
|
+
if slice_counters.fix_rounds >= opts.max_fix_rounds:
|
|
1108
|
+
return _die(
|
|
1109
|
+
f"the JIT acceptance slice {aid} was reviewed REQUEST-"
|
|
1110
|
+
f"CHANGES (review {state.acceptance_review_aid}) after "
|
|
1111
|
+
f"{slice_counters.fix_rounds} fix round(s) this drive spent "
|
|
1112
|
+
"landing the slice — stopping.\n"
|
|
1113
|
+
f" Findings: coord log {state.acceptance_review_aid}\n"
|
|
1114
|
+
f" Continue by hand: coord fix {state.acceptance_review_aid}\n"
|
|
1115
|
+
" or re-run coord drive with --no-acceptance to skip JIT "
|
|
1116
|
+
"authoring."
|
|
1117
|
+
)
|
|
1118
|
+
slice_counters.fix_rounds += 1
|
|
1119
|
+
slice_counters.review_fix_dispatched_for = state.acceptance_review_aid
|
|
1120
|
+
return Action(
|
|
1121
|
+
kind=RUN,
|
|
1122
|
+
label=(
|
|
1123
|
+
"ACCEPTANCE: review request-changes → fix round "
|
|
1124
|
+
f"{slice_counters.fix_rounds}/{opts.max_fix_rounds} "
|
|
1125
|
+
f"(coord fix {state.acceptance_review_aid})"
|
|
1126
|
+
),
|
|
1127
|
+
command=("fix", state.acceptance_review_aid),
|
|
1128
|
+
error_message=(
|
|
1129
|
+
f"coord fix {state.acceptance_review_aid} failed to "
|
|
1130
|
+
"dispatch a fix for the JIT acceptance slice's review.\n"
|
|
1131
|
+
" Its refusals are all guards doing their job: auto_loop "
|
|
1132
|
+
"disabled, no structured\n"
|
|
1133
|
+
" findings, approve-with-nits (#476), max_review_"
|
|
1134
|
+
"iterations, or the #522\n"
|
|
1135
|
+
" terminal-work guard — the message above names which.\n"
|
|
1136
|
+
f" Check: coord log {state.acceptance_review_aid} / "
|
|
1137
|
+
"continue by hand: coord assign --interactive --fix-of "
|
|
1138
|
+
f"{state.acceptance_review_aid}"
|
|
1139
|
+
),
|
|
1061
1140
|
)
|
|
1062
1141
|
|
|
1063
1142
|
if not opts.do_merge:
|
|
@@ -97,6 +97,7 @@ from coord.merge_queue import (
|
|
|
97
97
|
is_ci_infra_reason,
|
|
98
98
|
is_ci_pending_reason,
|
|
99
99
|
is_ci_unreadable_reason,
|
|
100
|
+
is_stale_smoke_reason,
|
|
100
101
|
)
|
|
101
102
|
from coord.models import is_policy_refusal_reason
|
|
102
103
|
|
|
@@ -1810,6 +1811,57 @@ def _dispatch_produced_nothing(entry: QueueEntry, facts: IssueFacts) -> bool:
|
|
|
1810
1811
|
return facts.last_dispatched_at < entry.launched_at
|
|
1811
1812
|
|
|
1812
1813
|
|
|
1814
|
+
def _is_merge_gate_block_reason(reason: str | None) -> bool:
|
|
1815
|
+
"""#2424: does *reason* already name a merge-gate block — a death whose
|
|
1816
|
+
real cause is a LATER stage (merge), not a dispatch-layer failure?
|
|
1817
|
+
|
|
1818
|
+
`_dispatch_produced_nothing`'s own comparison (``facts.last_dispatched_at
|
|
1819
|
+
< entry.launched_at``) goes stale specifically for a relaunch whose only
|
|
1820
|
+
job is retrying the Merge stage: by design, that relaunch dispatches no
|
|
1821
|
+
new assignment (there is nothing left to dispatch — Work/Test/Review
|
|
1822
|
+
already completed), so the comparison reads exactly like a genuine
|
|
1823
|
+
dispatch failure even though three real assignments did real work. This
|
|
1824
|
+
is the textual escape hatch for that case: when *reason* itself already
|
|
1825
|
+
names a merge-gate block, the generic "#2273 no assignment was ever
|
|
1826
|
+
created" note must not be layered on top of it — see
|
|
1827
|
+
claude-coordinator#2405 (stale smoke verdict) and coord-web#2 (red CI),
|
|
1828
|
+
both live escalations where the dispatch-note actively misdirected an
|
|
1829
|
+
operator toward `drive-queue remove && add` (a wasted Work/Test/Review
|
|
1830
|
+
cycle) instead of the real one-line fix (`coord merge --revalidate`, or
|
|
1831
|
+
fixing the failing CI check).
|
|
1832
|
+
|
|
1833
|
+
Four shapes, all written by `coord/drive.py`'s own merge-stage decision
|
|
1834
|
+
functions — none of them a "no assignment created" signal:
|
|
1835
|
+
|
|
1836
|
+
* `_die`'s exhausted-merge-attempts wording ("merge attempted N times
|
|
1837
|
+
without landing") — `coord assign` succeeded and Work/Test/Review all
|
|
1838
|
+
completed; the LOOP inside a single drive session that kept retrying
|
|
1839
|
+
`coord merge --only` simply ran out of its own attempt budget
|
|
1840
|
+
(#1505/#2078).
|
|
1841
|
+
* `is_stale_smoke_reason` — the #1479 staleness race: the merge base
|
|
1842
|
+
moved out from under a still-valid smoke verdict.
|
|
1843
|
+
* "checks failed" — `coord.merge_queue`'s own `checks_failed` prose
|
|
1844
|
+
(``f"checks failed: {summary}"``): red CI on a PR that was dispatched,
|
|
1845
|
+
built, and reviewed fine.
|
|
1846
|
+
* `_escalate_merge`'s own gate-divergence/terminal-status wording
|
|
1847
|
+
("smoke_required —" / "review_required —" / "merge_status=...") — the
|
|
1848
|
+
#1505/#1526 immediate-escalation path, which already recorded its own
|
|
1849
|
+
accurate `coord escalate record` before this drive exited.
|
|
1850
|
+
"""
|
|
1851
|
+
if not reason:
|
|
1852
|
+
return False
|
|
1853
|
+
lowered = reason.lower()
|
|
1854
|
+
if "merge attempted" in lowered:
|
|
1855
|
+
return True
|
|
1856
|
+
if is_stale_smoke_reason(reason):
|
|
1857
|
+
return True
|
|
1858
|
+
if "checks failed" in lowered:
|
|
1859
|
+
return True
|
|
1860
|
+
if "smoke_required —" in lowered or "review_required —" in lowered:
|
|
1861
|
+
return True
|
|
1862
|
+
return "merge_status=" in lowered
|
|
1863
|
+
|
|
1864
|
+
|
|
1813
1865
|
def _is_empty_branch_death_reason(reason: str | None) -> bool:
|
|
1814
1866
|
"""#2363: does *reason* name the "claimed success, wrote nothing"
|
|
1815
1867
|
signature — an acceptance-author or plain work session that exited
|
|
@@ -1858,6 +1910,7 @@ def _retry_backoff_reason(
|
|
|
1858
1910
|
now: float | None,
|
|
1859
1911
|
attempts: int,
|
|
1860
1912
|
retry_backoff_at: float | None,
|
|
1913
|
+
own_reason: str | None = None,
|
|
1861
1914
|
) -> str:
|
|
1862
1915
|
"""#2273's launch-side guard: ``''`` unless *entry* is still inside its
|
|
1863
1916
|
post-death backoff window.
|
|
@@ -1898,6 +1951,23 @@ def _retry_backoff_reason(
|
|
|
1898
1951
|
``retry_backoff_at is None`` (a pure-logic caller with no clock, or a row
|
|
1899
1952
|
predating this column — both degrade to the pre-#2273 behaviour exactly,
|
|
1900
1953
|
the same posture every other clock-gated check in this module takes).
|
|
1954
|
+
|
|
1955
|
+
*own_reason* (#2424 follow-up): the same text the launch-side dispatch
|
|
1956
|
+
note is gated on (see the comment above `dispatch_only` in
|
|
1957
|
+
`_reconcile_running`'s retry/exhausted branches). Passed through so the
|
|
1958
|
+
widened `DISPATCH_FAILURE_MIN_BACKOFF_SECONDS` spacing below answers the
|
|
1959
|
+
identical "was this actually a dispatch failure" question the launch-side
|
|
1960
|
+
note already answers, rather than recomputing it from
|
|
1961
|
+
`_dispatch_produced_nothing` alone — which, like the note before #2424,
|
|
1962
|
+
cannot tell a genuine pre-`coord assign` crash from a merge-only relaunch
|
|
1963
|
+
that dispatches no new assignment by design. Once `own_reason` already
|
|
1964
|
+
names a merge-gate block (`_is_merge_gate_block_reason`), the 300s floor
|
|
1965
|
+
would be pure mispacing: the rationale for widening it ("a transient
|
|
1966
|
+
dispatch failure cannot spend the whole retry budget inside one tick
|
|
1967
|
+
cadence") does not apply once the cause is known to be a merge-gate
|
|
1968
|
+
block, not a dispatch failure. ``None`` (the default) degrades to the
|
|
1969
|
+
pre-#2424-follow-up behaviour exactly, for callers that have not been
|
|
1970
|
+
updated to pass it.
|
|
1901
1971
|
"""
|
|
1902
1972
|
if now is None or attempts <= 0 or retry_backoff_at is None:
|
|
1903
1973
|
return ""
|
|
@@ -1906,7 +1976,9 @@ def _retry_backoff_reason(
|
|
|
1906
1976
|
return ""
|
|
1907
1977
|
idx = min(attempts - 1, len(RETRY_BACKOFF_SECONDS) - 1)
|
|
1908
1978
|
backoff = RETRY_BACKOFF_SECONDS[idx]
|
|
1909
|
-
if _dispatch_produced_nothing(entry, facts)
|
|
1979
|
+
if _dispatch_produced_nothing(entry, facts) and not _is_merge_gate_block_reason(
|
|
1980
|
+
own_reason
|
|
1981
|
+
):
|
|
1910
1982
|
backoff = max(backoff, DISPATCH_FAILURE_MIN_BACKOFF_SECONDS)
|
|
1911
1983
|
if age >= backoff:
|
|
1912
1984
|
return ""
|
|
@@ -2347,7 +2419,21 @@ def _reconcile_running(
|
|
|
2347
2419
|
# — or the escalation this produces once the budget IS exhausted — sees
|
|
2348
2420
|
# "no assignment was ever created" instead of a bare exit code that
|
|
2349
2421
|
# could mean anything.
|
|
2350
|
-
|
|
2422
|
+
#
|
|
2423
|
+
# #2424: EXCEPT when `own_reason` already names a merge-gate block
|
|
2424
|
+
# ("merge attempted N times without landing", a stale smoke verdict, red
|
|
2425
|
+
# CI, ...) — a relaunch whose only job is retrying the Merge stage
|
|
2426
|
+
# dispatches no new assignment BY DESIGN (Work/Test/Review already
|
|
2427
|
+
# completed; there is nothing left to dispatch), so the comparison above
|
|
2428
|
+
# reads exactly like a dispatch failure even though it plainly is not.
|
|
2429
|
+
# The generic note is additive evidence for when nothing more specific is
|
|
2430
|
+
# known; it must never be layered on top of a reason that already
|
|
2431
|
+
# contradicts it — see `_is_merge_gate_block_reason` for the two live
|
|
2432
|
+
# escalations (claude-coordinator#2405, coord-web#2) this false-positive
|
|
2433
|
+
# actually produced.
|
|
2434
|
+
dispatch_only = _dispatch_produced_nothing(
|
|
2435
|
+
entry, facts
|
|
2436
|
+
) and not _is_merge_gate_block_reason(own_reason)
|
|
2351
2437
|
dispatch_note = (
|
|
2352
2438
|
" — no assignment was ever created for this run (#2273): likely an "
|
|
2353
2439
|
"infrastructure/dispatch-layer failure, not a code defect"
|
|
@@ -3604,17 +3690,24 @@ def plan_tick(
|
|
|
3604
3690
|
`effective_last_reason`) so both call sites below — the report-only
|
|
3605
3691
|
dry-run pass and the persisted `last_reason` write — get the combined
|
|
3606
3692
|
text for free, with no change needed at either site.
|
|
3693
|
+
|
|
3694
|
+
#2424 follow-up: that same `effective_last_reason` resolution is also
|
|
3695
|
+
what `_retry_backoff_reason` needs to answer its own "was this
|
|
3696
|
+
actually a dispatch failure" question — see its `own_reason`
|
|
3697
|
+
parameter's docstring — so it is resolved once, here, and passed to
|
|
3698
|
+
both.
|
|
3607
3699
|
"""
|
|
3700
|
+
previous = effective_last_reason.get(candidate.key, candidate.last_reason)
|
|
3608
3701
|
backoff = _retry_backoff_reason(
|
|
3609
3702
|
candidate,
|
|
3610
3703
|
board.facts(candidate.key),
|
|
3611
3704
|
now,
|
|
3612
3705
|
effective_attempts.get(candidate.key, candidate.attempts),
|
|
3613
3706
|
retry_backoff_at_map.get(candidate.key, candidate.retry_backoff_at),
|
|
3707
|
+
own_reason=previous,
|
|
3614
3708
|
)
|
|
3615
3709
|
if not backoff:
|
|
3616
3710
|
return ""
|
|
3617
|
-
previous = effective_last_reason.get(candidate.key, candidate.last_reason)
|
|
3618
3711
|
return _augment_backoff_reason(previous, backoff)
|
|
3619
3712
|
|
|
3620
3713
|
# #1972's projection of per-repo occupancy AS THE WALK SEES IT: the board
|
|
@@ -1304,18 +1304,112 @@ def test_failed_slice_test_stops_with_the_fix_command():
|
|
|
1304
1304
|
assert "coord fix ta1" in action.message
|
|
1305
1305
|
|
|
1306
1306
|
|
|
1307
|
-
def
|
|
1307
|
+
def test_slice_review_request_changes_dispatches_a_fix():
|
|
1308
|
+
"""#2425: the JIT lane's own twin of the work row's `REVIEW:
|
|
1309
|
+
request-changes → fix round` arm — before this, a request-changes
|
|
1310
|
+
verdict on the slice was a dead end nothing ever dispatched a fix for
|
|
1311
|
+
(claude-coordinator#2286: 11 re-authoring retries over ~11h, never once
|
|
1312
|
+
addressing the review)."""
|
|
1313
|
+
counters = DriveCounters()
|
|
1314
|
+
action = landing_step(
|
|
1315
|
+
landing_state(
|
|
1316
|
+
acceptance_review_verdict="request-changes",
|
|
1317
|
+
acceptance_merge_status="",
|
|
1318
|
+
),
|
|
1319
|
+
counters=counters,
|
|
1320
|
+
)
|
|
1321
|
+
assert action.kind == RUN
|
|
1322
|
+
assert action.command == ("fix", "rv1")
|
|
1323
|
+
assert "rv1" in action.label
|
|
1324
|
+
assert not action.is_exit
|
|
1325
|
+
# Spends the SLICE's own budget, not the work row's (#2079's rule,
|
|
1326
|
+
# extended to fix rounds): landing the slice must not silently leave
|
|
1327
|
+
# the issue's own fix budget at zero.
|
|
1328
|
+
assert counters.fix_rounds == 0
|
|
1329
|
+
assert counters.acceptance is not None
|
|
1330
|
+
assert counters.acceptance.fix_rounds == 1
|
|
1331
|
+
assert counters.acceptance.review_fix_dispatched_for == "rv1"
|
|
1332
|
+
|
|
1333
|
+
|
|
1334
|
+
def test_slice_review_fix_already_dispatched_waits_for_the_board():
|
|
1335
|
+
"""The de-dup latch: a second poll against the SAME review id must not
|
|
1336
|
+
spawn a second fix worker on the same branch (#476/#477)."""
|
|
1337
|
+
counters = DriveCounters()
|
|
1338
|
+
counters.slice_budget().review_fix_dispatched_for = "rv1"
|
|
1308
1339
|
action = landing_step(
|
|
1309
1340
|
landing_state(
|
|
1310
1341
|
acceptance_review_verdict="request-changes",
|
|
1311
1342
|
acceptance_merge_status="",
|
|
1343
|
+
),
|
|
1344
|
+
counters=counters,
|
|
1345
|
+
)
|
|
1346
|
+
assert action.kind == WAIT
|
|
1347
|
+
assert "rv1" in action.label
|
|
1348
|
+
assert counters.acceptance.fix_rounds == 0
|
|
1349
|
+
|
|
1350
|
+
|
|
1351
|
+
def test_slice_review_fix_rounds_are_bounded_then_die():
|
|
1352
|
+
"""Bounded the same way the work row's fix loop is — a slice review that
|
|
1353
|
+
keeps coming back request-changes must eventually escalate, not spin."""
|
|
1354
|
+
opts = DriveOptions(machine="precision", max_fix_rounds=2)
|
|
1355
|
+
counters = DriveCounters()
|
|
1356
|
+
for expected_round in (1, 2):
|
|
1357
|
+
action = landing_step(
|
|
1358
|
+
landing_state(
|
|
1359
|
+
acceptance_review_verdict="request-changes",
|
|
1360
|
+
acceptance_merge_status="",
|
|
1361
|
+
),
|
|
1362
|
+
opts,
|
|
1363
|
+
counters=counters,
|
|
1312
1364
|
)
|
|
1365
|
+
assert action.kind == RUN
|
|
1366
|
+
assert action.command == ("fix", "rv1")
|
|
1367
|
+
assert counters.acceptance.fix_rounds == expected_round
|
|
1368
|
+
# Clear the latch between rounds the same way a changed review row
|
|
1369
|
+
# would on the real board (a fresh review after the fix landed).
|
|
1370
|
+
counters.acceptance.review_fix_dispatched_for = ""
|
|
1371
|
+
|
|
1372
|
+
action = landing_step(
|
|
1373
|
+
landing_state(
|
|
1374
|
+
acceptance_review_verdict="request-changes",
|
|
1375
|
+
acceptance_merge_status="",
|
|
1376
|
+
),
|
|
1377
|
+
opts,
|
|
1378
|
+
counters=counters,
|
|
1313
1379
|
)
|
|
1314
1380
|
assert action.is_exit
|
|
1315
1381
|
assert action.exit_code == EXIT_TERMINAL_FAILURE
|
|
1382
|
+
assert "2 fix round(s)" in action.message
|
|
1316
1383
|
assert "coord fix rv1" in action.message
|
|
1317
1384
|
|
|
1318
1385
|
|
|
1386
|
+
def test_slice_review_request_changes_with_auto_loop_off_dies_without_dispatching():
|
|
1387
|
+
action = landing_step(
|
|
1388
|
+
landing_state(
|
|
1389
|
+
acceptance_review_verdict="request-changes",
|
|
1390
|
+
acceptance_merge_status="",
|
|
1391
|
+
auto_loop=False,
|
|
1392
|
+
)
|
|
1393
|
+
)
|
|
1394
|
+
assert action.is_exit
|
|
1395
|
+
assert action.exit_code == EXIT_TERMINAL_FAILURE
|
|
1396
|
+
assert "auto_loop is OFF" in action.message
|
|
1397
|
+
assert "coord assign --interactive --fix-of rv1" in action.message
|
|
1398
|
+
|
|
1399
|
+
|
|
1400
|
+
def test_slice_review_request_changes_with_no_review_id_refuses_to_guess():
|
|
1401
|
+
action = landing_step(
|
|
1402
|
+
landing_state(
|
|
1403
|
+
acceptance_review_verdict="request-changes",
|
|
1404
|
+
acceptance_merge_status="",
|
|
1405
|
+
acceptance_review_aid="",
|
|
1406
|
+
)
|
|
1407
|
+
)
|
|
1408
|
+
assert action.is_exit
|
|
1409
|
+
assert action.exit_code == EXIT_TERMINAL_FAILURE
|
|
1410
|
+
assert "refusing to guess" in action.message
|
|
1411
|
+
|
|
1412
|
+
|
|
1319
1413
|
def test_no_merge_refuses_up_front_instead_of_idling_to_the_deadline():
|
|
1320
1414
|
"""`--no-merge` makes the run unable to progress at all (#1138 refuses
|
|
1321
1415
|
the work dispatch until the slice lands) — say so immediately."""
|
|
@@ -1512,6 +1512,40 @@ def test_a_dispatch_failure_that_created_no_assignment_backs_off_longer():
|
|
|
1512
1512
|
assert len(backoff) == 1 and backoff[0].backing_off is True
|
|
1513
1513
|
|
|
1514
1514
|
|
|
1515
|
+
def test_a_merge_gate_block_retry_does_not_get_the_widened_backoff():
|
|
1516
|
+
"""#2424 follow-up: identical setup to the test above (no board-visible
|
|
1517
|
+
assignment for this launch — by itself indistinguishable from a genuine
|
|
1518
|
+
dispatch failure) EXCEPT the entry's own `last_reason` already names a
|
|
1519
|
+
merge-gate block. `_retry_backoff_reason` must not widen the spacing to
|
|
1520
|
+
`DISPATCH_FAILURE_MIN_BACKOFF_SECONDS` (300s) on top of a reason that
|
|
1521
|
+
already says the real cause is a merge-gate block, not a dispatch
|
|
1522
|
+
failure — the same "one question, one answer" fix `_is_merge_gate_block_
|
|
1523
|
+
reason` already applies to the escalation text, now also applied to the
|
|
1524
|
+
retry-pacing decision that answers the same question independently."""
|
|
1525
|
+
launched_at = NOW - DRIVE_STARTUP_GRACE_SECONDS - 400.0
|
|
1526
|
+
entries = [
|
|
1527
|
+
entry(
|
|
1528
|
+
1650,
|
|
1529
|
+
position=3,
|
|
1530
|
+
state=STATE_WAITING,
|
|
1531
|
+
attempts=1,
|
|
1532
|
+
launched_at=launched_at,
|
|
1533
|
+
# Same 90s elapsed as the widened-backoff test above: clears the
|
|
1534
|
+
# plain RETRY_BACKOFF_SECONDS[0] (60s) but not the widened 300s
|
|
1535
|
+
# floor.
|
|
1536
|
+
retry_backoff_at=NOW - 90.0,
|
|
1537
|
+
last_reason=(
|
|
1538
|
+
"merge attempted 3 times without landing. (attempt 2/5) — "
|
|
1539
|
+
"requeued at position 3"
|
|
1540
|
+
),
|
|
1541
|
+
)
|
|
1542
|
+
]
|
|
1543
|
+
facts = IssueFacts(known=True, issue_state="open") # no assignment at all
|
|
1544
|
+
view = BoardView(issues={entry_key(REPO, 1650): facts})
|
|
1545
|
+
plan = plan_tick(entries, view, capacity=1, now=NOW)
|
|
1546
|
+
assert plan.launch is not None and plan.launch.issue == 1650
|
|
1547
|
+
|
|
1548
|
+
|
|
1515
1549
|
def test_a_dispatched_run_that_died_later_gets_the_plain_backoff_only():
|
|
1516
1550
|
"""The counterpart: a launch that DID dispatch (an assignment exists,
|
|
1517
1551
|
created after `launched_at`) is NOT treated as a pure dispatch failure —
|
|
@@ -1555,6 +1589,149 @@ def test_exhausted_reason_names_a_dispatch_only_failure():
|
|
|
1555
1589
|
assert "no assignment was ever created for this run" in plan.blocked[0].reason
|
|
1556
1590
|
|
|
1557
1591
|
|
|
1592
|
+
def test_exhausted_merge_gate_block_does_not_get_the_dispatch_note():
|
|
1593
|
+
"""#2424: claude-coordinator#2405 / coord-web#2 — a relaunch whose only
|
|
1594
|
+
job is retrying the Merge stage dispatches no NEW assignment by design
|
|
1595
|
+
(Work/Test/Review already completed), so `_dispatch_produced_nothing`'s
|
|
1596
|
+
comparison reads exactly like a genuine dispatch failure. The own exit
|
|
1597
|
+
reason already names the real cause (a merge-gate block); the #2273 note
|
|
1598
|
+
must not be layered on top of it, or an operator reading the escalation
|
|
1599
|
+
is misdirected toward `drive-queue remove && add` (a wasted Work/Test/
|
|
1600
|
+
Review cycle) instead of `coord merge --revalidate`."""
|
|
1601
|
+
entries = [
|
|
1602
|
+
entry(
|
|
1603
|
+
1650,
|
|
1604
|
+
state=STATE_RUNNING,
|
|
1605
|
+
attempts=DEFAULT_MAX_ATTEMPTS - 1,
|
|
1606
|
+
launched_at=NOW - DRIVE_STARTUP_GRACE_SECONDS - 1,
|
|
1607
|
+
)
|
|
1608
|
+
]
|
|
1609
|
+
own_reason = (
|
|
1610
|
+
"drive exited for claude-coordinator#1650 (exit_code=1): merge "
|
|
1611
|
+
"attempted 3 times without landing.\n"
|
|
1612
|
+
" Last board state: status='CONFLICT' reason='smoke test verdict "
|
|
1613
|
+
"is stale'"
|
|
1614
|
+
)
|
|
1615
|
+
# No assignment dispatched AFTER `launched_at` — exactly the shape a
|
|
1616
|
+
# merge-only relaunch produces, and exactly what used to trip the #2273
|
|
1617
|
+
# note despite three real assignments already having done real work.
|
|
1618
|
+
facts = IssueFacts(known=True, issue_state="open")
|
|
1619
|
+
view = BoardView(issues={entry_key(REPO, 1650): facts})
|
|
1620
|
+
plan = plan_tick(
|
|
1621
|
+
entries, view, capacity=1, now=NOW,
|
|
1622
|
+
exit_reasons={entry_key(REPO, 1650): own_reason},
|
|
1623
|
+
)
|
|
1624
|
+
assert plan.reconciles[0].outcome == "exhausted"
|
|
1625
|
+
reason = plan.blocked[0].reason
|
|
1626
|
+
assert own_reason in reason
|
|
1627
|
+
assert "no assignment was ever created" not in reason
|
|
1628
|
+
assert "infrastructure/dispatch-layer failure" not in reason
|
|
1629
|
+
|
|
1630
|
+
|
|
1631
|
+
def test_exhausted_checks_failed_does_not_get_the_dispatch_note():
|
|
1632
|
+
"""Same #2424 fix, the red-CI shape (coord-web#2): `own_reason` names a
|
|
1633
|
+
`checks_failed` merge-gate block, not a dispatch failure."""
|
|
1634
|
+
entries = [
|
|
1635
|
+
entry(
|
|
1636
|
+
1650,
|
|
1637
|
+
state=STATE_RUNNING,
|
|
1638
|
+
attempts=DEFAULT_MAX_ATTEMPTS - 1,
|
|
1639
|
+
launched_at=NOW - DRIVE_STARTUP_GRACE_SECONDS - 1,
|
|
1640
|
+
)
|
|
1641
|
+
]
|
|
1642
|
+
own_reason = (
|
|
1643
|
+
"drive exited for claude-coordinator#1650 (exit_code=1): merge "
|
|
1644
|
+
"attempted 3 times without landing.\n"
|
|
1645
|
+
" Last board state: status='CONFLICT' reason='checks failed: "
|
|
1646
|
+
"checks'"
|
|
1647
|
+
)
|
|
1648
|
+
facts = IssueFacts(known=True, issue_state="open")
|
|
1649
|
+
view = BoardView(issues={entry_key(REPO, 1650): facts})
|
|
1650
|
+
plan = plan_tick(
|
|
1651
|
+
entries, view, capacity=1, now=NOW,
|
|
1652
|
+
exit_reasons={entry_key(REPO, 1650): own_reason},
|
|
1653
|
+
)
|
|
1654
|
+
assert plan.reconciles[0].outcome == "exhausted"
|
|
1655
|
+
reason = plan.blocked[0].reason
|
|
1656
|
+
assert "no assignment was ever created" not in reason
|
|
1657
|
+
|
|
1658
|
+
|
|
1659
|
+
def test_exhausted_immediate_escalation_merge_status_does_not_get_the_dispatch_note():
|
|
1660
|
+
"""#2424's fourth documented shape: `_escalate_merge`'s #1505
|
|
1661
|
+
immediate-escalation path (`coord/drive.py:2809`), whose `Action.message`
|
|
1662
|
+
is `f"merge escalated: {reason}\\n gates: {gates_summary}\\n..."`
|
|
1663
|
+
(`coord/drive.py:2836`) and whose `reason` for a terminal/unrecognized
|
|
1664
|
+
merge status is `f"merge_status={status or '(empty)'} — no number of
|
|
1665
|
+
retries..."`. `_drive_exit_summary` then wraps that whole message as
|
|
1666
|
+
`f"drive exited for {ident} (exit_code={exit_code}): {reason}"`
|
|
1667
|
+
(`coord/drive.py:3677`) before it is read back verbatim as `own_reason` —
|
|
1668
|
+
so the real string never STARTS WITH "merge_status=", it merely CONTAINS
|
|
1669
|
+
it (both in the `reason` line and again in `gates_summary`'s own
|
|
1670
|
+
`merge_status=...` pair). A prior `.startswith("merge_status=")` check
|
|
1671
|
+
left this one shape unmatched — dead code against real data — so a drive
|
|
1672
|
+
that hit this exact path still got the false #2273 dispatch-note."""
|
|
1673
|
+
entries = [
|
|
1674
|
+
entry(
|
|
1675
|
+
1650,
|
|
1676
|
+
state=STATE_RUNNING,
|
|
1677
|
+
attempts=DEFAULT_MAX_ATTEMPTS - 1,
|
|
1678
|
+
launched_at=NOW - DRIVE_STARTUP_GRACE_SECONDS - 1,
|
|
1679
|
+
)
|
|
1680
|
+
]
|
|
1681
|
+
own_reason = (
|
|
1682
|
+
"drive exited for claude-coordinator#1650 (exit_code=1): merge "
|
|
1683
|
+
"escalated: merge_status=CONFLICT — no number of retries changes "
|
|
1684
|
+
"this; escalating on first encounter instead of burning the "
|
|
1685
|
+
"merge-attempt budget (#1505)\n"
|
|
1686
|
+
" gates: merge_status=CONFLICT | merge_reason=(none) | "
|
|
1687
|
+
"review_verdict=approved | test_state=passed | pr_url=(none)\n"
|
|
1688
|
+
" proposed: coord merge --plan --repo claude-coordinator "
|
|
1689
|
+
"# inspect the gates, then decide\n"
|
|
1690
|
+
" Recorded on the board — see: coord escalate list --repo "
|
|
1691
|
+
"claude-coordinator"
|
|
1692
|
+
)
|
|
1693
|
+
facts = IssueFacts(known=True, issue_state="open")
|
|
1694
|
+
view = BoardView(issues={entry_key(REPO, 1650): facts})
|
|
1695
|
+
plan = plan_tick(
|
|
1696
|
+
entries, view, capacity=1, now=NOW,
|
|
1697
|
+
exit_reasons={entry_key(REPO, 1650): own_reason},
|
|
1698
|
+
)
|
|
1699
|
+
assert plan.reconciles[0].outcome == "exhausted"
|
|
1700
|
+
reason = plan.blocked[0].reason
|
|
1701
|
+
assert own_reason in reason
|
|
1702
|
+
assert "no assignment was ever created" not in reason
|
|
1703
|
+
assert "infrastructure/dispatch-layer failure" not in reason
|
|
1704
|
+
|
|
1705
|
+
|
|
1706
|
+
def test_a_genuine_dispatch_failure_still_gets_the_note_alongside_own_reason():
|
|
1707
|
+
"""Regression guard for #2424's fix: an own_reason that does NOT name a
|
|
1708
|
+
merge-gate block (a genuine pre-`coord assign` crash) must still get the
|
|
1709
|
+
#2273 note — the fix narrows the false-positive, it does not remove the
|
|
1710
|
+
signal entirely."""
|
|
1711
|
+
entries = [
|
|
1712
|
+
entry(
|
|
1713
|
+
1650,
|
|
1714
|
+
state=STATE_RUNNING,
|
|
1715
|
+
attempts=DEFAULT_MAX_ATTEMPTS - 1,
|
|
1716
|
+
launched_at=NOW - DRIVE_STARTUP_GRACE_SECONDS - 1,
|
|
1717
|
+
)
|
|
1718
|
+
]
|
|
1719
|
+
own_reason = (
|
|
1720
|
+
"drive exited for claude-coordinator#1650 (exit_code=1): unhandled "
|
|
1721
|
+
"exception in dispatch"
|
|
1722
|
+
)
|
|
1723
|
+
facts = IssueFacts(known=True, issue_state="open")
|
|
1724
|
+
view = BoardView(issues={entry_key(REPO, 1650): facts})
|
|
1725
|
+
plan = plan_tick(
|
|
1726
|
+
entries, view, capacity=1, now=NOW,
|
|
1727
|
+
exit_reasons={entry_key(REPO, 1650): own_reason},
|
|
1728
|
+
)
|
|
1729
|
+
assert plan.reconciles[0].outcome == "exhausted"
|
|
1730
|
+
reason = plan.blocked[0].reason
|
|
1731
|
+
assert own_reason in reason
|
|
1732
|
+
assert "no assignment was ever created for this run" in reason
|
|
1733
|
+
|
|
1734
|
+
|
|
1558
1735
|
def test_a_dead_drive_out_of_attempts_blocks_and_escalates():
|
|
1559
1736
|
entries = [
|
|
1560
1737
|
entry(1650, state=STATE_RUNNING, attempts=DEFAULT_MAX_ATTEMPTS - 1)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|