code-coordinator 0.5.94__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.94 → code_coordinator-0.5.96}/PKG-INFO +1 -1
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/acceptance.py +44 -1
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/commands/acceptance.py +127 -2
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/commands/release.py +82 -8
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/merge_queue.py +129 -27
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/release_propagate.py +23 -1
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_acceptance.py +54 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_cli_acceptance.py +199 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_cli_release_propagate.py +161 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_cli_release_window.py +52 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_merge_queue.py +106 -4
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/.github/workflows/release-tui.yml +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/.gitignore +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/CLAUDE.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/GOAL.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/LICENSE +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/MANIFEST.in +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/README.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/__init__.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/agent.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/audit.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/block_log.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/board_bool_guard.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/board_service.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/brain.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/claim.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/cli.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/client.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/comments.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/config.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dao.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/.gitignore +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/components.json +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/dist/assets/Gallery-Cq84itDE.js +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/dist/assets/Terminal-DOXLcMue.js +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/dist/assets/index-DHn-RIJ8.js +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/dist/index.html +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/dist/sw.js +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/eslint.config.js +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/index.html +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/package-lock.json +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/package.json +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/playwright.config.ts +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/postcss.config.js +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/App.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/api/client.ts +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/api/generated.ts +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/index.css +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/main.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/test-setup.ts +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/tailwind.config.js +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/tsconfig.json +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/tsconfig.node.json +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dashboard/webapp/vite.config.ts +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/db.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/deps.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/drive.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/events.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/filelock.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/freshness.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/gates.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/goal.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/health/context.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/health/models.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/health/render.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/health/units.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/hooks.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/interactive.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/models.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/network.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/notify.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/openapi.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/parentage.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/plans.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/progress.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/release_window.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/reports.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/review.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/smoke.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/split_work.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/state.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/test_author.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/test_report.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/usage.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/install-agent.sh +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/pyproject.toml +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/setup.cfg +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/__init__.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/acceptance/ms-33/audit_1039.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/acceptance/ms-33/contract.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/acceptance/ms-33/manifest.yml +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/acceptance/ms-38/contract.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/acceptance/ms-38/manifest.yml +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/conftest.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_config.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_db.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_events.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_init.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_models.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_network.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_no_direct_gh_calls.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_review.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_session.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_split.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_state.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tui/Cargo.lock +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tui/Cargo.toml +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tui/cargo-config-local-quadraui.toml.example +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tui/src/app/audit.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tui/src/app/chat.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tui/src/app/data.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tui/src/app/dialogs.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tui/src/app/drive.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tui/src/app/drive_queue.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tui/src/app/escalation.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tui/src/app/events.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tui/src/app/fixtures.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tui/src/app/fleet_health.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tui/src/app/fleet_sessions.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tui/src/app/fleet_terminals.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tui/src/app/format.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tui/src/app/milestone_dag.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tui/src/app/mod.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tui/src/app/msv.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tui/src/app/pipeline.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tui/src/app/plans.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tui/src/app/render.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tui/src/app/reports.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tui/src/app/sessions.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tui/src/app/settings_ui.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tui/src/app/sidebar.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tui/src/app/terminal.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tui/src/app/tests.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tui/src/app/types.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tui/src/app/workspace.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tui/src/bin/gtk.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tui/src/commands.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tui/src/lib.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tui/src/main.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tui/src/settings.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tui/tests/acceptance.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tui/tests/cli.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.96}/tui/tests/fixtures/board_sample.json +0 -0
|
@@ -22,7 +22,7 @@ import json
|
|
|
22
22
|
import re
|
|
23
23
|
from dataclasses import dataclass, field
|
|
24
24
|
from pathlib import Path
|
|
25
|
-
from typing import Any, Callable
|
|
25
|
+
from typing import Any, Callable, Literal
|
|
26
26
|
|
|
27
27
|
import yaml
|
|
28
28
|
|
|
@@ -1105,3 +1105,46 @@ def clear_expected_red_via_pr(
|
|
|
1105
1105
|
f"cleared expected_red for #{issue_number}: {', '.join(sorted(ids))} "
|
|
1106
1106
|
f"(PR #{pr['number']})"
|
|
1107
1107
|
)
|
|
1108
|
+
|
|
1109
|
+
|
|
1110
|
+
ExpectedRedClearStatus = Literal["cleared", "no_op", "pending_retry", "failed"]
|
|
1111
|
+
|
|
1112
|
+
|
|
1113
|
+
def classify_expected_red_clear_result(msg: str) -> ExpectedRedClearStatus:
|
|
1114
|
+
"""#2266 review (blocking finding 2): the single source of truth for
|
|
1115
|
+
interpreting :func:`clear_expected_red_via_pr`'s return string.
|
|
1116
|
+
|
|
1117
|
+
Before this, ``coord.merge_queue._maybe_clear_expected_red`` and
|
|
1118
|
+
``coord.commands.acceptance._clear_stuck_expected_red`` each carried
|
|
1119
|
+
their own ``msg.startswith("cleared expected_red")`` check — two
|
|
1120
|
+
independent implementations of "did the clear succeed?" that agreed
|
|
1121
|
+
today but could silently desync the moment either
|
|
1122
|
+
:func:`clear_expected_red_via_pr`'s wording changed (the exact "One
|
|
1123
|
+
question, one answer" split-brain the epic #2096 review checklist
|
|
1124
|
+
warns about). Both call sites now classify through this function.
|
|
1125
|
+
|
|
1126
|
+
Returns one of four outcomes, not a bare bool — a binary
|
|
1127
|
+
cleared/not-cleared collapsed two very different "not cleared" cases
|
|
1128
|
+
into one (#2266 review, blocking finding 1):
|
|
1129
|
+
|
|
1130
|
+
* ``"cleared"`` — the PR opened *and* merged; entries are gone.
|
|
1131
|
+
* ``"no_op"`` — there was nothing to clear in the first place (no
|
|
1132
|
+
manifest found for this issue, or the issue has no ``expected_red``
|
|
1133
|
+
entries at all). This is the *common* case for an ordinary
|
|
1134
|
+
oracle-loop merge whose issue was never part of a deliberately-red
|
|
1135
|
+
slice — it must never read as a failure.
|
|
1136
|
+
* ``"pending_retry"`` — the clearing PR opened but did not merge yet
|
|
1137
|
+
(branch protection / required checks pending); the caller already
|
|
1138
|
+
knows this will retry on the next merge, not a hard failure.
|
|
1139
|
+
* ``"failed"`` — a genuine failure: everything ``clear_expected_red_via_pr``'s
|
|
1140
|
+
docstring says degrades to a ``"warning: ..."``-prefixed string
|
|
1141
|
+
(unresolvable branch tip, a commit/PR-open/PR-merge exception, an
|
|
1142
|
+
unsupported ``gh_ops``, a JSON manifest, or unchanged text).
|
|
1143
|
+
"""
|
|
1144
|
+
if msg.startswith("cleared expected_red"):
|
|
1145
|
+
return "cleared"
|
|
1146
|
+
if msg.startswith("no expected_red entries"):
|
|
1147
|
+
return "no_op"
|
|
1148
|
+
if "did not merge" in msg and "will retry on the next merge" in msg:
|
|
1149
|
+
return "pending_retry"
|
|
1150
|
+
return "failed"
|
|
@@ -50,6 +50,7 @@ from coord.acceptance_drivers import DriverError, run_driver
|
|
|
50
50
|
from coord.commands._common import _CONFIG_OPTION, _load_config
|
|
51
51
|
from coord.comments import format_needs_attention
|
|
52
52
|
from coord.dispatch import DispatchRefused
|
|
53
|
+
from coord.models import Repo
|
|
53
54
|
|
|
54
55
|
|
|
55
56
|
@click.group("acceptance")
|
|
@@ -642,12 +643,42 @@ def acceptance_record(
|
|
|
642
643
|
"merge` right after that issue's fix merges) may have failed, or "
|
|
643
644
|
"the fix landed by some other path. A long-lived expected_red "
|
|
644
645
|
"entry is exactly the invisible debt this command exists to "
|
|
645
|
-
"surface."
|
|
646
|
+
"surface. #2266: `--clear` acts on it — for every STUCK entry this "
|
|
647
|
+
"listing finds, invoke the same `clear_expected_red_via_pr` PR "
|
|
648
|
+
"path `coord merge` uses, so a registry stuck because the merge-"
|
|
649
|
+
"time trust-gate guards never fired (acceptance never recorded, or "
|
|
650
|
+
"the PR merged out of band) has a re-fire path instead of only a "
|
|
651
|
+
"detector. Never touches an entry whose issue is still open — "
|
|
652
|
+
"those are read as legitimately red, not stuck."
|
|
646
653
|
),
|
|
647
654
|
)
|
|
648
655
|
@click.argument("repo")
|
|
649
656
|
@_CONFIG_OPTION
|
|
650
|
-
|
|
657
|
+
@click.option(
|
|
658
|
+
"--clear", "do_clear", is_flag=True, default=False,
|
|
659
|
+
help=(
|
|
660
|
+
"Open+merge the expected_red-clearing PR for every STUCK entry "
|
|
661
|
+
"this listing finds (issue closed, entries still live). Skips — "
|
|
662
|
+
"never clears — any entry whose issue is still open."
|
|
663
|
+
),
|
|
664
|
+
)
|
|
665
|
+
@click.option(
|
|
666
|
+
"--issue", "only_issue", type=int, default=None,
|
|
667
|
+
help="With --clear, restrict clearing to this issue number.",
|
|
668
|
+
)
|
|
669
|
+
def acceptance_expected_red(
|
|
670
|
+
repo: str, config_path: Path, do_clear: bool, only_issue: int | None, # noqa: FBT001
|
|
671
|
+
) -> None:
|
|
672
|
+
if only_issue is not None and not do_clear:
|
|
673
|
+
# #2266 review nit: `--issue` only narrows what `--clear` acts on
|
|
674
|
+
# (per its own help text) — silently accepting it without `--clear`
|
|
675
|
+
# looks like it did something when it didn't.
|
|
676
|
+
click.echo(
|
|
677
|
+
"warning: --issue has no effect without --clear; the listing "
|
|
678
|
+
"below covers every issue.",
|
|
679
|
+
err=True,
|
|
680
|
+
)
|
|
681
|
+
|
|
651
682
|
cfg = _load_config(config_path)
|
|
652
683
|
repo_entry = cfg.repo(repo)
|
|
653
684
|
if repo_entry is None:
|
|
@@ -660,23 +691,117 @@ def acceptance_expected_red(repo: str, config_path: Path) -> None:
|
|
|
660
691
|
return
|
|
661
692
|
|
|
662
693
|
total = 0
|
|
694
|
+
# #2266: STUCK entries found while rendering the listing above — the
|
|
695
|
+
# exact set `--clear` acts on, so the remedy can never drift from the
|
|
696
|
+
# detector that names the debt.
|
|
697
|
+
stuck: list[tuple[str, int, frozenset[str]]] = []
|
|
663
698
|
for ms, by_issue in sorted(by_ms.items()):
|
|
664
699
|
click.echo(f"{ms}:")
|
|
665
700
|
for issue_number, ids in sorted(by_issue.items()):
|
|
666
701
|
total += len(ids)
|
|
667
702
|
closed_note = ""
|
|
703
|
+
is_stuck = False
|
|
668
704
|
try:
|
|
669
705
|
issue_data = github_ops.get_issue(repo_entry.github, issue_number)
|
|
670
706
|
if str((issue_data or {}).get("state", "")).lower() == "closed":
|
|
671
707
|
closed_note = " [STUCK: issue is closed but entries remain]"
|
|
708
|
+
is_stuck = True
|
|
672
709
|
except Exception: # noqa: BLE001 — a lookup hiccup shouldn't hide the entry itself
|
|
673
710
|
pass
|
|
674
711
|
click.echo(
|
|
675
712
|
f" #{issue_number}: {', '.join(sorted(ids))}{closed_note}"
|
|
676
713
|
)
|
|
714
|
+
if is_stuck:
|
|
715
|
+
stuck.append((ms, issue_number, ids))
|
|
677
716
|
click.echo(f"\n{total} expected_red test-id(s) across "
|
|
678
717
|
f"{sum(len(v) for v in by_ms.values())} issue(s).")
|
|
679
718
|
|
|
719
|
+
if not do_clear:
|
|
720
|
+
return
|
|
721
|
+
|
|
722
|
+
_clear_stuck_expected_red(repo, repo_entry, stuck, only_issue)
|
|
723
|
+
|
|
724
|
+
|
|
725
|
+
def _clear_stuck_expected_red(
|
|
726
|
+
repo: str, repo_entry: Repo, stuck: list[tuple[str, int, frozenset[str]]],
|
|
727
|
+
only_issue: int | None,
|
|
728
|
+
) -> None:
|
|
729
|
+
"""#2266: the remedy half of `coord acceptance expected-red --clear`.
|
|
730
|
+
|
|
731
|
+
Acts ONLY on *stuck* — the STUCK (issue closed, entries still live) set
|
|
732
|
+
the listing above already computed — never on an issue whose entries
|
|
733
|
+
are legitimately still red (still open). `--issue` narrows to one
|
|
734
|
+
issue but does not widen scope: naming an open issue's number here
|
|
735
|
+
finds nothing to clear, same as naming one that isn't in *stuck* at
|
|
736
|
+
all.
|
|
737
|
+
|
|
738
|
+
Exits non-zero when at least one entry hard-fails to clear (#2266
|
|
739
|
+
review, non-blocking finding: without this, a caller scripting this
|
|
740
|
+
command in CI/cron could only detect a fully-failed run by reading
|
|
741
|
+
stdout or separately querying the audit log).
|
|
742
|
+
"""
|
|
743
|
+
from coord.acceptance import ( # noqa: PLC0415
|
|
744
|
+
classify_expected_red_clear_result,
|
|
745
|
+
clear_expected_red_via_pr,
|
|
746
|
+
)
|
|
747
|
+
from coord.audit import record_audit # noqa: PLC0415
|
|
748
|
+
|
|
749
|
+
if only_issue is not None:
|
|
750
|
+
stuck = [s for s in stuck if s[1] == only_issue]
|
|
751
|
+
if not stuck:
|
|
752
|
+
click.echo(
|
|
753
|
+
f"\n--issue {only_issue}: not STUCK (open, or no "
|
|
754
|
+
"expected_red entries recorded for it) — nothing to clear."
|
|
755
|
+
)
|
|
756
|
+
return
|
|
757
|
+
|
|
758
|
+
if not stuck:
|
|
759
|
+
click.echo("\nno STUCK entries to clear.")
|
|
760
|
+
return
|
|
761
|
+
|
|
762
|
+
click.echo(f"\nclearing {len(stuck)} STUCK issue(s)...")
|
|
763
|
+
# #2266 review (blocking finding 2): classify through the same shared
|
|
764
|
+
# helper `coord.merge_queue._maybe_clear_expected_red` uses, instead of
|
|
765
|
+
# each surface independently re-deriving "did this succeed?" from the
|
|
766
|
+
# message text — a split-brain waiting to happen if the message
|
|
767
|
+
# wording ever changes (epic #2096's "one question, one answer").
|
|
768
|
+
any_failed = False
|
|
769
|
+
for ms, issue_number, ids in stuck:
|
|
770
|
+
msg = clear_expected_red_via_pr(
|
|
771
|
+
repo_entry.github, repo, repo_entry.default_branch, issue_number,
|
|
772
|
+
gh_ops=github_ops,
|
|
773
|
+
)
|
|
774
|
+
click.echo(f" #{issue_number}: {msg}")
|
|
775
|
+
status = classify_expected_red_clear_result(msg)
|
|
776
|
+
if status == "no_op":
|
|
777
|
+
# These entries were just listed as STUCK, so this should be
|
|
778
|
+
# rare (e.g. a race — another process already cleared them) —
|
|
779
|
+
# but it's still not a failure worth a durable audit row.
|
|
780
|
+
continue
|
|
781
|
+
if status == "failed":
|
|
782
|
+
any_failed = True
|
|
783
|
+
event_type = {
|
|
784
|
+
"cleared": "expected_red_clear",
|
|
785
|
+
"pending_retry": "expected_red_clear_pending",
|
|
786
|
+
"failed": "expected_red_clear_failed",
|
|
787
|
+
}[status]
|
|
788
|
+
# #2266 scope 2: a failed clear must land somewhere durable — the
|
|
789
|
+
# audit log — so the next pass over this repo can say "this
|
|
790
|
+
# registry is still stuck" without anyone re-reading this output.
|
|
791
|
+
record_audit(
|
|
792
|
+
tier="business",
|
|
793
|
+
category="acceptance",
|
|
794
|
+
event_type=event_type,
|
|
795
|
+
actor="user",
|
|
796
|
+
summary=f"coord acceptance expected-red --clear {repo} #{issue_number}: {msg}",
|
|
797
|
+
repo=repo,
|
|
798
|
+
issue=issue_number,
|
|
799
|
+
details={"ms": ms, "test_ids": sorted(ids), "result": msg},
|
|
800
|
+
)
|
|
801
|
+
|
|
802
|
+
if any_failed:
|
|
803
|
+
sys.exit(1)
|
|
804
|
+
|
|
680
805
|
|
|
681
806
|
def _acceptance_record_local(
|
|
682
807
|
repo: str,
|
|
@@ -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
|
|
|
@@ -4387,26 +4387,36 @@ def _test_author_effective_issue_number(entry: QueuedMerge, board) -> int | None
|
|
|
4387
4387
|
return None
|
|
4388
4388
|
|
|
4389
4389
|
|
|
4390
|
-
def
|
|
4391
|
-
"""#2199 review (blocking finding 2)
|
|
4392
|
-
|
|
4393
|
-
``ms-*/manifest.yml`` on ``entry.target_branch
|
|
4394
|
-
|
|
4395
|
-
|
|
4396
|
-
|
|
4397
|
-
|
|
4398
|
-
|
|
4399
|
-
|
|
4400
|
-
|
|
4401
|
-
|
|
4402
|
-
|
|
4403
|
-
|
|
4390
|
+
def _expected_red_ids_for_entry(entry: QueuedMerge, gh_ops: GhOps) -> frozenset[str]:
|
|
4391
|
+
"""#2199 review (blocking finding 2) / #2266 review (non-blocking
|
|
4392
|
+
finding): the ``expected_red`` test ids, if any, recorded against
|
|
4393
|
+
*entry*'s issue in some ``ms-*/manifest.yml`` on ``entry.target_branch``.
|
|
4394
|
+
|
|
4395
|
+
Two call sites need this:
|
|
4396
|
+
|
|
4397
|
+
* :func:`_issue_has_expected_red_entries` — the scope check that keeps
|
|
4398
|
+
:func:`_maybe_clear_expected_red`'s loud "no passing trust-gate
|
|
4399
|
+
verdict" diagnostic from firing on every ordinary
|
|
4400
|
+
``CLOSES_ISSUE_TYPES`` merge fleet-wide (no driver configured, no
|
|
4401
|
+
oracle-opted-in milestone, an ``oracle:exempt`` issue — none of which
|
|
4402
|
+
ever populate ``expected_red`` for their issue, #2191). Those merges
|
|
4403
|
+
have nothing here for ``coord acceptance record`` to ever have
|
|
4404
|
+
cleared and never will; before this check, the diagnostic branch
|
|
4405
|
+
below could not tell them apart from an issue that genuinely IS in
|
|
4406
|
+
scope and genuinely IS stuck red, so it printed the same
|
|
4407
|
+
actionable-looking (and, for a driverless repo, un-followable)
|
|
4408
|
+
advice on every single one.
|
|
4409
|
+
* :func:`_maybe_clear_expected_red`'s clear branch, to put the actual
|
|
4410
|
+
test ids (not just a pr/branch pair) into the durable audit row —
|
|
4411
|
+
matching ``coord acceptance expected-red --clear``'s
|
|
4412
|
+
``details["test_ids"]`` so a merge-queue-triggered clear is just as
|
|
4413
|
+
correlatable back to specific stuck tests as a CLI-triggered one.
|
|
4404
4414
|
|
|
4405
4415
|
Reuses the exact API-only lookup ``coord.acceptance.
|
|
4406
4416
|
clear_expected_red_via_pr`` already performs on the success path —
|
|
4407
4417
|
best-effort/read-only like the rest of this sweep: any lookup failure
|
|
4408
4418
|
(unreachable API, older ``gh_ops`` stub missing the list/get methods)
|
|
4409
|
-
reads as "
|
|
4419
|
+
reads as "nothing recorded", matching :func:`coord.acceptance.
|
|
4410
4420
|
find_ms_manifest_for_issue_via_api`'s own fail-soft posture.
|
|
4411
4421
|
"""
|
|
4412
4422
|
from coord.acceptance import find_ms_manifest_for_issue_via_api # noqa: PLC0415
|
|
@@ -4416,11 +4426,59 @@ def _issue_has_expected_red_entries(entry: QueuedMerge, gh_ops: GhOps) -> bool:
|
|
|
4416
4426
|
entry.repo_github, entry.target_branch, entry.issue_number, gh_ops=gh_ops,
|
|
4417
4427
|
)
|
|
4418
4428
|
except Exception: # noqa: BLE001 — best-effort, same posture as callers
|
|
4419
|
-
return
|
|
4429
|
+
return frozenset()
|
|
4420
4430
|
if found is None:
|
|
4421
|
-
return
|
|
4431
|
+
return frozenset()
|
|
4422
4432
|
_path, _text, _blob_sha, data = found
|
|
4423
|
-
return
|
|
4433
|
+
return frozenset(data.expected_red.get(entry.issue_number, frozenset()))
|
|
4434
|
+
|
|
4435
|
+
|
|
4436
|
+
def _issue_has_expected_red_entries(entry: QueuedMerge, gh_ops: GhOps) -> bool:
|
|
4437
|
+
"""Whether *entry*'s issue has at least one ``expected_red`` entry
|
|
4438
|
+
recorded against it. See :func:`_expected_red_ids_for_entry` for why
|
|
4439
|
+
this scope check exists."""
|
|
4440
|
+
return bool(_expected_red_ids_for_entry(entry, gh_ops))
|
|
4441
|
+
|
|
4442
|
+
|
|
4443
|
+
def _record_expected_red_audit(
|
|
4444
|
+
entry: QueuedMerge,
|
|
4445
|
+
event_type: str,
|
|
4446
|
+
message: str,
|
|
4447
|
+
*,
|
|
4448
|
+
test_ids: frozenset[str] | None = None,
|
|
4449
|
+
) -> None:
|
|
4450
|
+
"""#2266: durable half of an `expected_red` clear/skip/failure — a
|
|
4451
|
+
`MergeEvent` alone only reaches the operator as a `coord merge` output
|
|
4452
|
+
line that scrolls past (issue #2266's framing: "nothing durable,
|
|
4453
|
+
nothing re-checked"). ``record_audit`` gives the same outcomes
|
|
4454
|
+
(cleared, skipped for one of two distinct reasons, pending retry, or
|
|
4455
|
+
attempted-and-failed) a queryable row (`coord audit` / `query_audit_log`)
|
|
4456
|
+
so a repo with a stuck registry is discoverable without re-reading
|
|
4457
|
+
merge output. Best-effort like every other audit call site in this
|
|
4458
|
+
module — ``record_audit`` itself never raises.
|
|
4459
|
+
|
|
4460
|
+
*test_ids*, when given, lands in ``details["test_ids"]`` — matching the
|
|
4461
|
+
CLI path's (`coord.commands.acceptance._clear_stuck_expected_red`)
|
|
4462
|
+
audit payload, per #2266 review non-blocking finding: without it,
|
|
4463
|
+
merge-queue-triggered audit rows were harder to correlate back to the
|
|
4464
|
+
specific stuck test ids than CLI-triggered ones.
|
|
4465
|
+
"""
|
|
4466
|
+
details: dict[str, object] = {
|
|
4467
|
+
"pr_number": entry.pr_number, "target_branch": entry.target_branch,
|
|
4468
|
+
}
|
|
4469
|
+
if test_ids:
|
|
4470
|
+
details["test_ids"] = sorted(test_ids)
|
|
4471
|
+
record_audit(
|
|
4472
|
+
tier="business",
|
|
4473
|
+
category="acceptance",
|
|
4474
|
+
event_type=event_type,
|
|
4475
|
+
actor="system",
|
|
4476
|
+
summary=f"{entry.repo_name}#{entry.issue_number}: {message}",
|
|
4477
|
+
repo=entry.repo_name,
|
|
4478
|
+
issue=entry.issue_number,
|
|
4479
|
+
assignment_id=entry.assignment_id,
|
|
4480
|
+
details=details,
|
|
4481
|
+
)
|
|
4424
4482
|
|
|
4425
4483
|
|
|
4426
4484
|
def _maybe_clear_expected_red(entry: QueuedMerge, board, gh_ops: GhOps) -> MergeEvent | None:
|
|
@@ -4462,21 +4520,29 @@ def _maybe_clear_expected_red(entry: QueuedMerge, board, gh_ops: GhOps) -> Merge
|
|
|
4462
4520
|
)
|
|
4463
4521
|
acceptance_state = getattr(work, "acceptance_state", None)
|
|
4464
4522
|
if acceptance_state != "passed":
|
|
4465
|
-
|
|
4523
|
+
ids = _expected_red_ids_for_entry(entry, gh_ops)
|
|
4524
|
+
if not ids:
|
|
4466
4525
|
# Not in scope for the oracle loop at all — the pre-#2199
|
|
4467
4526
|
# silent no-op is still correct here, not a regression (see
|
|
4468
4527
|
# the docstring above and #2199 review finding 2).
|
|
4469
4528
|
return None
|
|
4470
|
-
|
|
4471
|
-
entry, "expected_red_clear_skipped_no_acceptance",
|
|
4529
|
+
msg = (
|
|
4472
4530
|
f"no passing trust-gate verdict recorded on {work.assignment_id} "
|
|
4473
4531
|
f"(acceptance_state={acceptance_state!r}) — the external `coord "
|
|
4474
4532
|
"acceptance record` re-run either never happened or did not "
|
|
4475
4533
|
"pass; skipping expected_red clear. Run `coord acceptance "
|
|
4476
4534
|
f"record --repo {entry.repo_name} --issue {entry.issue_number} "
|
|
4477
4535
|
"--sha <merged sha>` by hand, or re-drive the issue, to clear "
|
|
4478
|
-
"any listed entries."
|
|
4536
|
+
"any listed entries."
|
|
4537
|
+
)
|
|
4538
|
+
# #2266: distinct from the SHA-mismatch guard below — "acceptance
|
|
4539
|
+
# never recorded" and "recorded SHA is stale" are different
|
|
4540
|
+
# problems with different fixes, so they get distinct event types
|
|
4541
|
+
# rather than reaching the operator as the same silence.
|
|
4542
|
+
_record_expected_red_audit(
|
|
4543
|
+
entry, "expected_red_clear_skipped_no_acceptance", msg, test_ids=ids,
|
|
4479
4544
|
)
|
|
4545
|
+
return MergeEvent(entry, "expected_red_clear_skipped_no_acceptance", msg)
|
|
4480
4546
|
acceptance_sha = getattr(work, "acceptance_sha", None)
|
|
4481
4547
|
if acceptance_sha is None or acceptance_sha != entry.branch_head_sha:
|
|
4482
4548
|
# The recorded trust-gate verdict isn't for the exact commit that
|
|
@@ -4486,20 +4552,56 @@ def _maybe_clear_expected_red(entry: QueuedMerge, board, gh_ops: GhOps) -> Merge
|
|
|
4486
4552
|
# fresh SHA and this issue's fix merges again... though ordinarily
|
|
4487
4553
|
# a merge only happens once per issue, so a mismatch here more
|
|
4488
4554
|
# likely means acceptance was simply never recorded for this SHA.
|
|
4489
|
-
|
|
4490
|
-
entry, "expected_red_clear_skipped",
|
|
4555
|
+
msg = (
|
|
4491
4556
|
"acceptance_sha does not match the merged commit — skipping "
|
|
4492
4557
|
"expected_red clear (re-run `coord acceptance record` against "
|
|
4493
|
-
"the merged SHA if entries should have cleared)"
|
|
4558
|
+
"the merged SHA if entries should have cleared)"
|
|
4494
4559
|
)
|
|
4560
|
+
_record_expected_red_audit(
|
|
4561
|
+
entry, "expected_red_clear_skipped_sha_mismatch", msg,
|
|
4562
|
+
test_ids=_expected_red_ids_for_entry(entry, gh_ops),
|
|
4563
|
+
)
|
|
4564
|
+
return MergeEvent(entry, "expected_red_clear_skipped", msg)
|
|
4495
4565
|
|
|
4496
|
-
from coord.acceptance import
|
|
4566
|
+
from coord.acceptance import ( # noqa: PLC0415
|
|
4567
|
+
classify_expected_red_clear_result,
|
|
4568
|
+
clear_expected_red_via_pr,
|
|
4569
|
+
)
|
|
4497
4570
|
|
|
4571
|
+
# Captured *before* the clear attempt: a successful clear edits the
|
|
4572
|
+
# manifest, so looking this up afterwards would just find the ids the
|
|
4573
|
+
# clear itself just removed (#2266 review non-blocking finding).
|
|
4574
|
+
ids = _expected_red_ids_for_entry(entry, gh_ops)
|
|
4498
4575
|
msg = clear_expected_red_via_pr(
|
|
4499
4576
|
entry.repo_github, entry.repo_name, entry.target_branch, entry.issue_number,
|
|
4500
4577
|
gh_ops=gh_ops,
|
|
4501
4578
|
)
|
|
4502
|
-
|
|
4579
|
+
# #2266 review (blocking finding 1): a binary "did the message start
|
|
4580
|
+
# with 'cleared expected_red'" conflated a genuine failure with "there
|
|
4581
|
+
# was nothing to clear in the first place" — the *common* case for an
|
|
4582
|
+
# ordinary oracle-loop merge whose issue was never part of a
|
|
4583
|
+
# deliberately-red slice. `classify_expected_red_clear_result` (shared
|
|
4584
|
+
# with the CLI `--clear` path, review blocking finding 2) tells those
|
|
4585
|
+
# apart; the "no_op" case is reported back via `MergeEvent` for `coord
|
|
4586
|
+
# merge` output but never gets a durable audit row — recording one for
|
|
4587
|
+
# every ordinary passing merge would drown the genuinely actionable
|
|
4588
|
+
# `expected_red_clear_failed` rows this audit trail exists to surface.
|
|
4589
|
+
status = classify_expected_red_clear_result(msg)
|
|
4590
|
+
if status == "no_op":
|
|
4591
|
+
return MergeEvent(entry, "expected_red_clear_noop", msg)
|
|
4592
|
+
event_type = {
|
|
4593
|
+
"cleared": "expected_red_clear",
|
|
4594
|
+
"pending_retry": "expected_red_clear_pending",
|
|
4595
|
+
"failed": "expected_red_clear_failed",
|
|
4596
|
+
}[status]
|
|
4597
|
+
# #2266 review (non-blocking finding): `clear_expected_red_via_pr`
|
|
4598
|
+
# never raises — every genuine failure degrades to a "warning: ..."
|
|
4599
|
+
# string. Make that durable too, not just a merge-output line: a
|
|
4600
|
+
# repeated `expected_red_clear_failed` for the same issue is exactly
|
|
4601
|
+
# the signal `coord acceptance expected-red --clear` (the re-fire
|
|
4602
|
+
# path) exists for.
|
|
4603
|
+
_record_expected_red_audit(entry, event_type, msg, test_ids=ids)
|
|
4604
|
+
return MergeEvent(entry, event_type, msg)
|
|
4503
4605
|
|
|
4504
4606
|
|
|
4505
4607
|
def process(
|
|
@@ -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
|