code-coordinator 0.5.95__tar.gz → 0.5.96__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.95 → code_coordinator-0.5.96}/PKG-INFO +1 -1
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/commands/release.py +82 -8
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/release_propagate.py +23 -1
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_release_propagate.py +161 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_release_window.py +52 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/.github/workflows/release-tui.yml +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/.gitignore +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/CLAUDE.md +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/GOAL.md +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/LICENSE +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/MANIFEST.in +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/README.md +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/__init__.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/agent.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/audit.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/block_log.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/board_bool_guard.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/board_service.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/brain.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/claim.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/cli.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/client.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/comments.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/config.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dao.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/.gitignore +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/components.json +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/dist/assets/Gallery-Cq84itDE.js +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/dist/assets/Terminal-DOXLcMue.js +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/dist/assets/index-DHn-RIJ8.js +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/dist/index.html +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/dist/sw.js +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/eslint.config.js +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/index.html +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/package-lock.json +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/package.json +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/playwright.config.ts +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/postcss.config.js +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/App.tsx +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/api/client.ts +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/api/generated.ts +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/index.css +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/main.tsx +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/test-setup.ts +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/tailwind.config.js +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/tsconfig.json +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/tsconfig.node.json +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dashboard/webapp/vite.config.ts +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/db.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/deps.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/drive.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/events.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/filelock.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/freshness.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/gates.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/goal.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/health/context.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/health/models.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/health/render.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/health/units.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/hooks.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/interactive.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/models.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/network.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/notify.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/openapi.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/parentage.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/plans.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/progress.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/release_window.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/reports.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/review.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/smoke.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/split_work.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/state.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/test_author.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/test_report.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/usage.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/install-agent.sh +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/pyproject.toml +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/setup.cfg +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/__init__.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/acceptance/ms-33/audit_1039.rs +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/acceptance/ms-33/contract.md +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/acceptance/ms-33/manifest.yml +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/acceptance/ms-38/contract.md +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/acceptance/ms-38/manifest.yml +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/conftest.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_config.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_db.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_events.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_init.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_models.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_network.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_no_direct_gh_calls.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_review.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_session.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_split.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_state.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/Cargo.lock +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/Cargo.toml +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/cargo-config-local-quadraui.toml.example +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/src/app/audit.rs +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/src/app/chat.rs +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/src/app/data.rs +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/src/app/dialogs.rs +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/src/app/drive.rs +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/src/app/drive_queue.rs +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/src/app/escalation.rs +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/src/app/events.rs +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/src/app/fixtures.rs +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/src/app/fleet_health.rs +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/src/app/fleet_sessions.rs +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/src/app/fleet_terminals.rs +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/src/app/format.rs +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/src/app/milestone_dag.rs +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/src/app/mod.rs +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/src/app/msv.rs +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/src/app/pipeline.rs +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/src/app/plans.rs +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/src/app/render.rs +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/src/app/reports.rs +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/src/app/sessions.rs +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/src/app/settings_ui.rs +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/src/app/sidebar.rs +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/src/app/terminal.rs +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/src/app/tests.rs +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/src/app/types.rs +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/src/app/workspace.rs +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/src/bin/gtk.rs +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/src/commands.rs +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/src/lib.rs +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/src/main.rs +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/src/settings.rs +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/tests/acceptance.rs +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/tests/cli.rs +0 -0
- {code_coordinator-0.5.95 → code_coordinator-0.5.96}/tui/tests/fixtures/board_sample.json +0 -0
|
@@ -371,6 +371,66 @@ def _interactive_session_busy(config) -> list:
|
|
|
371
371
|
return busy
|
|
372
372
|
|
|
373
373
|
|
|
374
|
+
def _paused_machine_busy(config) -> list:
|
|
375
|
+
"""Operator pause / quiet-hours state as host-pinned `Busy` signals (#2174).
|
|
376
|
+
|
|
377
|
+
`release_propagate.assess_quiescence`'s ``extra_busy`` docstring has
|
|
378
|
+
named "a machine paused by an operator" as a seam producer since
|
|
379
|
+
#1835, but until now nothing fed it one: `coord pause <machine>` said
|
|
380
|
+
"leave this box alone" and `coord release propagate` read the machine
|
|
381
|
+
as quiescent anyway, restarting `coord-agent` (and, on the daemon
|
|
382
|
+
host, `coord-serve`) on it regardless.
|
|
383
|
+
|
|
384
|
+
`coord.machine_pause.follow_on_paused_set()` is explicit `coord pause`
|
|
385
|
+
UNION any quiet-hours window currently covering the machine — both
|
|
386
|
+
genuine "an operator or an operator-set policy said stay off this
|
|
387
|
+
box" facts — MINUS #2101 release cordons. Cordons are deliberately
|
|
388
|
+
excluded: a cordon is THIS command's own drain mechanism, set to make
|
|
389
|
+
a behind host quiescent, not a sign that it already is one; feeding a
|
|
390
|
+
cordon back in here as "busy" would make it defer the very roll it
|
|
391
|
+
exists to unblock.
|
|
392
|
+
|
|
393
|
+
Thin-client aware for free: `follow_on_paused_set` routes through the
|
|
394
|
+
daemon's `/pause` endpoint when a board service is configured (#1563),
|
|
395
|
+
so this reads the one copy of pause state that actually governs
|
|
396
|
+
dispatch — same as every other pause-aware call site in the fleet.
|
|
397
|
+
"""
|
|
398
|
+
from coord.machine_pause import ( # noqa: PLC0415
|
|
399
|
+
describe_pause_state,
|
|
400
|
+
effective_quiet_hours,
|
|
401
|
+
follow_on_paused_set,
|
|
402
|
+
)
|
|
403
|
+
from coord import release_propagate as rp # noqa: PLC0415
|
|
404
|
+
|
|
405
|
+
machines = list(getattr(config, "machines", ()) or ())
|
|
406
|
+
if not machines:
|
|
407
|
+
return []
|
|
408
|
+
paused = follow_on_paused_set(machines)
|
|
409
|
+
if not paused:
|
|
410
|
+
return []
|
|
411
|
+
quiet_hours = effective_quiet_hours(machines)
|
|
412
|
+
busy = []
|
|
413
|
+
for machine in machines:
|
|
414
|
+
if machine.name not in paused:
|
|
415
|
+
continue
|
|
416
|
+
state = describe_pause_state(machine, paused, quiet_hours=quiet_hours)
|
|
417
|
+
if state is None:
|
|
418
|
+
continue # defensive: membership in `paused` implies a reason
|
|
419
|
+
detail = (
|
|
420
|
+
f"quiet hours {state.detail}" if state.kind == "quiet"
|
|
421
|
+
else "explicit `coord pause`"
|
|
422
|
+
)
|
|
423
|
+
busy.append(
|
|
424
|
+
rp.Busy(
|
|
425
|
+
kind="machine paused",
|
|
426
|
+
subject=machine.name,
|
|
427
|
+
detail=detail,
|
|
428
|
+
host=machine.name,
|
|
429
|
+
)
|
|
430
|
+
)
|
|
431
|
+
return busy
|
|
432
|
+
|
|
433
|
+
|
|
374
434
|
def _daemon_machine_name(
|
|
375
435
|
config, override: str | None, machine_health: dict | None = None
|
|
376
436
|
) -> str | None:
|
|
@@ -638,6 +698,10 @@ def release_propagate( # noqa: PLR0912, PLR0915 — a pipeline; the decisions a
|
|
|
638
698
|
# probe `coord sessions --remote` uses, so a live session defers a roll
|
|
639
699
|
# exactly like a live headless assignment does.
|
|
640
700
|
extra_busy.extend(_interactive_session_busy(config))
|
|
701
|
+
# #2174: nor can it see `coord pause`/quiet-hours state — feed the same
|
|
702
|
+
# seam from the daemon-aware pause store, so an operator-paused machine
|
|
703
|
+
# defers exactly like a live assignment does instead of reading idle.
|
|
704
|
+
extra_busy.extend(_paused_machine_busy(config))
|
|
641
705
|
quiescence = rp.assess_quiescence(
|
|
642
706
|
queue_entries=board.get("drive_queue") or [],
|
|
643
707
|
assignments=board.get("assignments") or [],
|
|
@@ -2163,14 +2227,19 @@ def _drain(
|
|
|
2163
2227
|
#2228: ``extra_busy_fetch`` re-probes live interactive sessions on
|
|
2164
2228
|
every poll (not just once) — a session that ends mid-drain should let
|
|
2165
2229
|
the daemon host clear within THIS wait, not only on the next `coord
|
|
2166
|
-
release propagate` tick.
|
|
2167
|
-
|
|
2168
|
-
|
|
2169
|
-
|
|
2170
|
-
|
|
2230
|
+
release propagate` tick. #2174: the same default also re-reads
|
|
2231
|
+
`coord pause`/quiet-hours state on every poll, for the same reason —
|
|
2232
|
+
an operator pausing the daemon host mid-drain must stop the drain from
|
|
2233
|
+
ever reporting "clear", and an operator lifting a pause mid-drain
|
|
2234
|
+
should let it clear within THIS wait rather than the next tick.
|
|
2235
|
+
Deliberately keyed off the explicit *config* param, never an implicit
|
|
2236
|
+
``_load_config(config_path)`` fallback: this function is called with
|
|
2237
|
+
``config_path=None`` from unit tests that inject their own clock/board
|
|
2238
|
+
— silently resolving a real ``coordinator.yml`` (and then SSH-probing
|
|
2239
|
+
whatever machines it names, or reading this host's own pause store)
|
|
2171
2240
|
the moment ``config`` is omitted would make this loop non-hermetic by
|
|
2172
|
-
default. No *config* simply means "no interactive-session
|
|
2173
|
-
call" — the caller opts in by passing one, as the real
|
|
2241
|
+
default. No *config* simply means "no interactive-session or pause
|
|
2242
|
+
signal this call" — the caller opts in by passing one, as the real
|
|
2174
2243
|
``coord release nightly-window`` call site does.
|
|
2175
2244
|
"""
|
|
2176
2245
|
import time as _time # noqa: PLC0415
|
|
@@ -2184,7 +2253,12 @@ def _drain(
|
|
|
2184
2253
|
fetch_fn = board_fetch or _fetch_board
|
|
2185
2254
|
if extra_busy_fetch is None:
|
|
2186
2255
|
if config is not None:
|
|
2187
|
-
|
|
2256
|
+
# #2174: paused/quiet-hours state, same as the top-level
|
|
2257
|
+
# `propagate` call site — a paused daemon host must keep the
|
|
2258
|
+
# drain from ever reading "clear" just because tmux is quiet.
|
|
2259
|
+
extra_busy_fetch = lambda: ( # noqa: E731
|
|
2260
|
+
_interactive_session_busy(config) + _paused_machine_busy(config)
|
|
2261
|
+
)
|
|
2188
2262
|
else:
|
|
2189
2263
|
extra_busy_fetch = lambda: [] # noqa: E731
|
|
2190
2264
|
|
|
@@ -785,7 +785,29 @@ def assess_quiescence(
|
|
|
785
785
|
#2228: the interactive-session half is wired from
|
|
786
786
|
``coord.commands.release._interactive_session_busy``, fed by the same
|
|
787
787
|
fleet-wide tmux sweep ``coord sessions --remote`` renders — until then
|
|
788
|
-
this half of the seam existed but nothing ever fed it.
|
|
788
|
+
this half of the seam existed but nothing ever fed it. #2174: the
|
|
789
|
+
operator-pause half is wired from
|
|
790
|
+
``coord.commands.release._paused_machine_busy`` — a machine under an
|
|
791
|
+
explicit ``coord pause`` or an active quiet-hours window (but NOT a
|
|
792
|
+
#2101 release cordon: that is this module's own drain mechanism, not a
|
|
793
|
+
sign a host is already quiescent, and feeding it back in here would
|
|
794
|
+
make a cordon defer the very roll it exists to unblock) becomes a
|
|
795
|
+
host-pinned :class:`Busy`. Tmux liveness genuinely has no fleet-wide
|
|
796
|
+
read (it is a LOCAL fact, #1870, and propagation may run from any
|
|
797
|
+
host) — pause state does, because it is daemon-aware
|
|
798
|
+
(``coord.machine_pause``) the same way the board is, so both callers
|
|
799
|
+
can read it cheaply with no new probe.
|
|
800
|
+
|
|
801
|
+
Because a :class:`Busy` carries a host, #2067's per-host quiescence
|
|
802
|
+
does the obvious thing for a paused NON-daemon host: it defers only
|
|
803
|
+
that host, and the rest of the fleet still rolls. A paused DAEMON host
|
|
804
|
+
is different on purpose — the daemon-leads invariant (see the module
|
|
805
|
+
docstring's LANE ORDER) already defers the WHOLE run whenever the
|
|
806
|
+
daemon host is itself busy and behind, and a pause is just one more
|
|
807
|
+
way for the daemon host to be busy. So ``coord pause <daemon-host>``
|
|
808
|
+
halting all propagation, not just that host's own lane, is read as the
|
|
809
|
+
correct interpretation of "leave this box alone" applied to the one
|
|
810
|
+
host every other host's roll depends on — not an emergent accident.
|
|
789
811
|
|
|
790
812
|
#2110: a ``running`` queue row is not, on its own, proof of anything —
|
|
791
813
|
the reconciler that would have moved it to ``done`` lives inside
|
|
@@ -26,9 +26,11 @@ import json
|
|
|
26
26
|
import pytest
|
|
27
27
|
from click.testing import CliRunner
|
|
28
28
|
|
|
29
|
+
from coord import machine_pause as mp
|
|
29
30
|
from coord import release_propagate as rp
|
|
30
31
|
from coord.cli import main
|
|
31
32
|
from coord.commands import release as release_cmd
|
|
33
|
+
from coord.config import load as load_config
|
|
32
34
|
from coord.drive_queue import HOLD_FIRED, STATE_RUNNING
|
|
33
35
|
|
|
34
36
|
# Captured at import time, before any fixture has a chance to monkeypatch
|
|
@@ -40,6 +42,42 @@ from coord.drive_queue import HOLD_FIRED, STATE_RUNNING
|
|
|
40
42
|
_REAL_INTERACTIVE_SESSION_BUSY = release_cmd._interactive_session_busy
|
|
41
43
|
|
|
42
44
|
|
|
45
|
+
@pytest.fixture(autouse=True)
|
|
46
|
+
def _own_pause_store(tmp_path, monkeypatch):
|
|
47
|
+
"""Give every test in this module its own pause store (#2174).
|
|
48
|
+
|
|
49
|
+
`coord release propagate` both READS the pause store (#2174's
|
|
50
|
+
`_paused_machine_busy`) and WRITES it (#2101's cordons), and several
|
|
51
|
+
tests below seed it with `mp.local_pause()` / `mp.local_set_cordon()`.
|
|
52
|
+
That store is per-`$HOME`, not per-test — so without this, one test's
|
|
53
|
+
pause leaks into every test that runs after it in the same session.
|
|
54
|
+
|
|
55
|
+
`conftest._no_real_pause_store` does not cover this: it redirects only
|
|
56
|
+
when the resolved path lands under the REAL home, on the assumption
|
|
57
|
+
that a redirected `$HOME` was redirected BY THE TEST, per test. That
|
|
58
|
+
assumption is false under `scripts/run_tests_in_populated_home.sh`
|
|
59
|
+
(#2170), where `$HOME` is one throwaway thin-client directory shared by
|
|
60
|
+
the WHOLE run: the guard stands down and the store becomes session
|
|
61
|
+
state. That is exactly how this module went green on `ubuntu-latest`
|
|
62
|
+
and red on the `populated-home` job — a phantom `machine paused:
|
|
63
|
+
server` in tests that never paused anything, deferring rolls that
|
|
64
|
+
should have proceeded.
|
|
65
|
+
|
|
66
|
+
Redirecting `$HOME` (rather than patching `_state_path`) is what every
|
|
67
|
+
other pause-touching module here already does — `test_machine_pause`,
|
|
68
|
+
`test_quiet_hours`, `test_release_cordon_2101`,
|
|
69
|
+
`test_release_cordon_deadlock_2240` — and it also pins the thin-client
|
|
70
|
+
decision: a tmp `$HOME` has no `client.toml`, so this module resolves
|
|
71
|
+
board-service the same way in both CI jobs instead of inheriting
|
|
72
|
+
whichever shape the ambient home happens to have.
|
|
73
|
+
"""
|
|
74
|
+
home = tmp_path / "home"
|
|
75
|
+
(home / ".coord").mkdir(parents=True)
|
|
76
|
+
monkeypatch.setenv("HOME", str(home))
|
|
77
|
+
monkeypatch.setenv("USERPROFILE", str(home))
|
|
78
|
+
return home
|
|
79
|
+
|
|
80
|
+
|
|
43
81
|
@pytest.fixture()
|
|
44
82
|
def state_dir(tmp_path, monkeypatch):
|
|
45
83
|
"""Point the propagation journal at a tmp dir, never the real ~/.coord."""
|
|
@@ -608,6 +646,129 @@ def test_a_failing_session_probe_does_not_defer_the_fleet(
|
|
|
608
646
|
assert _records(state_dir)[0]["status"] == rp.STATUS_VERIFIED
|
|
609
647
|
|
|
610
648
|
|
|
649
|
+
# ──────────────────────────────────────────────────────────────────────────
|
|
650
|
+
# #2174: `coord pause <machine>` says "leave this box alone" — the board has
|
|
651
|
+
# no `paused` column on any row, so it has to reach `assess_quiescence`
|
|
652
|
+
# through the same `extra_busy` seam as a live interactive session.
|
|
653
|
+
# ──────────────────────────────────────────────────────────────────────────
|
|
654
|
+
|
|
655
|
+
|
|
656
|
+
def test_a_paused_non_daemon_host_defers_alone_while_the_daemon_rolls(
|
|
657
|
+
valid_config_path, state_dir, no_network, monkeypatch
|
|
658
|
+
):
|
|
659
|
+
"""`laptop` is paused; `server` (the daemon) is not. `server` must roll
|
|
660
|
+
and verify while `laptop`'s lane is recorded as a per-host deferral
|
|
661
|
+
naming the pause, not attempted — the same shape as a live headless
|
|
662
|
+
assignment (#2067) or a live interactive session (#2228). This is the
|
|
663
|
+
exact regression #2174 reports: before the fix, a paused machine read as
|
|
664
|
+
idle and `coord release propagate` rolled it anyway."""
|
|
665
|
+
mp.local_pause("laptop")
|
|
666
|
+
calls = _stub_lanes(monkeypatch)
|
|
667
|
+
_stub_verify(monkeypatch, versions={"laptop": ["0.4.110"], "server": ["0.4.110"]},
|
|
668
|
+
daemon="server")
|
|
669
|
+
result = CliRunner().invoke(
|
|
670
|
+
main,
|
|
671
|
+
["release", "propagate", "--config", str(valid_config_path),
|
|
672
|
+
"--target", "0.4.111"],
|
|
673
|
+
)
|
|
674
|
+
assert result.exit_code == 0, result.output
|
|
675
|
+
assert any(host == "server" for _lane, host in calls)
|
|
676
|
+
assert not any(host == "laptop" for _lane, host in calls)
|
|
677
|
+
|
|
678
|
+
record = _records(state_dir)[0]
|
|
679
|
+
assert record["status"] == rp.STATUS_VERIFIED
|
|
680
|
+
laptop_lane = next(l for l in record["lanes"] if l["host"] == "laptop")
|
|
681
|
+
assert laptop_lane["lane"] == "-"
|
|
682
|
+
assert laptop_lane["ok"] is None
|
|
683
|
+
assert "deferred" in laptop_lane["detail"]
|
|
684
|
+
assert "machine paused" in laptop_lane["detail"]
|
|
685
|
+
assert "laptop" in laptop_lane["detail"]
|
|
686
|
+
|
|
687
|
+
|
|
688
|
+
def test_a_paused_host_is_visible_in_a_dry_run_plan(
|
|
689
|
+
valid_config_path, state_dir, no_network, monkeypatch
|
|
690
|
+
):
|
|
691
|
+
"""Acceptance: `coord release propagate --dry-run` against a board
|
|
692
|
+
where one machine is paused reports that machine as busy and excludes
|
|
693
|
+
it from the rollable set, while other hosts remain rollable."""
|
|
694
|
+
mp.local_pause("laptop")
|
|
695
|
+
_stub_verify(monkeypatch, versions={"laptop": ["0.4.110"], "server": ["0.4.110"]},
|
|
696
|
+
daemon="server")
|
|
697
|
+
result = CliRunner().invoke(
|
|
698
|
+
main,
|
|
699
|
+
["release", "propagate", "--config", str(valid_config_path),
|
|
700
|
+
"--target", "0.4.111", "--dry-run"],
|
|
701
|
+
)
|
|
702
|
+
assert result.exit_code == 0, result.output
|
|
703
|
+
would_roll_lines = "\n".join(
|
|
704
|
+
l for l in result.output.splitlines() if "would roll" in l
|
|
705
|
+
)
|
|
706
|
+
assert "server" in would_roll_lines
|
|
707
|
+
assert "laptop" not in would_roll_lines
|
|
708
|
+
assert "machine paused" in result.output
|
|
709
|
+
assert "explicit `coord pause`" in result.output
|
|
710
|
+
|
|
711
|
+
|
|
712
|
+
def test_a_paused_daemon_host_defers_the_whole_run(
|
|
713
|
+
valid_config_path, state_dir, no_network, monkeypatch
|
|
714
|
+
):
|
|
715
|
+
"""#2174 item 2: pausing the DAEMON host defers the whole run, not just
|
|
716
|
+
that host's own lane — the daemon-leads invariant already defers
|
|
717
|
+
everything when the daemon is busy and behind, and a pause is one more
|
|
718
|
+
way for it to be busy. The recorded reason must name the pause, not a
|
|
719
|
+
generic 'busy' string."""
|
|
720
|
+
mp.local_pause("server")
|
|
721
|
+
monkeypatch.setattr(
|
|
722
|
+
release_cmd, "_roll_python",
|
|
723
|
+
lambda *a, **k: pytest.fail("a paused daemon must roll nothing, anywhere"),
|
|
724
|
+
)
|
|
725
|
+
_stub_verify(monkeypatch, versions={"laptop": ["0.4.110"], "server": ["0.4.110"]},
|
|
726
|
+
daemon="server")
|
|
727
|
+
result = CliRunner().invoke(
|
|
728
|
+
main,
|
|
729
|
+
["release", "propagate", "--config", str(valid_config_path),
|
|
730
|
+
"--target", "0.4.111"],
|
|
731
|
+
)
|
|
732
|
+
assert result.exit_code == 0, result.output
|
|
733
|
+
record = _records(state_dir)[0]
|
|
734
|
+
assert record["status"] == rp.STATUS_DEFERRED
|
|
735
|
+
assert record["lanes"] == []
|
|
736
|
+
assert "machine paused" in record["quiescence"]["reason"]
|
|
737
|
+
assert "server" in record["quiescence"]["reason"]
|
|
738
|
+
|
|
739
|
+
|
|
740
|
+
def test_an_unpaused_fleet_is_unaffected_by_the_pause_seam(
|
|
741
|
+
valid_config_path, state_dir, no_network, monkeypatch
|
|
742
|
+
):
|
|
743
|
+
"""Acceptance: an unpaused fleet gets no new busy signal from #2174 —
|
|
744
|
+
`quiescent` and the roll outcome are unchanged from before the fix."""
|
|
745
|
+
calls = _stub_lanes(monkeypatch)
|
|
746
|
+
_stub_verify(monkeypatch, versions={"laptop": ["0.4.110"], "server": ["0.4.110"]},
|
|
747
|
+
daemon="server")
|
|
748
|
+
result = CliRunner().invoke(
|
|
749
|
+
main,
|
|
750
|
+
["release", "propagate", "--config", str(valid_config_path),
|
|
751
|
+
"--target", "0.4.111"],
|
|
752
|
+
)
|
|
753
|
+
assert result.exit_code == 0, result.output
|
|
754
|
+
assert {host for _lane, host in calls} == {"laptop", "server"}
|
|
755
|
+
record = _records(state_dir)[0]
|
|
756
|
+
assert record["status"] == rp.STATUS_VERIFIED
|
|
757
|
+
assert record["quiescence"]["quiescent"] is True
|
|
758
|
+
|
|
759
|
+
|
|
760
|
+
def test_a_release_cordon_alone_is_not_read_as_an_operator_pause(valid_config_path):
|
|
761
|
+
"""A #2101 release cordon is this command's OWN drain mechanism, not a
|
|
762
|
+
sign a host is already quiescent — feeding it back in through
|
|
763
|
+
`_paused_machine_busy` would make a cordon defer the very roll it exists
|
|
764
|
+
to unblock. Cordoning `laptop` (with no explicit `coord pause` and no
|
|
765
|
+
quiet-hours window) must not, on its own, produce a `machine paused`
|
|
766
|
+
busy signal."""
|
|
767
|
+
mp.local_set_cordon("laptop", target_version="0.4.110")
|
|
768
|
+
config = load_config(str(valid_config_path))
|
|
769
|
+
assert release_cmd._paused_machine_busy(config) == []
|
|
770
|
+
|
|
771
|
+
|
|
611
772
|
# ── the roll, the final gate, and the rollback on red ────────────────────
|
|
612
773
|
|
|
613
774
|
|
|
@@ -36,6 +36,28 @@ from coord.cli import main
|
|
|
36
36
|
from coord.commands import release as release_cmd
|
|
37
37
|
|
|
38
38
|
|
|
39
|
+
@pytest.fixture(autouse=True)
|
|
40
|
+
def _own_pause_store(tmp_path, monkeypatch):
|
|
41
|
+
"""Give every test in this module its own pause store (#2174).
|
|
42
|
+
|
|
43
|
+
`test_drain_is_blocked_by_a_paused_daemon_host` calls
|
|
44
|
+
`mp.local_pause("server")`, and that store is per-`$HOME`, not
|
|
45
|
+
per-test. `conftest._no_real_pause_store` redirects only when the
|
|
46
|
+
resolved path lands under the REAL home, so under
|
|
47
|
+
`scripts/run_tests_in_populated_home.sh` (#2170) — where `$HOME` is one
|
|
48
|
+
throwaway directory shared by the whole run — the pause survives this
|
|
49
|
+
test and every later one reads a machine it never paused. See
|
|
50
|
+
`tests/test_cli_release_propagate.py::_own_pause_store` for the full
|
|
51
|
+
write-up; this is the same hazard in the sibling module that shares the
|
|
52
|
+
seam.
|
|
53
|
+
"""
|
|
54
|
+
home = tmp_path / "home"
|
|
55
|
+
(home / ".coord").mkdir(parents=True)
|
|
56
|
+
monkeypatch.setenv("HOME", str(home))
|
|
57
|
+
monkeypatch.setenv("USERPROFILE", str(home))
|
|
58
|
+
return home
|
|
59
|
+
|
|
60
|
+
|
|
39
61
|
@pytest.fixture()
|
|
40
62
|
def state_dir(tmp_path, monkeypatch):
|
|
41
63
|
"""Point the window journal at a tmp dir, never the real ~/.coord."""
|
|
@@ -597,6 +619,36 @@ def test_drain_treats_an_unreadable_board_as_fleet_wide_busy():
|
|
|
597
619
|
assert "board unreadable" in outcome.detail
|
|
598
620
|
|
|
599
621
|
|
|
622
|
+
def test_drain_is_blocked_by_a_paused_daemon_host(valid_config_path, monkeypatch):
|
|
623
|
+
"""#2174: `_drain`'s default `extra_busy_fetch` — the one the real
|
|
624
|
+
`coord release nightly-window` call site uses (it passes `config=`) —
|
|
625
|
+
must also see `coord pause`/quiet-hours state, not just tmux. A paused
|
|
626
|
+
daemon host must never read as 'drained' just because the board and
|
|
627
|
+
tmux are both quiet; before the fix nothing here ever consulted the
|
|
628
|
+
pause store at all."""
|
|
629
|
+
from coord import machine_pause as mp
|
|
630
|
+
from coord.config import load as load_config
|
|
631
|
+
|
|
632
|
+
config = load_config(str(valid_config_path))
|
|
633
|
+
monkeypatch.setattr(release_cmd, "_interactive_session_busy", lambda config: [])
|
|
634
|
+
mp.local_pause("server")
|
|
635
|
+
|
|
636
|
+
outcome = release_cmd._drain(
|
|
637
|
+
daemon_host="server",
|
|
638
|
+
config_path=None,
|
|
639
|
+
config=config,
|
|
640
|
+
deadline=10.0,
|
|
641
|
+
poll_interval=5.0,
|
|
642
|
+
reconcile=lambda: None,
|
|
643
|
+
board_fetch=lambda: ({}, None),
|
|
644
|
+
now=(lambda ts=[0.0]: (ts.__setitem__(0, ts[0] + 5.0), ts[0])[1]),
|
|
645
|
+
sleep=lambda s: None,
|
|
646
|
+
)
|
|
647
|
+
assert outcome.drained is False
|
|
648
|
+
assert "machine paused" in outcome.detail
|
|
649
|
+
assert "server" in outcome.detail
|
|
650
|
+
|
|
651
|
+
|
|
600
652
|
# ── #2187: a VERIFIED, exit-0 propagate must never be reported as
|
|
601
653
|
# `propagate-failed` — the whole bug this issue is about ─────────────────
|
|
602
654
|
#
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{code_coordinator-0.5.95 → code_coordinator-0.5.96}/code_coordinator.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{code_coordinator-0.5.95 → code_coordinator-0.5.96}/code_coordinator.egg-info/entry_points.txt
RENAMED
|
File without changes
|
|
File without changes
|
{code_coordinator-0.5.95 → code_coordinator-0.5.96}/code_coordinator.egg-info/scm_file_list.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|