code-coordinator 0.5.94__tar.gz → 0.5.95__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.95}/PKG-INFO +1 -1
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/acceptance.py +44 -1
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/commands/acceptance.py +127 -2
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/merge_queue.py +129 -27
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_acceptance.py +54 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_cli_acceptance.py +199 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_merge_queue.py +106 -4
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/.github/workflows/release-tui.yml +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/.gitignore +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/CLAUDE.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/GOAL.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/LICENSE +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/MANIFEST.in +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/README.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/__init__.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/agent.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/audit.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/block_log.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/board_bool_guard.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/board_service.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/brain.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/claim.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/cli.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/client.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/comments.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/config.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dao.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/.gitignore +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/components.json +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/dist/assets/Gallery-Cq84itDE.js +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/dist/assets/Terminal-DOXLcMue.js +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/dist/assets/index-DHn-RIJ8.js +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/dist/index.html +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/dist/sw.js +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/eslint.config.js +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/index.html +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/package-lock.json +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/package.json +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/playwright.config.ts +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/postcss.config.js +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/App.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/api/client.ts +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/api/generated.ts +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/index.css +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/main.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/test-setup.ts +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/tailwind.config.js +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/tsconfig.json +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/tsconfig.node.json +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dashboard/webapp/vite.config.ts +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/db.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/deps.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/drive.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/events.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/filelock.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/freshness.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/gates.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/goal.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/health/context.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/health/models.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/health/render.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/health/units.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/hooks.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/interactive.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/models.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/network.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/notify.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/openapi.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/parentage.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/plans.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/progress.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/release_window.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/reports.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/review.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/smoke.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/split_work.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/state.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/test_author.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/test_report.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/usage.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/install-agent.sh +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/pyproject.toml +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/setup.cfg +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/__init__.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/acceptance/ms-33/audit_1039.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/acceptance/ms-33/contract.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/acceptance/ms-33/manifest.yml +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/acceptance/ms-38/contract.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/acceptance/ms-38/manifest.yml +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/conftest.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_config.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_db.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_events.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_init.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_models.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_network.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_no_direct_gh_calls.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_review.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_session.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_split.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_state.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tui/Cargo.lock +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tui/Cargo.toml +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tui/cargo-config-local-quadraui.toml.example +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tui/src/app/audit.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tui/src/app/chat.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tui/src/app/data.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tui/src/app/dialogs.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tui/src/app/drive.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tui/src/app/drive_queue.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tui/src/app/escalation.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tui/src/app/events.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tui/src/app/fixtures.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tui/src/app/fleet_health.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tui/src/app/fleet_sessions.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tui/src/app/fleet_terminals.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tui/src/app/format.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tui/src/app/milestone_dag.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tui/src/app/mod.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tui/src/app/msv.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tui/src/app/pipeline.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tui/src/app/plans.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tui/src/app/render.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tui/src/app/reports.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tui/src/app/sessions.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tui/src/app/settings_ui.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tui/src/app/sidebar.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tui/src/app/terminal.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tui/src/app/tests.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tui/src/app/types.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tui/src/app/workspace.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tui/src/bin/gtk.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tui/src/commands.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tui/src/lib.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tui/src/main.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tui/src/settings.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tui/tests/acceptance.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/tui/tests/cli.rs +0 -0
- {code_coordinator-0.5.94 → code_coordinator-0.5.95}/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,
|
|
@@ -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(
|
|
@@ -16,6 +16,7 @@ from coord.acceptance import (
|
|
|
16
16
|
apply_expected_red,
|
|
17
17
|
build_verdict,
|
|
18
18
|
bug_contract_path,
|
|
19
|
+
classify_expected_red_clear_result,
|
|
19
20
|
clear_expected_red_entries,
|
|
20
21
|
clear_expected_red_via_pr,
|
|
21
22
|
dump_manifest_error_hint,
|
|
@@ -654,6 +655,59 @@ class TestClearExpectedRedViaPr:
|
|
|
654
655
|
assert "no expected_red entries found" in msg
|
|
655
656
|
|
|
656
657
|
|
|
658
|
+
class TestClassifyExpectedRedClearResult:
|
|
659
|
+
"""#2266 review (blocking findings 1 & 2): the single shared
|
|
660
|
+
classifier both `coord.merge_queue._maybe_clear_expected_red` and
|
|
661
|
+
`coord.commands.acceptance._clear_stuck_expected_red` call, instead of
|
|
662
|
+
each independently re-deriving "did this succeed?" via its own
|
|
663
|
+
`msg.startswith("cleared expected_red")` check. Exercised here against
|
|
664
|
+
every message shape `clear_expected_red_via_pr` actually returns (see
|
|
665
|
+
`TestClearExpectedRedViaPr` above), so the two can never silently
|
|
666
|
+
desync on a message-wording change."""
|
|
667
|
+
|
|
668
|
+
def test_cleared(self) -> None:
|
|
669
|
+
assert classify_expected_red_clear_result(
|
|
670
|
+
"cleared expected_red for #944: ms01::a (PR #501)"
|
|
671
|
+
) == "cleared"
|
|
672
|
+
|
|
673
|
+
def test_no_manifest_found_is_a_no_op_not_a_failure(self) -> None:
|
|
674
|
+
assert classify_expected_red_clear_result(
|
|
675
|
+
"no expected_red entries found for this issue"
|
|
676
|
+
) == "no_op"
|
|
677
|
+
|
|
678
|
+
def test_no_entries_for_issue_is_a_no_op_not_a_failure(self) -> None:
|
|
679
|
+
"""#2266 review blocking finding 1: this is the *common* case for
|
|
680
|
+
an ordinary oracle-loop merge whose issue was never part of a
|
|
681
|
+
deliberately-red slice — it must never classify as a failure."""
|
|
682
|
+
assert classify_expected_red_clear_result(
|
|
683
|
+
"no expected_red entries for this issue"
|
|
684
|
+
) == "no_op"
|
|
685
|
+
|
|
686
|
+
def test_pr_that_did_not_merge_is_pending_retry_not_a_hard_failure(self) -> None:
|
|
687
|
+
assert classify_expected_red_clear_result(
|
|
688
|
+
"expected_red clear PR #501 opened but did not merge (branch "
|
|
689
|
+
"protection / required checks pending?) — will retry on the "
|
|
690
|
+
"next merge (required check pending)"
|
|
691
|
+
) == "pending_retry"
|
|
692
|
+
|
|
693
|
+
def test_json_manifest_warning_is_a_failure(self) -> None:
|
|
694
|
+
assert classify_expected_red_clear_result(
|
|
695
|
+
"warning: tests/acceptance/ms01/manifest.json is a JSON "
|
|
696
|
+
"manifest — automatic expected_red clearing only supports "
|
|
697
|
+
"YAML manifests today; clear ms01::a by hand"
|
|
698
|
+
) == "failed"
|
|
699
|
+
|
|
700
|
+
def test_generic_warning_is_a_failure(self) -> None:
|
|
701
|
+
assert classify_expected_red_clear_result(
|
|
702
|
+
"warning: could not open expected_red clear PR: boom"
|
|
703
|
+
) == "failed"
|
|
704
|
+
|
|
705
|
+
def test_unchanged_text_is_a_failure(self) -> None:
|
|
706
|
+
assert classify_expected_red_clear_result(
|
|
707
|
+
"expected_red text unchanged (nothing matched)"
|
|
708
|
+
) == "failed"
|
|
709
|
+
|
|
710
|
+
|
|
657
711
|
class TestOracleLoopContractBlock:
|
|
658
712
|
def test_empty_when_issue_not_authored(self, tmp_path: Path) -> None:
|
|
659
713
|
root = tmp_path / "tests" / "acceptance"
|