code-coordinator 0.5.164__tar.gz → 0.5.167__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.164 → code_coordinator-0.5.167}/PKG-INFO +1 -1
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/drive.py +111 -39
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/drive_queue.py +96 -3
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_drive.py +125 -5
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_drive_queue.py +177 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tui/src/app/pipeline.rs +18 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tui/src/app/tests.rs +57 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tui/src/app/types.rs +3 -5
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/.github/workflows/acceptance-web.yml +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/.github/workflows/release-tui.yml +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/.gitignore +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/CLAUDE.md +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/GOAL.md +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/LICENSE +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/MANIFEST.in +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/README.md +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/__init__.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/agent.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/audit.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/block_log.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/board_bool_guard.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/board_service.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/brain.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/claim.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/cli.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/client.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/comments.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/config.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dao.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/.gitignore +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/components.json +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/dist/assets/Gallery-BoKs3mpY.js +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/dist/assets/Terminal-CEsP08iX.js +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/dist/assets/index-CDHPlB6k.js +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/dist/index.html +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/dist/sw.js +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/eslint.config.js +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/index.html +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/package-lock.json +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/package.json +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/playwright.config.ts +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/postcss.config.js +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/src/App.tsx +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/src/api/client.ts +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/src/api/generated.ts +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/src/index.css +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/src/main.tsx +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/src/test-setup.ts +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/tailwind.config.js +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/tsconfig.json +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/tsconfig.node.json +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dashboard/webapp/vite.config.ts +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/db.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/deps.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/events.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/filelock.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/freshness.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/gates.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/goal.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/health/context.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/health/models.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/health/render.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/health/units.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/hooks.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/interactive.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/models.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/network.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/notify.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/openapi.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/parentage.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/plans.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/progress.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/release_window.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/reports.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/review.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/smoke.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/split_work.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/state.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/test_author.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/test_report.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/usage.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/install-agent.sh +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/pyproject.toml +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/setup.cfg +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/__init__.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/acceptance/ms-33/audit_1039.rs +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/acceptance/ms-33/contract.md +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/acceptance/ms-33/manifest.yml +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/acceptance/ms-38/contract.md +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/acceptance/ms-38/manifest.yml +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/acceptance/ms-65/contract.md +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/acceptance/ms-65/manifest.yml +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/conftest.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_config.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_db.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_events.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_init.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_models.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_network.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_no_direct_gh_calls.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_review.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_session.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_split.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_state.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tui/Cargo.lock +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tui/Cargo.toml +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tui/cargo-config-local-quadraui.toml.example +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tui/src/app/audit.rs +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tui/src/app/chat.rs +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tui/src/app/data.rs +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tui/src/app/dialogs.rs +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tui/src/app/doc_tabs.rs +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tui/src/app/drive.rs +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tui/src/app/drive_queue.rs +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tui/src/app/escalation.rs +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tui/src/app/events.rs +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tui/src/app/fixtures.rs +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tui/src/app/fleet_health.rs +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tui/src/app/fleet_sessions.rs +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tui/src/app/fleet_terminals.rs +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tui/src/app/format.rs +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tui/src/app/milestone_dag.rs +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tui/src/app/mod.rs +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tui/src/app/msv.rs +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tui/src/app/plans.rs +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tui/src/app/render.rs +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tui/src/app/reports.rs +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tui/src/app/sessions.rs +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tui/src/app/settings_ui.rs +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tui/src/app/sidebar.rs +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tui/src/app/terminal.rs +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tui/src/app/workspace.rs +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tui/src/bin/gtk.rs +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tui/src/commands.rs +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tui/src/lib.rs +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tui/src/main.rs +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tui/src/settings.rs +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tui/tests/acceptance.rs +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tui/tests/cli.rs +0 -0
- {code_coordinator-0.5.164 → code_coordinator-0.5.167}/tui/tests/fixtures/board_sample.json +0 -0
|
@@ -890,7 +890,20 @@ def _decide_acceptance_author(
|
|
|
890
890
|
# pass-through.
|
|
891
891
|
branch = state.acceptance_author_branch
|
|
892
892
|
probe = replace(state, work_branch=branch) if branch else state
|
|
893
|
-
|
|
893
|
+
commits = verifier.branch_has_commits(probe) if branch else False
|
|
894
|
+
if commits is None:
|
|
895
|
+
# #2426: `None` means the check could not be completed (e.g. a
|
|
896
|
+
# transient `git fetch` failure) — NOT evidence the branch is
|
|
897
|
+
# empty. Wait for the next poll to retry rather than
|
|
898
|
+
# misdiagnosing a verification failure as the terminal
|
|
899
|
+
# zero-commit dead end below.
|
|
900
|
+
return _wait(
|
|
901
|
+
label=(
|
|
902
|
+
f"ACCEPTANCE: JIT slice {aid} branch {branch!r} — could "
|
|
903
|
+
"not verify commits (git fetch failed), retrying"
|
|
904
|
+
)
|
|
905
|
+
)
|
|
906
|
+
if not commits:
|
|
894
907
|
# #2061: a commit-less ADVISORY row IS what an earlier-landed
|
|
895
908
|
# slice's stale/retried author row looks like — check the
|
|
896
909
|
# manifest before declaring failure.
|
|
@@ -936,7 +949,20 @@ def _decide_acceptance_author(
|
|
|
936
949
|
# `advisory` branch's probe exactly.
|
|
937
950
|
branch = state.acceptance_author_branch
|
|
938
951
|
probe = replace(state, work_branch=branch) if branch else state
|
|
939
|
-
|
|
952
|
+
commits = verifier.branch_has_commits(probe) if branch else False
|
|
953
|
+
if commits is None:
|
|
954
|
+
# #2426: same distinction as the ADVISORY branch above — a
|
|
955
|
+
# verification failure is not proof of an empty branch. This is
|
|
956
|
+
# exactly the claude-coordinator#2286 incident: a real pushed
|
|
957
|
+
# commit sat on the remote while a transient `git fetch` failure
|
|
958
|
+
# made this arm declare the branch commit-less and terminal.
|
|
959
|
+
return _wait(
|
|
960
|
+
label=(
|
|
961
|
+
f"ACCEPTANCE: JIT slice {aid} branch {branch!r} — could "
|
|
962
|
+
"not verify commits (git fetch failed), retrying"
|
|
963
|
+
)
|
|
964
|
+
)
|
|
965
|
+
if not commits:
|
|
940
966
|
# #2061 (coord-portal#13): a re-dispatched author that lands in
|
|
941
967
|
# a world where the slice is ALREADY on the default branch
|
|
942
968
|
# correctly does nothing — DONE with zero commits — and that is
|
|
@@ -1221,7 +1247,7 @@ def _acceptance_message(message: str, state: IssueState) -> str:
|
|
|
1221
1247
|
class MergeVerifier(Protocol):
|
|
1222
1248
|
"""The git/GitHub questions the state machine cannot answer itself."""
|
|
1223
1249
|
|
|
1224
|
-
def branch_has_commits(self, state: IssueState) -> bool: ...
|
|
1250
|
+
def branch_has_commits(self, state: IssueState) -> bool | None: ...
|
|
1225
1251
|
|
|
1226
1252
|
def verify_merged(self, state: IssueState) -> bool: ...
|
|
1227
1253
|
|
|
@@ -1254,9 +1280,23 @@ class GitMergeVerifier:
|
|
|
1254
1280
|
check=False,
|
|
1255
1281
|
)
|
|
1256
1282
|
|
|
1257
|
-
def branch_has_commits(self, state: IssueState) -> bool:
|
|
1258
|
-
"""True when *branch*
|
|
1259
|
-
default branch
|
|
1283
|
+
def branch_has_commits(self, state: IssueState) -> bool | None:
|
|
1284
|
+
"""``True``/``False`` when *branch* was actually checked against the
|
|
1285
|
+
default branch; ``None`` when the check could not be completed.
|
|
1286
|
+
|
|
1287
|
+
``False`` means VERIFIED empty: the fetches and the ``rev-list``
|
|
1288
|
+
count all succeeded, and the count was exactly 0. ``None`` means no
|
|
1289
|
+
such evidence exists — a transient ``git fetch`` failure (network
|
|
1290
|
+
blip, GitHub hiccup, SSH auth glitch — see ``is_ci_unreadable_reason``
|
|
1291
|
+
for the CI-side equivalent of this exact distinction), a missing
|
|
1292
|
+
local checkout, or an unparsable ``rev-list`` count. Before #2426
|
|
1293
|
+
every one of those collapsed into ``False``, indistinguishable from a
|
|
1294
|
+
genuinely empty branch — and callers treated ``False`` as proof of a
|
|
1295
|
+
TERMINAL dead end, misdiagnosing a fetch hiccup as "nothing was ever
|
|
1296
|
+
authored" (claude-coordinator#2286: a real, pushed commit sat on the
|
|
1297
|
+
remote while `coord drive` declared the branch commit-less and burned
|
|
1298
|
+
11 retry cycles re-authoring from scratch). ``None`` must never be
|
|
1299
|
+
treated as "no commits" — callers wait and let the next poll retry.
|
|
1260
1300
|
|
|
1261
1301
|
Used to tell a REAL zero-commit advisory apart from the #1357 false
|
|
1262
1302
|
positive, where the agent downgrades a good DONE over an artifact glob
|
|
@@ -1267,19 +1307,19 @@ class GitMergeVerifier:
|
|
|
1267
1307
|
return False
|
|
1268
1308
|
base = self._base(state)
|
|
1269
1309
|
if base is None:
|
|
1270
|
-
return
|
|
1310
|
+
return None
|
|
1271
1311
|
target = state.repo_default_branch or "main"
|
|
1272
1312
|
if self._git(base, "fetch", "--quiet", "origin", target).returncode != 0:
|
|
1273
|
-
return
|
|
1313
|
+
return None
|
|
1274
1314
|
if self._git(base, "fetch", "--quiet", "origin", branch).returncode != 0:
|
|
1275
|
-
return
|
|
1315
|
+
return None
|
|
1276
1316
|
proc = self._git(base, "rev-list", "--count", f"origin/{target}..FETCH_HEAD")
|
|
1277
1317
|
if proc.returncode != 0:
|
|
1278
|
-
return
|
|
1318
|
+
return None
|
|
1279
1319
|
try:
|
|
1280
1320
|
return int((proc.stdout or "0").strip() or 0) > 0
|
|
1281
1321
|
except ValueError:
|
|
1282
|
-
return
|
|
1322
|
+
return None
|
|
1283
1323
|
|
|
1284
1324
|
def verify_merged(self, state: IssueState) -> bool:
|
|
1285
1325
|
"""Confirm the branch actually landed on the target.
|
|
@@ -1699,16 +1739,22 @@ def decide(
|
|
|
1699
1739
|
pass
|
|
1700
1740
|
elif state.work_status == "advisory":
|
|
1701
1741
|
advisory = _decide_advisory(state, opts, counters, machine, verifier)
|
|
1702
|
-
# #2416: `_decide_advisory`
|
|
1703
|
-
#
|
|
1704
|
-
#
|
|
1742
|
+
# #2416: `_decide_advisory` returns a RUN action (a bounded `coord
|
|
1743
|
+
# retry` dispatch) for the zero-commit case, not only an EXIT —
|
|
1744
|
+
# `is_exit` alone would let a RUN action fall through to the
|
|
1705
1745
|
# Test/Review/Merge logic below as though the row were validated
|
|
1706
|
-
# work.
|
|
1707
|
-
#
|
|
1708
|
-
#
|
|
1709
|
-
|
|
1746
|
+
# work. #2426: it returns an explicit WAIT for the "could not verify
|
|
1747
|
+
# — fetch failed" case, which must ALSO be this poll's whole answer,
|
|
1748
|
+
# not folded into the fall-through below (that fall-through means
|
|
1749
|
+
# "commits confirmed present, proceed as normal work", which a
|
|
1750
|
+
# verification failure has not established either way). Only `None`
|
|
1751
|
+
# — "proceeding under --accept-advisory", commits confirmed present
|
|
1752
|
+
# — falls through, carrying its warning.
|
|
1753
|
+
if advisory is not None:
|
|
1710
1754
|
return advisory
|
|
1711
|
-
warnings =
|
|
1755
|
+
warnings = (
|
|
1756
|
+
"ADVISORY with commits present — proceeding per --accept-advisory (#1357)",
|
|
1757
|
+
)
|
|
1712
1758
|
elif state.work_status == "refused_policy":
|
|
1713
1759
|
# #2234: the worker exited cleanly, pushed 0 commits, and its own
|
|
1714
1760
|
# final message cited a standing repo-rule prohibition (`coord.agent.
|
|
@@ -1762,18 +1808,25 @@ def decide(
|
|
|
1762
1808
|
# applies when there is nothing to test, review, or merge. A labelled
|
|
1763
1809
|
# issue whose worker DID push commits (the label describes the common
|
|
1764
1810
|
# case, not a hard rule) falls through unchanged — `branch_has_commits`
|
|
1765
|
-
# is False only for the genuine 0-commit shape
|
|
1766
|
-
|
|
1767
|
-
|
|
1768
|
-
|
|
1769
|
-
|
|
1770
|
-
|
|
1771
|
-
|
|
1772
|
-
|
|
1773
|
-
|
|
1774
|
-
|
|
1775
|
-
|
|
1776
|
-
|
|
1811
|
+
# is False only for the genuine 0-commit shape; `None` (#2426 — the
|
|
1812
|
+
# check could not be completed, e.g. a `git fetch` failure) is neither
|
|
1813
|
+
# "done" nor "push commits", so it waits below instead of guessing.
|
|
1814
|
+
if state.work_status == "done" and DELIVERABLE_ANALYSIS_LABEL in state.issue_labels:
|
|
1815
|
+
commits = verifier.branch_has_commits(state) if state.work_branch else False
|
|
1816
|
+
if commits is None:
|
|
1817
|
+
return _wait(
|
|
1818
|
+
label=(
|
|
1819
|
+
f"ANALYSIS: {state.work_aid} — could not verify branch "
|
|
1820
|
+
"commits (git fetch failed), retrying"
|
|
1821
|
+
)
|
|
1822
|
+
)
|
|
1823
|
+
if not commits:
|
|
1824
|
+
return _succeed(
|
|
1825
|
+
f"✓ ANALYSIS DELIVERABLE — {state.work_aid} completed with 0 "
|
|
1826
|
+
f"commits (issue labelled `{DELIVERABLE_ANALYSIS_LABEL}`); the "
|
|
1827
|
+
"worker's final message is the deliverable and was posted to "
|
|
1828
|
+
"the issue automatically — nothing to test, review, or merge."
|
|
1829
|
+
)
|
|
1777
1830
|
|
|
1778
1831
|
# A 'done' row with no branch never pushed anything either.
|
|
1779
1832
|
if not state.work_branch:
|
|
@@ -1930,7 +1983,7 @@ def _decide_advisory(
|
|
|
1930
1983
|
counters: DriveCounters,
|
|
1931
1984
|
machine: str,
|
|
1932
1985
|
verifier: MergeVerifier,
|
|
1933
|
-
) -> Action:
|
|
1986
|
+
) -> Action | None:
|
|
1934
1987
|
"""The #448 downgrade: the agent flagged a zero-commit / stash-miss exit.
|
|
1935
1988
|
|
|
1936
1989
|
#1357 makes this a FALSE POSITIVE for every Python-only headless assignment
|
|
@@ -1952,8 +2005,30 @@ def _decide_advisory(
|
|
|
1952
2005
|
advisory_retries`) before finally giving up, so a row whose correct
|
|
1953
2006
|
resolution really is "dispatch something else" still reaches a terminal
|
|
1954
2007
|
`_die()` naming `coord retry` for a human — never an unbounded loop.
|
|
2008
|
+
|
|
2009
|
+
Returns ``None`` only for the "commits confirmed present, proceed under
|
|
2010
|
+
--accept-advisory" case — the caller (`decide`) reads ``None`` as "fall
|
|
2011
|
+
through to the normal Test/Review/Merge machinery", the same "nothing to
|
|
2012
|
+
report, proceed" convention `_decide_test`/`_decide_review`/
|
|
2013
|
+
`_decide_acceptance_gate` already use. Every other outcome, including the
|
|
2014
|
+
#2426 "could not verify" case below, returns a real ``Action`` that IS
|
|
2015
|
+
this poll's whole answer.
|
|
1955
2016
|
"""
|
|
1956
|
-
|
|
2017
|
+
branch = state.work_branch
|
|
2018
|
+
commits = verifier.branch_has_commits(state) if branch else False
|
|
2019
|
+
if commits is None:
|
|
2020
|
+
# #2426: `git fetch` failing does not mean the branch is empty — it
|
|
2021
|
+
# means nothing was learned. Wait for the next poll to retry the
|
|
2022
|
+
# check itself; do NOT spend an `advisory_retries` budget attempt (or
|
|
2023
|
+
# worse, `_die()`) on a verification failure that says nothing about
|
|
2024
|
+
# what the branch actually contains.
|
|
2025
|
+
return _wait(
|
|
2026
|
+
label=(
|
|
2027
|
+
f"WORK: {state.work_aid} ADVISORY — could not verify branch "
|
|
2028
|
+
"commits (git fetch failed), retrying"
|
|
2029
|
+
)
|
|
2030
|
+
)
|
|
2031
|
+
if not commits:
|
|
1957
2032
|
budget = opts.max_work_retries
|
|
1958
2033
|
if counters.advisory_retries >= budget:
|
|
1959
2034
|
return _die(
|
|
@@ -1992,12 +2067,9 @@ def _decide_advisory(
|
|
|
1992
2067
|
" Proceed anyway with --accept-advisory (and fix #1357 to stop "
|
|
1993
2068
|
"needing it)."
|
|
1994
2069
|
)
|
|
1995
|
-
|
|
1996
|
-
|
|
1997
|
-
|
|
1998
|
-
"ADVISORY with commits present — proceeding per --accept-advisory (#1357)",
|
|
1999
|
-
),
|
|
2000
|
-
)
|
|
2070
|
+
# Commits confirmed present, --accept-advisory set: fall through to the
|
|
2071
|
+
# normal Test/Review/Merge machinery (the caller attaches the warning).
|
|
2072
|
+
return None
|
|
2001
2073
|
|
|
2002
2074
|
|
|
2003
2075
|
def _decide_acceptance_gate(
|
|
@@ -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
|
|
@@ -87,7 +87,7 @@ class FakeVerifier:
|
|
|
87
87
|
def __init__(
|
|
88
88
|
self,
|
|
89
89
|
*,
|
|
90
|
-
has_commits: bool = True,
|
|
90
|
+
has_commits: bool | None = True,
|
|
91
91
|
merged: bool = True,
|
|
92
92
|
head_sha: str | None = "deadbeef" * 5,
|
|
93
93
|
) -> None:
|
|
@@ -98,7 +98,7 @@ class FakeVerifier:
|
|
|
98
98
|
self.merged_calls = 0
|
|
99
99
|
self.head_sha_calls = 0
|
|
100
100
|
|
|
101
|
-
def branch_has_commits(self, s: IssueState) -> bool:
|
|
101
|
+
def branch_has_commits(self, s: IssueState) -> bool | None:
|
|
102
102
|
self.commits_calls += 1
|
|
103
103
|
return self._has_commits
|
|
104
104
|
|
|
@@ -1019,6 +1019,29 @@ def test_oracle_active_advisory_with_no_commits_is_not_terminal_when_the_slice_a
|
|
|
1019
1019
|
)
|
|
1020
1020
|
|
|
1021
1021
|
|
|
1022
|
+
def test_oracle_active_advisory_with_unverifiable_branch_waits():
|
|
1023
|
+
"""#2426: `branch_has_commits` returning `None` (e.g. a `git fetch`
|
|
1024
|
+
failure) must NOT be treated as "no commits" — that misdiagnoses a
|
|
1025
|
+
transient verification failure as the terminal "nothing was authored"
|
|
1026
|
+
dead end (claude-coordinator#2286: a real, pushed commit sat on the
|
|
1027
|
+
remote while this exact path declared the branch commit-less). It must
|
|
1028
|
+
wait and let the next poll retry the check instead."""
|
|
1029
|
+
oracle = OracleDecision(True, "ORACLE DRIVE", tracking_issue=1120)
|
|
1030
|
+
verifier = FakeVerifier(has_commits=None)
|
|
1031
|
+
action = step(
|
|
1032
|
+
oracle_state(
|
|
1033
|
+
acceptance_author_aid="ta1",
|
|
1034
|
+
acceptance_author_status="advisory",
|
|
1035
|
+
acceptance_author_branch="test-author-ms-65-slice-2286",
|
|
1036
|
+
),
|
|
1037
|
+
oracle=oracle,
|
|
1038
|
+
verifier=verifier,
|
|
1039
|
+
)
|
|
1040
|
+
assert action.kind == WAIT
|
|
1041
|
+
assert not action.is_exit
|
|
1042
|
+
assert "no commits" not in (action.message or "")
|
|
1043
|
+
|
|
1044
|
+
|
|
1022
1045
|
def test_oracle_active_advisory_with_commits_requires_accept_advisory():
|
|
1023
1046
|
"""The #1357 false-positive shape — real commits, downgraded to
|
|
1024
1047
|
advisory anyway — must not be treated as "still landing"; it needs the
|
|
@@ -1148,6 +1171,29 @@ def test_oracle_active_done_with_no_branch_is_terminal():
|
|
|
1148
1171
|
assert "no commits" in action.message
|
|
1149
1172
|
|
|
1150
1173
|
|
|
1174
|
+
def test_oracle_active_done_with_unverifiable_branch_waits():
|
|
1175
|
+
"""#2426: the exact incident this issue documents — a terminal
|
|
1176
|
+
`test-author` DONE row whose branch really did carry a commit
|
|
1177
|
+
(claude-coordinator#2286's `test-author-ms-65-slice-2286`, commit
|
|
1178
|
+
`250b4df8`), observed through a `git fetch` failure. Must wait and
|
|
1179
|
+
retry, not declare DONE terminal-with-no-commits and burn a re-author
|
|
1180
|
+
cycle."""
|
|
1181
|
+
oracle = OracleDecision(True, "ORACLE DRIVE", tracking_issue=1120)
|
|
1182
|
+
verifier = FakeVerifier(has_commits=None)
|
|
1183
|
+
action = step(
|
|
1184
|
+
oracle_state(
|
|
1185
|
+
acceptance_author_aid="ta1",
|
|
1186
|
+
acceptance_author_status="done",
|
|
1187
|
+
acceptance_author_branch="test-author-ms-65-slice-2286",
|
|
1188
|
+
),
|
|
1189
|
+
oracle=oracle,
|
|
1190
|
+
verifier=verifier,
|
|
1191
|
+
)
|
|
1192
|
+
assert action.kind == WAIT
|
|
1193
|
+
assert not action.is_exit
|
|
1194
|
+
assert "no commits" not in (action.message or "")
|
|
1195
|
+
|
|
1196
|
+
|
|
1151
1197
|
def test_oracle_active_done_with_commits_lands_the_slice():
|
|
1152
1198
|
"""#2079: a DONE slice whose branch carries commits is MERGED by this
|
|
1153
1199
|
driver, not waited on.
|
|
@@ -1752,6 +1798,23 @@ def test_advisory_with_no_commits_retries_via_coord_retry_then_stops_at_the_cap(
|
|
|
1752
1798
|
assert verifier.commits_calls == 2
|
|
1753
1799
|
|
|
1754
1800
|
|
|
1801
|
+
def test_advisory_with_unverifiable_branch_waits_without_spending_a_retry():
|
|
1802
|
+
"""#2426: a `git fetch` failure while checking the branch is not proof
|
|
1803
|
+
it's empty. Must wait for the next poll rather than either spending an
|
|
1804
|
+
`advisory_retries` budget attempt or (once the budget is spent) dying
|
|
1805
|
+
with the terminal "no commits" message on evidence that never
|
|
1806
|
+
materialized."""
|
|
1807
|
+
verifier = FakeVerifier(has_commits=None)
|
|
1808
|
+
counters = DriveCounters()
|
|
1809
|
+
opts = DriveOptions(machine="precision", max_work_retries=1)
|
|
1810
|
+
s = state(work_aid="w1", work_status="advisory", work_branch="b")
|
|
1811
|
+
|
|
1812
|
+
action = step(s, opts, verifier=verifier, counters=counters)
|
|
1813
|
+
assert action.kind == WAIT
|
|
1814
|
+
assert not action.is_exit
|
|
1815
|
+
assert counters.advisory_retries == 0
|
|
1816
|
+
|
|
1817
|
+
|
|
1755
1818
|
def test_advisory_with_no_commits_retry_is_unaffected_by_accept_advisory():
|
|
1756
1819
|
"""#1606: `--accept-advisory` exists to unblock the #1357 false-positive
|
|
1757
1820
|
(real commits, downgraded status) — it must NOT adopt a genuine
|
|
@@ -1850,6 +1913,23 @@ def test_analysis_deliverable_done_with_no_commits_succeeds():
|
|
|
1850
1913
|
assert "deliverable:analysis" in action.message
|
|
1851
1914
|
|
|
1852
1915
|
|
|
1916
|
+
def test_analysis_deliverable_done_with_unverifiable_branch_waits():
|
|
1917
|
+
"""#2426: a `git fetch` failure while checking an analysis-labelled
|
|
1918
|
+
branch is neither "0-commit success" nor "commits pushed, fall
|
|
1919
|
+
through" — it's no evidence at all. Must wait for the next poll."""
|
|
1920
|
+
action = step(
|
|
1921
|
+
state(
|
|
1922
|
+
work_aid="w1",
|
|
1923
|
+
work_status="done",
|
|
1924
|
+
work_branch="issue-2132-diagnose",
|
|
1925
|
+
issue_labels=("deliverable:analysis",),
|
|
1926
|
+
),
|
|
1927
|
+
verifier=FakeVerifier(has_commits=None),
|
|
1928
|
+
)
|
|
1929
|
+
assert action.kind == WAIT
|
|
1930
|
+
assert not action.is_exit
|
|
1931
|
+
|
|
1932
|
+
|
|
1853
1933
|
def test_analysis_deliverable_done_with_no_branch_at_all_succeeds():
|
|
1854
1934
|
"""Same as above when the reap never captured a branch name at all
|
|
1855
1935
|
(e.g. the worktree was already gone) — `not state.work_branch` alone
|
|
@@ -4290,20 +4370,60 @@ def test_branch_has_commits_is_false_for_zero(recorded_git, tmp_path):
|
|
|
4290
4370
|
assert GitMergeVerifier(repo_path=str(tmp_path)).branch_has_commits(s) is False
|
|
4291
4371
|
|
|
4292
4372
|
|
|
4293
|
-
def
|
|
4373
|
+
def test_branch_has_commits_is_none_when_rev_list_fails(recorded_git, tmp_path):
|
|
4374
|
+
"""#2426: both fetches succeeded but `rev-list` itself failed — still no
|
|
4375
|
+
completed count, so still `None`, not `False`."""
|
|
4376
|
+
_calls, scripted = recorded_git
|
|
4377
|
+
(tmp_path / ".git").mkdir()
|
|
4378
|
+
scripted[("rev-list",)] = (128, "")
|
|
4379
|
+
s = state(work_branch="b")
|
|
4380
|
+
assert GitMergeVerifier(repo_path=str(tmp_path)).branch_has_commits(s) is None
|
|
4381
|
+
|
|
4382
|
+
|
|
4383
|
+
def test_branch_has_commits_is_none_when_rev_list_output_is_unparsable(
|
|
4294
4384
|
recorded_git, tmp_path
|
|
4295
4385
|
):
|
|
4386
|
+
"""#2426: a malformed count is the same "learned nothing" shape as a
|
|
4387
|
+
failed command — `None`, not `False`."""
|
|
4388
|
+
_calls, scripted = recorded_git
|
|
4389
|
+
(tmp_path / ".git").mkdir()
|
|
4390
|
+
scripted[("rev-list",)] = (0, "not-a-number\n")
|
|
4391
|
+
s = state(work_branch="b")
|
|
4392
|
+
assert GitMergeVerifier(repo_path=str(tmp_path)).branch_has_commits(s) is None
|
|
4393
|
+
|
|
4394
|
+
|
|
4395
|
+
def test_branch_has_commits_is_none_when_a_fetch_fails(recorded_git, tmp_path):
|
|
4396
|
+
"""#2426: a `git fetch` failure (returncode 128 here covers both "branch
|
|
4397
|
+
genuinely doesn't exist on the remote" and "transient network/auth
|
|
4398
|
+
blip" — the two are indistinguishable from the exit code alone) must NOT
|
|
4399
|
+
collapse into `False`. `False` is reserved for a check that actually
|
|
4400
|
+
completed and counted zero commits; a failed fetch produced no such
|
|
4401
|
+
count, so it is `None` — "couldn't verify" — not "verified empty"."""
|
|
4296
4402
|
_calls, scripted = recorded_git
|
|
4297
4403
|
(tmp_path / ".git").mkdir()
|
|
4298
4404
|
scripted[("fetch", "b")] = (128, "")
|
|
4299
4405
|
s = state(work_branch="b")
|
|
4300
|
-
assert GitMergeVerifier(repo_path=str(tmp_path)).branch_has_commits(s) is
|
|
4406
|
+
assert GitMergeVerifier(repo_path=str(tmp_path)).branch_has_commits(s) is None
|
|
4407
|
+
|
|
4408
|
+
|
|
4409
|
+
def test_branch_has_commits_is_none_when_the_target_fetch_fails(
|
|
4410
|
+
recorded_git, tmp_path
|
|
4411
|
+
):
|
|
4412
|
+
"""Same #2426 distinction, for the OTHER fetch (`origin/<target>`)."""
|
|
4413
|
+
_calls, scripted = recorded_git
|
|
4414
|
+
(tmp_path / ".git").mkdir()
|
|
4415
|
+
scripted[("fetch", "main")] = (128, "")
|
|
4416
|
+
s = state(work_branch="b", repo_default_branch="main")
|
|
4417
|
+
assert GitMergeVerifier(repo_path=str(tmp_path)).branch_has_commits(s) is None
|
|
4301
4418
|
|
|
4302
4419
|
|
|
4303
4420
|
def test_the_verifiers_are_inert_without_a_local_checkout(tmp_path):
|
|
4421
|
+
"""#2426: no local checkout means no evidence either way — `None`, not
|
|
4422
|
+
`False`. `verify_merged` is untouched by #2426 (GitHub is its primary
|
|
4423
|
+
source of truth, not this local checkout) and keeps its `False`."""
|
|
4304
4424
|
verifier = GitMergeVerifier(repo_path=str(tmp_path / "nope"))
|
|
4305
4425
|
s = state(work_branch="b", repo_github="")
|
|
4306
|
-
assert verifier.branch_has_commits(s) is
|
|
4426
|
+
assert verifier.branch_has_commits(s) is None
|
|
4307
4427
|
assert verifier.verify_merged(s) is False
|
|
4308
4428
|
|
|
4309
4429
|
|