code-coordinator 0.5.84__tar.gz → 0.5.85__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.84 → code_coordinator-0.5.85}/PKG-INFO +1 -1
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/code_coordinator.egg-info/SOURCES.txt +1 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/code_coordinator.egg-info/scm_file_list.json +1 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/auto_loop.py +10 -2
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/commands/release.py +121 -2
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/commands/status.py +45 -1
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/machine_pause.py +77 -5
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/release_cordon.py +359 -7
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/release_propagate.py +104 -11
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/review.py +24 -6
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/docs/AGENT_OPERATIONS.md +50 -0
- code_coordinator-0.5.85/tests/test_release_cordon_deadlock_2240.py +1016 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/.github/workflows/release-tui.yml +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/.gitignore +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/CLAUDE.md +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/GOAL.md +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/LICENSE +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/MANIFEST.in +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/README.md +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/__init__.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/agent.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/audit.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/board_bool_guard.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/board_service.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/brain.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/claim.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/cli.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/client.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/comments.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/config.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dao.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/.gitignore +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/components.json +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/dist/assets/Gallery-Cq84itDE.js +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/dist/assets/Terminal-DOXLcMue.js +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/dist/assets/index-DHn-RIJ8.js +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/dist/index.html +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/dist/sw.js +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/eslint.config.js +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/index.html +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/package-lock.json +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/package.json +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/playwright.config.ts +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/postcss.config.js +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/App.tsx +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/api/client.ts +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/api/generated.ts +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/index.css +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/main.tsx +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/test-setup.ts +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/tailwind.config.js +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/tsconfig.json +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/tsconfig.node.json +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/vite.config.ts +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/db.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/deps.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/drive.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/events.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/filelock.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/freshness.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/gates.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/goal.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/health/context.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/health/models.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/health/render.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/health/units.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/hooks.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/interactive.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/models.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/network.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/notify.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/openapi.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/parentage.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/plans.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/progress.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/release_window.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/reports.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/smoke.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/split_work.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/state.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/test_author.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/test_report.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/usage.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/install-agent.sh +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/pyproject.toml +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/setup.cfg +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/__init__.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/acceptance/ms-33/audit_1039.rs +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/acceptance/ms-33/contract.md +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/acceptance/ms-33/manifest.yml +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/acceptance/ms-38/contract.md +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/acceptance/ms-38/manifest.yml +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/conftest.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_config.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_db.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_events.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_init.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_models.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_network.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_no_direct_gh_calls.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_review.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_session.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_split.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_state.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/Cargo.lock +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/Cargo.toml +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/cargo-config-local-quadraui.toml.example +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/src/app/audit.rs +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/src/app/chat.rs +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/src/app/data.rs +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/src/app/dialogs.rs +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/src/app/drive.rs +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/src/app/drive_queue.rs +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/src/app/escalation.rs +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/src/app/events.rs +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/src/app/fixtures.rs +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/src/app/fleet_health.rs +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/src/app/fleet_sessions.rs +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/src/app/fleet_terminals.rs +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/src/app/format.rs +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/src/app/milestone_dag.rs +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/src/app/mod.rs +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/src/app/msv.rs +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/src/app/pipeline.rs +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/src/app/plans.rs +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/src/app/render.rs +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/src/app/reports.rs +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/src/app/sessions.rs +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/src/app/settings_ui.rs +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/src/app/sidebar.rs +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/src/app/terminal.rs +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/src/app/tests.rs +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/src/app/types.rs +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/src/app/workspace.rs +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/src/bin/gtk.rs +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/src/commands.rs +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/src/lib.rs +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/src/main.rs +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/src/settings.rs +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/tests/acceptance.rs +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/tests/cli.rs +0 -0
- {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/tests/fixtures/board_sample.json +0 -0
|
@@ -668,6 +668,7 @@ tests/test_reconcile_merges.py
|
|
|
668
668
|
tests/test_reconcile_usage_limit_done.py
|
|
669
669
|
tests/test_refine_chat.py
|
|
670
670
|
tests/test_release_cordon_2101.py
|
|
671
|
+
tests/test_release_cordon_deadlock_2240.py
|
|
671
672
|
tests/test_release_propagate.py
|
|
672
673
|
tests/test_release_unified_1242.py
|
|
673
674
|
tests/test_release_verify.py
|
{code_coordinator-0.5.84 → code_coordinator-0.5.85}/code_coordinator.egg-info/scm_file_list.json
RENAMED
|
@@ -698,6 +698,7 @@
|
|
|
698
698
|
"tests/test_reconcile_usage_limit_done.py",
|
|
699
699
|
"tests/test_refine_chat.py",
|
|
700
700
|
"tests/test_release_cordon_2101.py",
|
|
701
|
+
"tests/test_release_cordon_deadlock_2240.py",
|
|
701
702
|
"tests/test_release_propagate.py",
|
|
702
703
|
"tests/test_release_unified_1242.py",
|
|
703
704
|
"tests/test_release_verify.py",
|
|
@@ -958,8 +958,16 @@ def _dispatch_fix(
|
|
|
958
958
|
machine = next(
|
|
959
959
|
(m for m in config.machines if m.name == work.machine_name), None
|
|
960
960
|
)
|
|
961
|
-
|
|
962
|
-
|
|
961
|
+
# #2240: the pause set here is `follow_on_paused_set()`, NOT `paused_set()`
|
|
962
|
+
# — a fix leg is the tail of work that is already running (dispatched
|
|
963
|
+
# after a `request-changes` review verdict on a row that has not gone
|
|
964
|
+
# anywhere new), so a release cordon ("route no NEW work here") must not
|
|
965
|
+
# filter its host out. This is the same fix as `coord/review.py`'s
|
|
966
|
+
# reviewer-selection change; leaving this call on `paused_set()` would
|
|
967
|
+
# reproduce the fleet-wide deadlock for the fix leg instead of the
|
|
968
|
+
# review leg. Explicit pauses and quiet hours still apply.
|
|
969
|
+
from coord.machine_pause import follow_on_paused_set
|
|
970
|
+
paused = follow_on_paused_set(config.machines)
|
|
963
971
|
if (
|
|
964
972
|
machine is None
|
|
965
973
|
or not machine.can_work_on(work.repo_name)
|
|
@@ -506,6 +506,17 @@ def _lane_versions_by_host(report) -> dict[str, list[str | None]]:
|
|
|
506
506
|
@click.option("--drain-deadline", default=None, type=float,
|
|
507
507
|
help="Seconds a host may fail to drain before the cordon "
|
|
508
508
|
"escalates loudly (default 5400).")
|
|
509
|
+
@click.option("--cordon-max-deferrals", default=None, type=int,
|
|
510
|
+
help="#2240: consecutive DEFERRED runs that may hold a cordon "
|
|
511
|
+
"for the same target before it is released outright "
|
|
512
|
+
"(default 2). A cordon that has failed to produce a window "
|
|
513
|
+
"twice running is not draining anything — it is blocking "
|
|
514
|
+
"the review dispatch it is waiting for. 0 disables the "
|
|
515
|
+
"bound and re-arms the deadlock.")
|
|
516
|
+
@click.option("--cordon-cooldown", default=None, type=float,
|
|
517
|
+
help="Seconds after a #2240 release before cordoning may resume "
|
|
518
|
+
"(default 1800). Without it the next run re-cordons — the "
|
|
519
|
+
"hosts are still behind — and the deadlock re-arms.")
|
|
509
520
|
@click.option("--json", "as_json", is_flag=True, help="Emit the propagation record as JSON.")
|
|
510
521
|
def release_propagate( # noqa: PLR0912, PLR0915 — a pipeline; the decisions are elsewhere
|
|
511
522
|
config_path: Path,
|
|
@@ -522,6 +533,8 @@ def release_propagate( # noqa: PLR0912, PLR0915 — a pipeline; the decisions a
|
|
|
522
533
|
cordon_after: int | None,
|
|
523
534
|
cordon_ttl: float | None,
|
|
524
535
|
drain_deadline: float | None,
|
|
536
|
+
cordon_max_deferrals: int | None,
|
|
537
|
+
cordon_cooldown: float | None,
|
|
525
538
|
as_json: bool,
|
|
526
539
|
) -> None:
|
|
527
540
|
"""One propagation attempt. Exit 0 on deferral, 1 on red, 2 on rollback.
|
|
@@ -559,6 +572,16 @@ def release_propagate( # noqa: PLR0912, PLR0915 — a pipeline; the decisions a
|
|
|
559
572
|
run that defers without cordoning is a run that will defer again in 20
|
|
560
573
|
minutes for exactly the same reason, which is how the fleet sat eleven
|
|
561
574
|
releases behind for a day with elitebook idle and rollable throughout.
|
|
575
|
+
|
|
576
|
+
#2240: and a deferral is not passive either. The cordon it leaves behind
|
|
577
|
+
is what blocks the review dispatch that would let the between-legs entry
|
|
578
|
+
finish, and that unfinished entry is what defers the next run — four
|
|
579
|
+
cycles, 70 minutes, three idle machines. So the cordon now has a bound
|
|
580
|
+
that nothing else has to be running for: ``--cordon-max-deferrals``
|
|
581
|
+
consecutive deferrals for one target and every cordon is dropped, with
|
|
582
|
+
``--cordon-cooldown`` seconds before any may be set again. The counter
|
|
583
|
+
lives in the propagation journal, because the process holding it is
|
|
584
|
+
restarted by the roll it gates.
|
|
562
585
|
"""
|
|
563
586
|
import json as _json # noqa: PLC0415
|
|
564
587
|
import time # noqa: PLC0415
|
|
@@ -686,6 +709,9 @@ def release_propagate( # noqa: PLR0912, PLR0915 — a pipeline; the decisions a
|
|
|
686
709
|
ttl_seconds=cordon_ttl,
|
|
687
710
|
drain_deadline=drain_deadline,
|
|
688
711
|
dry_run=dry_run,
|
|
712
|
+
state_dir=state_dir,
|
|
713
|
+
max_deferrals=cordon_max_deferrals,
|
|
714
|
+
release_cooldown=cordon_cooldown,
|
|
689
715
|
)
|
|
690
716
|
|
|
691
717
|
if fully_busy and not force:
|
|
@@ -1042,7 +1068,7 @@ def _oldest_version(versions: list[str | None]) -> str | None:
|
|
|
1042
1068
|
return min(readable, key=_key)
|
|
1043
1069
|
|
|
1044
1070
|
|
|
1045
|
-
def _apply_cordons(
|
|
1071
|
+
def _apply_cordons( # noqa: PLR0912 — one linear apply-the-plan pass
|
|
1046
1072
|
*,
|
|
1047
1073
|
hosts: list[str],
|
|
1048
1074
|
report,
|
|
@@ -1053,6 +1079,9 @@ def _apply_cordons(
|
|
|
1053
1079
|
ttl_seconds: float | None,
|
|
1054
1080
|
drain_deadline: float | None,
|
|
1055
1081
|
dry_run: bool,
|
|
1082
|
+
state_dir: Path | None = None,
|
|
1083
|
+
max_deferrals: int | None = None,
|
|
1084
|
+
release_cooldown: float | None = None,
|
|
1056
1085
|
) -> dict:
|
|
1057
1086
|
"""Plan and apply this run's cordons. Returns the journal fragment.
|
|
1058
1087
|
|
|
@@ -1060,16 +1089,27 @@ def _apply_cordons(
|
|
|
1060
1089
|
error and the roll continues on its existing (quiescence-based) rules.
|
|
1061
1090
|
Failing the whole propagation because the cordon could not be renewed
|
|
1062
1091
|
would make #2101's fix strictly worse than not having it.
|
|
1092
|
+
|
|
1093
|
+
#2240: *state_dir* is where the propagation journal lives, and the journal
|
|
1094
|
+
is where "how many runs in a row has this cordon now deferred?" is stored
|
|
1095
|
+
— the process holding the answer in memory is restarted by the roll it is
|
|
1096
|
+
gating, so an in-memory counter would reset exactly when the deadlock is
|
|
1097
|
+
at its worst. An unreadable journal degrades to "no pressure" (the
|
|
1098
|
+
pre-#2240 behaviour) rather than to a spurious release: dropping the
|
|
1099
|
+
fleet's cordon because a file could not be read is the wrong direction to
|
|
1100
|
+
fail in.
|
|
1063
1101
|
"""
|
|
1064
1102
|
import time # noqa: PLC0415
|
|
1065
1103
|
|
|
1066
1104
|
from coord import release_cordon as rc # noqa: PLC0415
|
|
1105
|
+
from coord import release_propagate as rp # noqa: PLC0415
|
|
1067
1106
|
from coord.machine_pause import ( # noqa: PLC0415
|
|
1068
1107
|
clear_cordon,
|
|
1069
1108
|
cordons as read_cordons,
|
|
1070
1109
|
set_cordon,
|
|
1071
1110
|
)
|
|
1072
1111
|
|
|
1112
|
+
now = time.time()
|
|
1073
1113
|
outcome = rc.CordonOutcome()
|
|
1074
1114
|
try:
|
|
1075
1115
|
existing = read_cordons()
|
|
@@ -1077,11 +1117,31 @@ def _apply_cordons(
|
|
|
1077
1117
|
outcome.errors.append(f"could not read the cordon store: {exc}")
|
|
1078
1118
|
return outcome.to_dict()
|
|
1079
1119
|
|
|
1120
|
+
pressure = rc.DeferralPressure()
|
|
1121
|
+
if state_dir is not None:
|
|
1122
|
+
try:
|
|
1123
|
+
pressure = rc.deferral_pressure(
|
|
1124
|
+
rp.read_records(state_dir), target_version=target_version
|
|
1125
|
+
)
|
|
1126
|
+
except Exception as exc: # noqa: BLE001 — see docstring
|
|
1127
|
+
outcome.errors.append(f"could not read the propagation journal: {exc}")
|
|
1128
|
+
outcome.pressure = pressure.to_dict()
|
|
1129
|
+
|
|
1130
|
+
# #2240 review: resolved once and journaled on every run (not just a
|
|
1131
|
+
# releasing one) via `outcome.max_deferrals`, so `deferral_pressure()`
|
|
1132
|
+
# can read the operator's actual `--cordon-max-deferrals` back out of
|
|
1133
|
+
# the newest record instead of `describe_deferral_pressure()` callers
|
|
1134
|
+
# silently assuming `DEFAULT_MAX_DEFERRALS`.
|
|
1135
|
+
resolved_max_deferrals = (
|
|
1136
|
+
rc.DEFAULT_MAX_DEFERRALS if max_deferrals is None else max_deferrals
|
|
1137
|
+
)
|
|
1138
|
+
outcome.max_deferrals = resolved_max_deferrals
|
|
1139
|
+
|
|
1080
1140
|
plan = rc.plan_cordons(
|
|
1081
1141
|
target_version=target_version,
|
|
1082
1142
|
host_versions=_python_lane_versions(report, hosts, target_version),
|
|
1083
1143
|
existing=existing,
|
|
1084
|
-
now=
|
|
1144
|
+
now=now,
|
|
1085
1145
|
ttl_seconds=(
|
|
1086
1146
|
rc.DEFAULT_TTL_SECONDS if ttl_seconds is None else ttl_seconds
|
|
1087
1147
|
),
|
|
@@ -1095,9 +1155,23 @@ def _apply_cordons(
|
|
|
1095
1155
|
),
|
|
1096
1156
|
busy_reasons=busy_reasons,
|
|
1097
1157
|
enabled=enabled,
|
|
1158
|
+
pressure=pressure,
|
|
1159
|
+
max_deferrals=resolved_max_deferrals,
|
|
1160
|
+
release_cooldown=(
|
|
1161
|
+
rc.DEFAULT_RELEASE_COOLDOWN_SECONDS
|
|
1162
|
+
if release_cooldown is None
|
|
1163
|
+
else release_cooldown
|
|
1164
|
+
),
|
|
1098
1165
|
)
|
|
1099
1166
|
for line in plan.render():
|
|
1100
1167
|
click.echo(line)
|
|
1168
|
+
outcome.cooling_seconds = plan.cooling_seconds
|
|
1169
|
+
if plan.released is not None:
|
|
1170
|
+
outcome.released = plan.released.to_dict()
|
|
1171
|
+
# stderr as well as stdout: on the timer host this line IS the
|
|
1172
|
+
# operator's only notice that the fleet just spent 40 minutes
|
|
1173
|
+
# cordoned for nothing, and the timer's journal is stderr.
|
|
1174
|
+
click.echo(f"warning: {plan.released.message}", err=True)
|
|
1101
1175
|
if dry_run:
|
|
1102
1176
|
# `--dry-run` promises to change nothing, cordon store included. The
|
|
1103
1177
|
# plan above is still printed, so a dry run answers "and what would
|
|
@@ -1126,6 +1200,20 @@ def _apply_cordons(
|
|
|
1126
1200
|
outcome.errors.append(f"uncordon {name}: {exc}")
|
|
1127
1201
|
click.echo(f" ✗ uncordon {name}: {exc}", err=True)
|
|
1128
1202
|
|
|
1203
|
+
if plan.released is not None:
|
|
1204
|
+
# #2240: stamped even when every clear_cordon() below fails or finds
|
|
1205
|
+
# nothing — `released_at` is what resets the counter and starts the
|
|
1206
|
+
# cooldown, and a release the journal does not record is a release
|
|
1207
|
+
# that happens again on the very next tick, forever.
|
|
1208
|
+
outcome.released_at = now
|
|
1209
|
+
for name in plan.released.hosts:
|
|
1210
|
+
try:
|
|
1211
|
+
if clear_cordon(name):
|
|
1212
|
+
outcome.uncordoned.append(name)
|
|
1213
|
+
except Exception as exc: # noqa: BLE001 — see docstring
|
|
1214
|
+
outcome.errors.append(f"release cordon {name}: {exc}")
|
|
1215
|
+
click.echo(f" ✗ release cordon {name}: {exc}", err=True)
|
|
1216
|
+
|
|
1129
1217
|
for escalation in plan.escalations:
|
|
1130
1218
|
_escalate_drain(escalation)
|
|
1131
1219
|
outcome.escalated.append(escalation.to_dict())
|
|
@@ -1829,6 +1917,27 @@ def release_cordon(
|
|
|
1829
1917
|
f"[{record.age(now) / 60.0:.0f}m draining, lapses in "
|
|
1830
1918
|
f"{remaining:.0f}m, owner={record.owner}]{overdue}"
|
|
1831
1919
|
)
|
|
1920
|
+
# #2240: the same stall count `coord status` appends, on the surface an
|
|
1921
|
+
# operator reaches for once they have noticed the fleet is quiet. The
|
|
1922
|
+
# journal is a local file (the propagate timer's host); no journal → no
|
|
1923
|
+
# line, never a fabricated one.
|
|
1924
|
+
target = next(
|
|
1925
|
+
(c.target_version for c in active.values() if c.target_version), None
|
|
1926
|
+
)
|
|
1927
|
+
try:
|
|
1928
|
+
pressure = rc.deferral_pressure(
|
|
1929
|
+
_read_propagation_records(), target_version=target
|
|
1930
|
+
)
|
|
1931
|
+
except Exception: # noqa: BLE001 — a listing must not fail on the journal
|
|
1932
|
+
pressure = rc.DeferralPressure()
|
|
1933
|
+
if pressure.consecutive:
|
|
1934
|
+
click.echo(
|
|
1935
|
+
f"\n! {rc.describe_deferral_pressure(pressure)}: these cordons "
|
|
1936
|
+
"have not produced a rollable window. A cordon that has failed "
|
|
1937
|
+
"twice running is blocking the work it is waiting for (#2240) — "
|
|
1938
|
+
f"`coord release propagate` releases it by itself after "
|
|
1939
|
+
f"{rc.DEFAULT_MAX_DEFERRALS}."
|
|
1940
|
+
)
|
|
1832
1941
|
click.echo(
|
|
1833
1942
|
f"\nclear one with `coord release cordon --clear <machine>` "
|
|
1834
1943
|
f"(default lifetime {rc.DEFAULT_TTL_SECONDS / 60:.0f}m — a cordon "
|
|
@@ -1836,6 +1945,16 @@ def release_cordon(
|
|
|
1836
1945
|
)
|
|
1837
1946
|
|
|
1838
1947
|
|
|
1948
|
+
def _read_propagation_records() -> list[dict]:
|
|
1949
|
+
"""The propagation journal, or ``[]`` when this host does not have one."""
|
|
1950
|
+
from coord import release_propagate as rp # noqa: PLC0415
|
|
1951
|
+
|
|
1952
|
+
try:
|
|
1953
|
+
return rp.read_records(_state_dir())
|
|
1954
|
+
except Exception: # noqa: BLE001 — see every caller: never load-bearing
|
|
1955
|
+
return []
|
|
1956
|
+
|
|
1957
|
+
|
|
1839
1958
|
@release_group.command(
|
|
1840
1959
|
"rollback",
|
|
1841
1960
|
help=(
|
|
@@ -18,6 +18,43 @@ if TYPE_CHECKING:
|
|
|
18
18
|
from coord.config import Config
|
|
19
19
|
|
|
20
20
|
|
|
21
|
+
def _cordon_stall_suffix(cordons: dict) -> str:
|
|
22
|
+
"""The " (deferred N runs — NOT DRAINING)" tag for a stalled cordon (#2240).
|
|
23
|
+
|
|
24
|
+
`coord status` renders "CORDONED: DRAINING FOR V0.5.77" for a fleet that
|
|
25
|
+
is upgrading itself in thirty seconds and for one that has been unable to
|
|
26
|
+
dispatch anything for seventy minutes, identically. That is the whole
|
|
27
|
+
observability half of #2240: "nothing surfaced it either — `coord status`
|
|
28
|
+
shows `CORDONED: DRAINING FOR V0.5.77`, which reads as normal in-progress
|
|
29
|
+
behaviour rather than a 70-minute stall."
|
|
30
|
+
|
|
31
|
+
The count lives in the propagation journal, which is a file on whichever
|
|
32
|
+
host runs the propagate timer. A thin client has no such file, so this
|
|
33
|
+
degrades to "" — a missing journal must never turn a normal drain into a
|
|
34
|
+
reported stall, and the surface it is missing from is precisely the one
|
|
35
|
+
that is not running the loop.
|
|
36
|
+
"""
|
|
37
|
+
if not cordons:
|
|
38
|
+
return ""
|
|
39
|
+
from coord import release_cordon as rc # noqa: PLC0415
|
|
40
|
+
from coord import release_propagate as rp # noqa: PLC0415
|
|
41
|
+
from coord.commands.release import _state_dir # noqa: PLC0415
|
|
42
|
+
|
|
43
|
+
target = next(
|
|
44
|
+
(getattr(c, "target_version", None) for c in cordons.values()
|
|
45
|
+
if getattr(c, "target_version", None)),
|
|
46
|
+
None,
|
|
47
|
+
)
|
|
48
|
+
try:
|
|
49
|
+
pressure = rc.deferral_pressure(
|
|
50
|
+
rp.read_records(_state_dir()), target_version=target
|
|
51
|
+
)
|
|
52
|
+
except Exception: # noqa: BLE001 — a status render must never fail on this
|
|
53
|
+
return ""
|
|
54
|
+
described = rc.describe_deferral_pressure(pressure)
|
|
55
|
+
return f" ({described})" if described else ""
|
|
56
|
+
|
|
57
|
+
|
|
21
58
|
def _live_advisory_entries(
|
|
22
59
|
entries: list[dict],
|
|
23
60
|
cfg: "Config",
|
|
@@ -144,6 +181,11 @@ def status(config_path: Path, machine_filter: str | None, no_reconcile: bool, ti
|
|
|
144
181
|
)
|
|
145
182
|
paused = paused_set(cfg.machines)
|
|
146
183
|
cordons = fetch_cordons()
|
|
184
|
+
# #2240: how many consecutive propagate runs this cordon has now failed to
|
|
185
|
+
# produce a window for. Computed once, appended to every cordoned
|
|
186
|
+
# machine's label below — "draining" and "deadlocked" must not render the
|
|
187
|
+
# same, which is why the 70-minute stall was invisible.
|
|
188
|
+
cordon_stall = _cordon_stall_suffix(cordons)
|
|
147
189
|
quiet_windows = effective_quiet_hours(cfg.machines)
|
|
148
190
|
|
|
149
191
|
statuses = check_all(machines, timeout=timeout)
|
|
@@ -211,7 +253,9 @@ def status(config_path: Path, machine_filter: str | None, no_reconcile: bool, ti
|
|
|
211
253
|
# #2101 trap E: name the version it is draining for, so a stopped
|
|
212
254
|
# machine reads as "the fleet is upgrading itself" rather than as
|
|
213
255
|
# a mystery.
|
|
214
|
-
|
|
256
|
+
# #2240: ...and say when it has stopped being that, so it does
|
|
257
|
+
# not read as normal in-progress behaviour for an hour.
|
|
258
|
+
label = f"{pause_state.detail.upper()}{cordon_stall} — {label}"
|
|
215
259
|
elif pause_state is not None and pause_state.kind == "hand":
|
|
216
260
|
label = f"PAUSED — {label}"
|
|
217
261
|
elif pause_state is not None and pause_state.kind == "quiet":
|
|
@@ -76,6 +76,26 @@ else:
|
|
|
76
76
|
for a cordon to lapse; the live loop renews on every run while the host is
|
|
77
77
|
still behind (#2101 trap B).
|
|
78
78
|
|
|
79
|
+
#2240: A CORDON MEANS "NO NEW WORK", AND A FOLLOW-ON LEG IS NOT NEW WORK.
|
|
80
|
+
Folding cordons into the one `paused_set()` is what made #2101 buildable, but
|
|
81
|
+
it also gave a cordon a reach a *drain* must not have. Observed 2026-08-14:
|
|
82
|
+
the fleet cordoned to drain for v0.5.77; an entry that had finished Work and
|
|
83
|
+
Test needed its REVIEW dispatched; `pick_reviewer_machine` filtered every
|
|
84
|
+
cordoned host out of `paused_set()` and returned "no eligible reviewer
|
|
85
|
+
machine configured"; the entry therefore stayed `running` forever; a
|
|
86
|
+
perpetually-running entry defers the roll; a deferred roll leaves the cordon
|
|
87
|
+
up. Four cycles, 70 minutes, three idle machines, no exit without a human.
|
|
88
|
+
|
|
89
|
+
The cordon was blocking the completion of the very work it was waiting to
|
|
90
|
+
drain. So `paused_set(..., include_cordons=False)` — reached through
|
|
91
|
+
`follow_on_paused_set()` — is the set a dispatch consults when it is
|
|
92
|
+
finishing work already in flight rather than starting new work. It still
|
|
93
|
+
honours explicit `coord pause` and quiet hours: those are an operator's or a
|
|
94
|
+
policy's decision about a machine and mean what they say. A cordon is this
|
|
95
|
+
fleet's own drain asking a host to go idle, and refusing to dispatch the leg
|
|
96
|
+
that would make it idle is self-defeating (a `--merge-of`/review dispatch
|
|
97
|
+
onto a cordoned host is what the drain WANTS — it is what ends the work).
|
|
98
|
+
|
|
79
99
|
#2146: OPERATOR-SET quiet hours. #1862's window can only be declared in
|
|
80
100
|
`coordinator.yml`, which on a thin client is a read-only cache that is
|
|
81
101
|
re-fetched and overwritten on essentially every command, and on the daemon
|
|
@@ -142,7 +162,10 @@ def _state_path() -> Path:
|
|
|
142
162
|
|
|
143
163
|
|
|
144
164
|
def paused_set(
|
|
145
|
-
machines: Sequence["Machine"] | None = None,
|
|
165
|
+
machines: Sequence["Machine"] | None = None,
|
|
166
|
+
*,
|
|
167
|
+
now: datetime | None = None,
|
|
168
|
+
include_cordons: bool = True,
|
|
146
169
|
) -> set[str]:
|
|
147
170
|
"""Read the current set of paused machine names (#1563: daemon-aware).
|
|
148
171
|
|
|
@@ -160,16 +183,54 @@ def paused_set(
|
|
|
160
183
|
call site) to fold quiet hours into the LOCAL computation — the daemon's
|
|
161
184
|
own in-process tick-loop calls (no board service configured for
|
|
162
185
|
itself), and any solo/local use with no daemon at all.
|
|
186
|
+
|
|
187
|
+
*include_cordons* (#2240) is False only for a dispatch that FINISHES work
|
|
188
|
+
already in flight — see `follow_on_paused_set()`, which is the name every
|
|
189
|
+
caller should use, and the module docstring for the 70-minute fleet-wide
|
|
190
|
+
deadlock that made this necessary. It never widens the set: explicit
|
|
191
|
+
pauses and quiet hours are untouched, and a cordon read that fails is
|
|
192
|
+
left IN (a cordon we could not resolve stays a pause, the same direction
|
|
193
|
+
every other read here fails in).
|
|
163
194
|
"""
|
|
164
195
|
svc = _resolve_service()
|
|
165
196
|
if svc is not None:
|
|
166
197
|
from coord.client import fetch_paused_machines # noqa: PLC0415
|
|
167
198
|
|
|
168
199
|
try:
|
|
169
|
-
|
|
200
|
+
names = fetch_paused_machines(svc)
|
|
170
201
|
except Exception: # noqa: BLE001 — fail-soft read, see module docstring
|
|
171
202
|
return set()
|
|
172
|
-
|
|
203
|
+
if include_cordons:
|
|
204
|
+
return names
|
|
205
|
+
# The daemon publishes ONE union (`local_paused_set`), so the cordon
|
|
206
|
+
# half has to be subtracted here from its own endpoint — a second
|
|
207
|
+
# round trip, paid only on the follow-on path, rather than a second
|
|
208
|
+
# union the daemon would have to learn to publish.
|
|
209
|
+
try:
|
|
210
|
+
return names - set(cordons())
|
|
211
|
+
except Exception: # noqa: BLE001 — see docstring: cordons stay paused
|
|
212
|
+
return names
|
|
213
|
+
return local_paused_set(machines, now=now, include_cordons=include_cordons)
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
def follow_on_paused_set(
|
|
217
|
+
machines: Sequence["Machine"] | None = None, *, now: datetime | None = None,
|
|
218
|
+
) -> set[str]:
|
|
219
|
+
"""The pause set for a dispatch that COMPLETES in-flight work (#2240).
|
|
220
|
+
|
|
221
|
+
`paused_set()` minus release cordons. Use this — and only this — for a
|
|
222
|
+
review / smoke / fix leg of an assignment that is already running: a
|
|
223
|
+
cordon means "route no NEW work here", and the tail of the work the
|
|
224
|
+
cordon is explicitly waiting to drain is not new work. Blocking it is
|
|
225
|
+
self-defeating in the precise way #2240 observed, because the entry can
|
|
226
|
+
then never finish, so the host never drains, so the cordon never lifts,
|
|
227
|
+
so the roll defers and re-cordons.
|
|
228
|
+
|
|
229
|
+
Everything else still applies: an explicit `coord pause` and a quiet-hours
|
|
230
|
+
window both mean "this machine is unavailable, full stop", and neither is
|
|
231
|
+
this fleet's own drain talking to itself.
|
|
232
|
+
"""
|
|
233
|
+
return paused_set(machines, now=now, include_cordons=False)
|
|
173
234
|
|
|
174
235
|
|
|
175
236
|
def is_paused(
|
|
@@ -259,7 +320,10 @@ def _resolve_service(): # -> coord.client.ServiceConfig | None
|
|
|
259
320
|
|
|
260
321
|
|
|
261
322
|
def local_paused_set(
|
|
262
|
-
machines: Sequence["Machine"] | None = None,
|
|
323
|
+
machines: Sequence["Machine"] | None = None,
|
|
324
|
+
*,
|
|
325
|
+
now: datetime | None = None,
|
|
326
|
+
include_cordons: bool = True,
|
|
263
327
|
) -> set[str]:
|
|
264
328
|
"""The local, effective paused-machine set: explicit pauses UNION any
|
|
265
329
|
machine currently inside its quiet-hours window (#1862) UNION any machine
|
|
@@ -279,8 +343,16 @@ def local_paused_set(
|
|
|
279
343
|
the daemon's `/pause` endpoint handler calls (passing `config.machines`
|
|
280
344
|
so quiet hours apply), and what `paused_set()` itself falls through to
|
|
281
345
|
when no board service is configured.
|
|
346
|
+
|
|
347
|
+
*include_cordons* (#2240) drops the cordon half for a dispatch that
|
|
348
|
+
finishes work already in flight — see `follow_on_paused_set()`. The
|
|
349
|
+
daemon's own `/pause` handler must never pass it: what that endpoint
|
|
350
|
+
publishes is the full routing set, and the subtraction is the caller's
|
|
351
|
+
decision to make, per dispatch.
|
|
282
352
|
"""
|
|
283
|
-
effective = _explicit_paused_set()
|
|
353
|
+
effective = _explicit_paused_set()
|
|
354
|
+
if include_cordons:
|
|
355
|
+
effective |= cordoned_names(now=_epoch(now))
|
|
284
356
|
if not machines:
|
|
285
357
|
return effective
|
|
286
358
|
return effective | _quiet_covered_names(machines, now=now)
|