code-coordinator 0.5.91__tar.gz → 0.5.93__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.91 → code_coordinator-0.5.93}/PKG-INFO +1 -1
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/code_coordinator.egg-info/SOURCES.txt +1 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/code_coordinator.egg-info/scm_file_list.json +1 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/commands/plan_followup.py +23 -10
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/commands/release.py +32 -6
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/release_cordon.py +110 -7
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/release_propagate.py +8 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_fix_headless_review.py +23 -7
- code_coordinator-0.5.93/tests/test_release_cordon_daemon_leads_2176.py +313 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_release_cordon_deadlock_2240.py +10 -2
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_release_verify.py +115 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/.github/workflows/release-tui.yml +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/.gitignore +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/CLAUDE.md +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/GOAL.md +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/LICENSE +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/MANIFEST.in +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/README.md +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/__init__.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/agent.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/audit.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/block_log.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/board_bool_guard.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/board_service.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/brain.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/claim.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/cli.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/client.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/comments.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/config.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dao.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/.gitignore +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/components.json +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/dist/assets/Gallery-Cq84itDE.js +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/dist/assets/Terminal-DOXLcMue.js +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/dist/assets/index-DHn-RIJ8.js +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/dist/index.html +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/dist/sw.js +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/eslint.config.js +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/index.html +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/package-lock.json +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/package.json +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/playwright.config.ts +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/postcss.config.js +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/App.tsx +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/api/client.ts +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/api/generated.ts +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/index.css +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/main.tsx +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/test-setup.ts +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/tailwind.config.js +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/tsconfig.json +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/tsconfig.node.json +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dashboard/webapp/vite.config.ts +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/db.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/deps.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/drive.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/events.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/filelock.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/freshness.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/gates.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/goal.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/health/context.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/health/models.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/health/render.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/health/units.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/hooks.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/interactive.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/models.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/network.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/notify.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/openapi.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/parentage.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/plans.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/progress.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/release_window.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/reports.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/review.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/smoke.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/split_work.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/state.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/test_author.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/test_report.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/usage.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/install-agent.sh +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/pyproject.toml +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/setup.cfg +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/__init__.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/acceptance/ms-33/audit_1039.rs +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/acceptance/ms-33/contract.md +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/acceptance/ms-33/manifest.yml +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/acceptance/ms-38/contract.md +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/acceptance/ms-38/manifest.yml +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/conftest.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_config.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_db.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_events.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_init.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_models.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_network.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_no_direct_gh_calls.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_review.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_session.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_split.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_state.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/Cargo.lock +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/Cargo.toml +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/cargo-config-local-quadraui.toml.example +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/src/app/audit.rs +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/src/app/chat.rs +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/src/app/data.rs +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/src/app/dialogs.rs +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/src/app/drive.rs +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/src/app/drive_queue.rs +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/src/app/escalation.rs +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/src/app/events.rs +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/src/app/fixtures.rs +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/src/app/fleet_health.rs +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/src/app/fleet_sessions.rs +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/src/app/fleet_terminals.rs +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/src/app/format.rs +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/src/app/milestone_dag.rs +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/src/app/mod.rs +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/src/app/msv.rs +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/src/app/pipeline.rs +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/src/app/plans.rs +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/src/app/render.rs +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/src/app/reports.rs +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/src/app/sessions.rs +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/src/app/settings_ui.rs +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/src/app/sidebar.rs +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/src/app/terminal.rs +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/src/app/tests.rs +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/src/app/types.rs +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/src/app/workspace.rs +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/src/bin/gtk.rs +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/src/commands.rs +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/src/lib.rs +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/src/main.rs +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/src/settings.rs +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/tests/acceptance.rs +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/tests/cli.rs +0 -0
- {code_coordinator-0.5.91 → code_coordinator-0.5.93}/tui/tests/fixtures/board_sample.json +0 -0
|
@@ -676,6 +676,7 @@ tests/test_reconcile_merges.py
|
|
|
676
676
|
tests/test_reconcile_usage_limit_done.py
|
|
677
677
|
tests/test_refine_chat.py
|
|
678
678
|
tests/test_release_cordon_2101.py
|
|
679
|
+
tests/test_release_cordon_daemon_leads_2176.py
|
|
679
680
|
tests/test_release_cordon_deadlock_2240.py
|
|
680
681
|
tests/test_release_propagate.py
|
|
681
682
|
tests/test_release_unified_1242.py
|
{code_coordinator-0.5.91 → code_coordinator-0.5.93}/code_coordinator.egg-info/scm_file_list.json
RENAMED
|
@@ -706,6 +706,7 @@
|
|
|
706
706
|
"tests/test_reconcile_usage_limit_done.py",
|
|
707
707
|
"tests/test_refine_chat.py",
|
|
708
708
|
"tests/test_release_cordon_2101.py",
|
|
709
|
+
"tests/test_release_cordon_daemon_leads_2176.py",
|
|
709
710
|
"tests/test_release_cordon_deadlock_2240.py",
|
|
710
711
|
"tests/test_release_propagate.py",
|
|
711
712
|
"tests/test_release_unified_1242.py",
|
|
@@ -655,16 +655,7 @@ def _fix_from_review(
|
|
|
655
655
|
"""
|
|
656
656
|
from coord import auto_loop
|
|
657
657
|
from coord.board_service import write_board
|
|
658
|
-
from coord.state import COORD_DIR
|
|
659
|
-
|
|
660
|
-
if guidance:
|
|
661
|
-
click.echo(
|
|
662
|
-
"warning: --guidance is ignored for a review id — the reviewer's "
|
|
663
|
-
"findings ARE the fix briefing. To brief a fix in your own words "
|
|
664
|
-
f"use `coord assign <machine> <repo> <issue> --fix-of "
|
|
665
|
-
f"{review.assignment_id} --interactive --briefing ...`.",
|
|
666
|
-
err=True,
|
|
667
|
-
)
|
|
658
|
+
from coord.state import COORD_DIR, add_issue_context_entry
|
|
668
659
|
|
|
669
660
|
work = None
|
|
670
661
|
if review.review_of_assignment_id:
|
|
@@ -678,6 +669,28 @@ def _fix_from_review(
|
|
|
678
669
|
)
|
|
679
670
|
sys.exit(1)
|
|
680
671
|
|
|
672
|
+
# #2092: --guidance used to be silently discarded here — a warning was
|
|
673
|
+
# printed immediately above a success line the operator often doesn't
|
|
674
|
+
# read past the tail of, so a maintainer decision could be lost with no
|
|
675
|
+
# visible trace. Route it through the #603 pinned per-issue context store
|
|
676
|
+
# instead of dropping it OR bolting a second implementation of fix-
|
|
677
|
+
# briefing assembly onto this CLI door: `_dispatch_fix_for_review`
|
|
678
|
+
# already prepends `issue_context_block(...)` to the TOP of every fix
|
|
679
|
+
# briefing it builds, ABOVE the reviewer's findings, so a pinned entry
|
|
680
|
+
# written here lands exactly where the operator's guidance belongs — and
|
|
681
|
+
# (unlike a one-shot parameter) it also survives into every later
|
|
682
|
+
# briefing for this issue, not just this one dispatch.
|
|
683
|
+
if guidance:
|
|
684
|
+
add_issue_context_entry(
|
|
685
|
+
work.repo_name, work.issue_number, guidance,
|
|
686
|
+
pinned=True, source="coord fix --guidance",
|
|
687
|
+
)
|
|
688
|
+
click.echo(
|
|
689
|
+
f"guidance pinned to issue #{work.issue_number} context (#603) — "
|
|
690
|
+
"it will be prepended above the reviewer's findings in the fix "
|
|
691
|
+
"briefing.",
|
|
692
|
+
)
|
|
693
|
+
|
|
681
694
|
# #555: an INTERACTIVE work completion must never be silently followed by a
|
|
682
695
|
# headless fix. The human at the tmux pane owns that branch and may still
|
|
683
696
|
# be mid-edit; a `claude -p` worker pushing over them is the incident that
|
|
@@ -694,11 +694,25 @@ def release_propagate( # noqa: PLR0912, PLR0915 — a pipeline; the decisions a
|
|
|
694
694
|
)
|
|
695
695
|
current = rp.hosts_already_current(_lane_versions_by_host(before), record.target_version)
|
|
696
696
|
|
|
697
|
+
# #2176: resolved here, ahead of cordoning, so the cordon plan can honour
|
|
698
|
+
# the same daemon-leads invariant the roll itself is bound by (see below).
|
|
699
|
+
# Purely a derivation from data already in hand (`machine_health`) — this
|
|
700
|
+
# does not move the "unorderable fleet" REFUSAL, which stays below the
|
|
701
|
+
# deferral branch on purpose (see its own comment).
|
|
702
|
+
daemon_name = _daemon_machine_name(config, daemon_host_override, machine_health)
|
|
703
|
+
|
|
697
704
|
# ── 3b. cordon the hosts that are behind, so they DRAIN (#2101) ──────
|
|
698
705
|
#
|
|
699
706
|
# Before the deferral return below, on purpose: cordoning is the thing
|
|
700
707
|
# that turns "no window" into "a window in a few minutes". A run that
|
|
701
708
|
# defers without cordoning has changed nothing about why it deferred.
|
|
709
|
+
#
|
|
710
|
+
# #2176: a non-daemon host with no busy signal of its own is exempted
|
|
711
|
+
# while the daemon host is itself busy and behind — see `plan_cordons`'s
|
|
712
|
+
# `daemon_host` handling. It cannot roll ahead of a busy daemon host
|
|
713
|
+
# regardless of its own drain state (the daemon-leads invariant below),
|
|
714
|
+
# so cordoning it protects nothing and just spends fleet capacity for an
|
|
715
|
+
# unbounded wait.
|
|
702
716
|
record.cordons = _apply_cordons(
|
|
703
717
|
hosts=hosts,
|
|
704
718
|
report=before,
|
|
@@ -712,6 +726,7 @@ def release_propagate( # noqa: PLR0912, PLR0915 — a pipeline; the decisions a
|
|
|
712
726
|
state_dir=state_dir,
|
|
713
727
|
max_deferrals=cordon_max_deferrals,
|
|
714
728
|
release_cooldown=cordon_cooldown,
|
|
729
|
+
daemon_host=daemon_name,
|
|
715
730
|
)
|
|
716
731
|
|
|
717
732
|
if fully_busy and not force:
|
|
@@ -722,12 +737,12 @@ def release_propagate( # noqa: PLR0912, PLR0915 — a pipeline; the decisions a
|
|
|
722
737
|
# meets a fleet that is actually draining.
|
|
723
738
|
_finish(rp.STATUS_DEFERRED, 0)
|
|
724
739
|
|
|
725
|
-
# #2101:
|
|
726
|
-
# about the ORDER a roll happens in; a run that is going
|
|
727
|
-
# has no order to get wrong, and turning "the fleet is
|
|
728
|
-
# `failed` record (exit 1, systemd marks the unit failed)
|
|
729
|
-
# operator to ignore the one signal that matters.
|
|
730
|
-
daemon_name
|
|
740
|
+
# #2101: this refusal is checked AFTER the deferral above, deliberately.
|
|
741
|
+
# This refusal is about the ORDER a roll happens in; a run that is going
|
|
742
|
+
# to roll nothing has no order to get wrong, and turning "the fleet is
|
|
743
|
+
# busy" into a `failed` record (exit 1, systemd marks the unit failed)
|
|
744
|
+
# would teach an operator to ignore the one signal that matters.
|
|
745
|
+
# (`daemon_name` itself was resolved earlier, before cordoning — #2176.)
|
|
731
746
|
if daemon_name is None and len(hosts) > 1:
|
|
732
747
|
# #2052 fault 2: this used to warn and roll in coordinator.yml order.
|
|
733
748
|
# It then briefly put the daemon host BEHIND both its callers during a
|
|
@@ -1082,6 +1097,7 @@ def _apply_cordons( # noqa: PLR0912 — one linear apply-the-plan pass
|
|
|
1082
1097
|
state_dir: Path | None = None,
|
|
1083
1098
|
max_deferrals: int | None = None,
|
|
1084
1099
|
release_cooldown: float | None = None,
|
|
1100
|
+
daemon_host: str | None = None,
|
|
1085
1101
|
) -> dict:
|
|
1086
1102
|
"""Plan and apply this run's cordons. Returns the journal fragment.
|
|
1087
1103
|
|
|
@@ -1090,6 +1106,13 @@ def _apply_cordons( # noqa: PLR0912 — one linear apply-the-plan pass
|
|
|
1090
1106
|
Failing the whole propagation because the cordon could not be renewed
|
|
1091
1107
|
would make #2101's fix strictly worse than not having it.
|
|
1092
1108
|
|
|
1109
|
+
*daemon_host* (#2176) lets :func:`~coord.release_cordon.plan_cordons`
|
|
1110
|
+
exempt a non-daemon host with no busy signal of its own from cordoning
|
|
1111
|
+
while the daemon host is itself busy and behind — see that function's
|
|
1112
|
+
docstring for the reasoning. ``None`` (an unorderable fleet) disables
|
|
1113
|
+
the exemption and falls back to cordoning every behind host, same as
|
|
1114
|
+
before #2176.
|
|
1115
|
+
|
|
1093
1116
|
#2240: *state_dir* is where the propagation journal lives, and the journal
|
|
1094
1117
|
is where "how many runs in a row has this cordon now deferred?" is stored
|
|
1095
1118
|
— the process holding the answer in memory is restarted by the roll it is
|
|
@@ -1162,10 +1185,13 @@ def _apply_cordons( # noqa: PLR0912 — one linear apply-the-plan pass
|
|
|
1162
1185
|
if release_cooldown is None
|
|
1163
1186
|
else release_cooldown
|
|
1164
1187
|
),
|
|
1188
|
+
daemon_host=daemon_host,
|
|
1165
1189
|
)
|
|
1166
1190
|
for line in plan.render():
|
|
1167
1191
|
click.echo(line)
|
|
1168
1192
|
outcome.cooling_seconds = plan.cooling_seconds
|
|
1193
|
+
outcome.collateral_spared = list(plan.collateral_spared)
|
|
1194
|
+
outcome.blocked_behind = plan.blocked_behind
|
|
1169
1195
|
if plan.released is not None:
|
|
1170
1196
|
outcome.released = plan.released.to_dict()
|
|
1171
1197
|
# stderr as well as stdout: on the timer host this line IS the
|
|
@@ -142,6 +142,35 @@ and #2082 is the cost of tolerating that. The threshold is a knob
|
|
|
142
142
|
(``coord release propagate --cordon-after N``) precisely so a future cadence
|
|
143
143
|
change does not need a code change. Trap F.
|
|
144
144
|
|
|
145
|
+
CORDON-EVERY-BEHIND-HOST DOES NOT COVER A HOST THAT CANNOT ROLL EITHER WAY
|
|
146
|
+
----------------------------------------------------------------------------
|
|
147
|
+
Observed 2026-08-13 00:18 UTC: one busy signal, on dellserver, and the fleet
|
|
148
|
+
cordoned all three machines anyway. elitebook and precision reported
|
|
149
|
+
``online • idle`` throughout and stayed cordoned — launch-blocked — for
|
|
150
|
+
34+ minutes, unable to accept the very review dispatch #2240 needed.
|
|
151
|
+
|
|
152
|
+
The cordon-every-behind-host rule above is correct for a host whose OWN
|
|
153
|
+
draining is what a run is waiting on: skip it and it never drains, and a run
|
|
154
|
+
that defers without cordoning defers again in 20 minutes for the same
|
|
155
|
+
reason. It does not cover a host that has no busy signal against it AND is
|
|
156
|
+
blocked from rolling by the daemon-leads invariant (see
|
|
157
|
+
:mod:`coord.release_propagate`'s LANE ORDER section) rather than by its own
|
|
158
|
+
work — nothing may roll ahead of a busy daemon host, so such a host cannot
|
|
159
|
+
roll regardless of how drained it gets. Cordoning it protects nothing: its
|
|
160
|
+
drained state cannot be consumed until the daemon host rolls first, which
|
|
161
|
+
may be unbounded (any drive on the daemon host reproduces this, not just a
|
|
162
|
+
wedged one).
|
|
163
|
+
|
|
164
|
+
:func:`plan_cordons`'s *daemon_host* parameter is the fix: while the daemon
|
|
165
|
+
host is itself busy and behind, only it (and any host with its own busy
|
|
166
|
+
signal) is cordoned. Everyone else stays uncordoned and dispatchable —
|
|
167
|
+
released immediately if a previous run already cordoned them — until the
|
|
168
|
+
daemon host becomes rollable, at which point ordinary drain-everyone-behind
|
|
169
|
+
resumes. :attr:`CordonPlan.collateral_spared` /
|
|
170
|
+
:attr:`CordonPlan.blocked_behind` name exactly who was spared and why, so
|
|
171
|
+
the next puzzle like this one is one line of output, not a 40-minute read of
|
|
172
|
+
`/board`.
|
|
173
|
+
|
|
145
174
|
PURITY
|
|
146
175
|
------
|
|
147
176
|
Nothing here reads the clock, the filesystem, the network or the DB — same
|
|
@@ -618,6 +647,17 @@ class CordonPlan:
|
|
|
618
647
|
#: recorded rather than silent, because "no cordons planned" and "cordons
|
|
619
648
|
#: suppressed on purpose" are the same output otherwise.
|
|
620
649
|
cooling_seconds: float = 0.0
|
|
650
|
+
#: #2176: behind hosts this run deliberately did NOT cordon (and, if
|
|
651
|
+
#: already cordoned, released) because they have no busy signal of their
|
|
652
|
+
#: own and cannot roll ahead of `blocked_behind` anyway. Reported
|
|
653
|
+
#: separately from `uncordon` (which is "proven current") so the journal
|
|
654
|
+
#: and CLI output can name them as collateral rather than as a drain that
|
|
655
|
+
#: completed.
|
|
656
|
+
collateral_spared: tuple[str, ...] = ()
|
|
657
|
+
#: #2176: the daemon host these hosts are spared on account of — set
|
|
658
|
+
#: exactly when `collateral_spared` is non-empty. The single fact that
|
|
659
|
+
#: would have turned a 40-minute puzzle into one line of output.
|
|
660
|
+
blocked_behind: str | None = None
|
|
621
661
|
|
|
622
662
|
@property
|
|
623
663
|
def empty(self) -> bool:
|
|
@@ -627,6 +667,7 @@ class CordonPlan:
|
|
|
627
667
|
or self.escalations
|
|
628
668
|
or self.expired
|
|
629
669
|
or self.released
|
|
670
|
+
or self.collateral_spared
|
|
630
671
|
)
|
|
631
672
|
|
|
632
673
|
def to_dict(self) -> dict:
|
|
@@ -638,6 +679,8 @@ class CordonPlan:
|
|
|
638
679
|
"unknown": list(self.unknown),
|
|
639
680
|
"released": self.released.to_dict() if self.released else None,
|
|
640
681
|
"cooling_seconds": self.cooling_seconds,
|
|
682
|
+
"collateral_spared": list(self.collateral_spared),
|
|
683
|
+
"blocked_behind": self.blocked_behind,
|
|
641
684
|
}
|
|
642
685
|
|
|
643
686
|
def render(self) -> list[str]:
|
|
@@ -645,6 +688,14 @@ class CordonPlan:
|
|
|
645
688
|
lines: list[str] = []
|
|
646
689
|
for item in self.cordon:
|
|
647
690
|
lines.append(f" ⊘ cordon {item.machine}: {item.describe()}")
|
|
691
|
+
if self.collateral_spared:
|
|
692
|
+
lines.append(
|
|
693
|
+
" · "
|
|
694
|
+
+ ", ".join(sorted(self.collateral_spared))
|
|
695
|
+
+ f": left uncordoned — blocked behind daemon host "
|
|
696
|
+
f"{self.blocked_behind} either way, cordoning would not help "
|
|
697
|
+
"(#2176)"
|
|
698
|
+
)
|
|
648
699
|
for name in self.uncordon:
|
|
649
700
|
lines.append(f" ✓ uncordon {name}: up to date, work may resume")
|
|
650
701
|
for name in self.expired:
|
|
@@ -748,12 +799,15 @@ def plan_cordons(
|
|
|
748
799
|
pressure: DeferralPressure | None = None,
|
|
749
800
|
max_deferrals: int = DEFAULT_MAX_DEFERRALS,
|
|
750
801
|
release_cooldown: float = DEFAULT_RELEASE_COOLDOWN_SECONDS,
|
|
802
|
+
daemon_host: str | None = None,
|
|
751
803
|
) -> CordonPlan:
|
|
752
804
|
"""Decide this run's cordon writes. Pure.
|
|
753
805
|
|
|
754
806
|
*existing* is the store as read (expired records included — this function
|
|
755
807
|
is what notices they lapsed). *busy_reasons* maps a host to why it is not
|
|
756
|
-
yet drained, purely so an escalation can say what is holding it
|
|
808
|
+
yet drained, purely so an escalation can say what is holding it — and
|
|
809
|
+
(#2176) so this function can tell a genuinely busy host from an idle one
|
|
810
|
+
when deciding who is collateral.
|
|
757
811
|
|
|
758
812
|
``enabled=False`` (``coord release propagate --no-cordon``) plans no new
|
|
759
813
|
cordons but STILL clears the ones this owner already set: turning the
|
|
@@ -772,6 +826,21 @@ def plan_cordons(
|
|
|
772
826
|
Proven-current hosts are uncordoned in every one of these branches: that
|
|
773
827
|
is never the wrong move, and skipping it during a cooldown would leave a
|
|
774
828
|
rolled host cordoned for the length of the cooldown.
|
|
829
|
+
|
|
830
|
+
*daemon_host* (#2176) is the machine `coord release propagate` will roll
|
|
831
|
+
first (see `coord.release_propagate`'s LANE ORDER section) — the
|
|
832
|
+
daemon-leads invariant means no OTHER host's python lane may roll ahead
|
|
833
|
+
of it while it is itself busy and behind. A behind host with no busy
|
|
834
|
+
signal of its own is therefore collateral, not protected, by a cordon
|
|
835
|
+
while that holds: it cannot roll either way, so draining it buys nothing
|
|
836
|
+
and just spends fleet capacity for a wait that is unbounded from its own
|
|
837
|
+
perspective (#2067 made quiescence per-host; this closes the cordon's
|
|
838
|
+
matching gap). Such a host is left uncordoned — and released immediately
|
|
839
|
+
if a previous run already cordoned it — until the daemon host is
|
|
840
|
+
rollable (quiescent, or already on the target), at which point ordinary
|
|
841
|
+
drain-everyone-behind resumes exactly as before #2176. A host that is
|
|
842
|
+
itself busy is cordoned regardless: its own drain is still the thing
|
|
843
|
+
being waited on, whatever the daemon host is doing.
|
|
775
844
|
"""
|
|
776
845
|
records = _as_records(existing)
|
|
777
846
|
live = {name: c for name, c in records.items() if c.active(now)}
|
|
@@ -782,11 +851,30 @@ def plan_cordons(
|
|
|
782
851
|
if not enabled:
|
|
783
852
|
return CordonPlan(uncordon=tuple(sorted(live)), expired=expired)
|
|
784
853
|
|
|
785
|
-
#
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
854
|
+
# ── #2176: who is collateral to a busy, behind daemon host ────────────
|
|
855
|
+
daemon_blocked = bool(
|
|
856
|
+
daemon_host
|
|
857
|
+
and (busy_reasons or {}).get(daemon_host)
|
|
858
|
+
and daemon_host not in drift.current
|
|
859
|
+
)
|
|
860
|
+
collateral = frozenset(
|
|
861
|
+
host
|
|
862
|
+
for host in drift.behind
|
|
863
|
+
if daemon_blocked and host != daemon_host and not (busy_reasons or {}).get(host)
|
|
864
|
+
)
|
|
865
|
+
blocked_behind = daemon_host if collateral else None
|
|
866
|
+
|
|
867
|
+
# Uncordon: PROVEN current, plus (#2176) any collateral host a previous
|
|
868
|
+
# run already cordoned — "spared" means dispatchable now, not "merely not
|
|
869
|
+
# renewed". A host whose version could not be read otherwise keeps
|
|
870
|
+
# whatever cordon it has until that cordon EXPIRES — clearing on "we
|
|
871
|
+
# couldn't read the version" would open the fleet up mid-roll on the
|
|
872
|
+
# strength of one failed HTTP call.
|
|
873
|
+
to_uncordon = tuple(
|
|
874
|
+
sorted(
|
|
875
|
+
{name for name in live if name in drift.current} | (collateral & set(live))
|
|
876
|
+
)
|
|
877
|
+
)
|
|
790
878
|
|
|
791
879
|
# ── #2240: the deadlock bound ────────────────────────────────────────
|
|
792
880
|
pressure = pressure or DeferralPressure()
|
|
@@ -797,6 +885,8 @@ def plan_cordons(
|
|
|
797
885
|
expired=expired,
|
|
798
886
|
cooling_seconds=cooling,
|
|
799
887
|
unknown=tuple(sorted(drift.undecided & set(live))),
|
|
888
|
+
collateral_spared=tuple(sorted(collateral)),
|
|
889
|
+
blocked_behind=blocked_behind,
|
|
800
890
|
)
|
|
801
891
|
if max_deferrals > 0 and pressure.consecutive >= max_deferrals:
|
|
802
892
|
return CordonPlan(
|
|
@@ -809,11 +899,13 @@ def plan_cordons(
|
|
|
809
899
|
cooldown_seconds=release_cooldown,
|
|
810
900
|
target_version=target_version,
|
|
811
901
|
),
|
|
902
|
+
collateral_spared=tuple(sorted(collateral)),
|
|
903
|
+
blocked_behind=blocked_behind,
|
|
812
904
|
)
|
|
813
905
|
|
|
814
906
|
to_cordon: list[Cordon] = []
|
|
815
907
|
escalations: list[DrainEscalation] = []
|
|
816
|
-
for host in sorted(drift.behind):
|
|
908
|
+
for host in sorted(drift.behind - collateral):
|
|
817
909
|
previous = live.get(host)
|
|
818
910
|
created = previous.created_at if previous and previous.created_at else now
|
|
819
911
|
to_cordon.append(
|
|
@@ -844,6 +936,8 @@ def plan_cordons(
|
|
|
844
936
|
escalations=tuple(escalations),
|
|
845
937
|
expired=expired,
|
|
846
938
|
unknown=tuple(sorted(drift.undecided & set(live))),
|
|
939
|
+
collateral_spared=tuple(sorted(collateral)),
|
|
940
|
+
blocked_behind=blocked_behind,
|
|
847
941
|
)
|
|
848
942
|
|
|
849
943
|
|
|
@@ -883,6 +977,13 @@ class CordonOutcome:
|
|
|
883
977
|
#: out of the newest record instead of every caller of
|
|
884
978
|
#: :func:`describe_deferral_pressure` assuming the default.
|
|
885
979
|
max_deferrals: int = DEFAULT_MAX_DEFERRALS
|
|
980
|
+
#: #2176: behind hosts this run spared (or actively released) because
|
|
981
|
+
#: they have no busy signal of their own and cannot roll ahead of a busy,
|
|
982
|
+
#: behind daemon host anyway. Mirrors `CordonPlan.collateral_spared`.
|
|
983
|
+
collateral_spared: list[str] = field(default_factory=list)
|
|
984
|
+
#: #2176: the daemon host `collateral_spared` was spared on account of.
|
|
985
|
+
#: Mirrors `CordonPlan.blocked_behind`.
|
|
986
|
+
blocked_behind: str | None = None
|
|
886
987
|
|
|
887
988
|
def to_dict(self) -> dict:
|
|
888
989
|
return {
|
|
@@ -896,4 +997,6 @@ class CordonOutcome:
|
|
|
896
997
|
"cooling_seconds": self.cooling_seconds,
|
|
897
998
|
"pressure": dict(self.pressure),
|
|
898
999
|
"max_deferrals": self.max_deferrals,
|
|
1000
|
+
"collateral_spared": list(self.collateral_spared),
|
|
1001
|
+
"blocked_behind": self.blocked_behind,
|
|
899
1002
|
}
|
|
@@ -1247,6 +1247,14 @@ def render_record(record: PropagationRecord | Mapping[str, Any]) -> list[str]:
|
|
|
1247
1247
|
)
|
|
1248
1248
|
if cordons.get("uncordoned"):
|
|
1249
1249
|
lines.append(" uncordoned: " + ", ".join(cordons["uncordoned"]))
|
|
1250
|
+
# #2176: name the collateral hosts AND the single host they're collateral
|
|
1251
|
+
# to — the fact that would have turned a 40-minute puzzle into one line.
|
|
1252
|
+
if cordons.get("collateral_spared"):
|
|
1253
|
+
lines.append(
|
|
1254
|
+
" spared (blocked behind daemon host "
|
|
1255
|
+
f"{cordons.get('blocked_behind')} anyway): "
|
|
1256
|
+
+ ", ".join(cordons["collateral_spared"])
|
|
1257
|
+
)
|
|
1250
1258
|
if cordons.get("expired"):
|
|
1251
1259
|
lines.append(
|
|
1252
1260
|
" cordons that lapsed on their own: " + ", ".join(cordons["expired"])
|
|
@@ -363,22 +363,38 @@ class TestGuardsSurviveTheCliDoor:
|
|
|
363
363
|
assert "no structured review findings" in result.output
|
|
364
364
|
http.post.assert_not_called()
|
|
365
365
|
|
|
366
|
-
def
|
|
366
|
+
def test_guidance_on_a_review_id_is_pinned_above_the_findings(
|
|
367
367
|
self, config_file: Path, coord_dir: Path
|
|
368
368
|
) -> None:
|
|
369
|
-
"""
|
|
370
|
-
|
|
371
|
-
|
|
369
|
+
"""#2092: the reviewer's findings are the briefing, but the operator's
|
|
370
|
+
guidance is the only source of maintainer decisions the reviewer
|
|
371
|
+
cannot have — it must reach the worker, not vanish behind a warning.
|
|
372
|
+
Routed through the #603 pinned per-issue context store, it lands
|
|
373
|
+
ABOVE the reviewer's findings in the fix briefing."""
|
|
374
|
+
_seed(_work(), _review(), body="## Blocking\n- 1. GET /outbox is undocumented\n")
|
|
372
375
|
http = _http_mock()
|
|
373
376
|
|
|
374
377
|
with patch("coord.auto_loop.httpx", http), \
|
|
375
378
|
patch("coord.auto_loop.record_dispatched_assignment"), \
|
|
376
379
|
patch("coord.github_ops.post_issue_comment"):
|
|
377
|
-
result = _run(
|
|
380
|
+
result = _run(
|
|
381
|
+
config_file, "review-xyz",
|
|
382
|
+
"--guidance", "MAINTAINER DECISION: keep GET /outbox.",
|
|
383
|
+
)
|
|
378
384
|
|
|
379
385
|
assert result.exit_code == 0, result.output
|
|
380
|
-
assert "
|
|
381
|
-
|
|
386
|
+
assert "pinned to issue #42 context" in result.output
|
|
387
|
+
|
|
388
|
+
briefing = http.post.call_args.kwargs["json"]["briefing"]
|
|
389
|
+
assert "MAINTAINER DECISION: keep GET /outbox." in briefing
|
|
390
|
+
assert briefing.index("MAINTAINER DECISION") < briefing.index(
|
|
391
|
+
"GET /outbox is undocumented"
|
|
392
|
+
)
|
|
393
|
+
|
|
394
|
+
# It also outlives this one dispatch — it's a durable per-issue entry.
|
|
395
|
+
from coord.state import issue_context_block
|
|
396
|
+
|
|
397
|
+
assert "MAINTAINER DECISION: keep GET /outbox." in issue_context_block("api", 42)
|
|
382
398
|
|
|
383
399
|
|
|
384
400
|
# ── Part 3: red CI as the third trigger ──────────────────────────────────────
|