code-coordinator 0.5.93__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.93 → code_coordinator-0.5.95}/PKG-INFO +1 -1
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/code_coordinator.egg-info/SOURCES.txt +1 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/code_coordinator.egg-info/scm_file_list.json +1 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/acceptance.py +44 -1
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/commands/_common.py +72 -3
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/commands/acceptance.py +127 -2
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/config.py +21 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/merge_queue.py +129 -27
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_acceptance.py +54 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_acceptance.py +199 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_config.py +48 -0
- code_coordinator-0.5.95/tests/test_config_snapshot_noncanonical_2208.py +299 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_dist_name.py +8 -1
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_merge_queue.py +106 -4
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_providers.py +39 -3
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_version_single_source.py +15 -4
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/.github/workflows/release-tui.yml +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/.gitignore +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/CLAUDE.md +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/GOAL.md +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/LICENSE +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/MANIFEST.in +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/README.md +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/__init__.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/agent.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/audit.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/block_log.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/board_bool_guard.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/board_service.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/brain.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/claim.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/cli.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/client.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/comments.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dao.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/.gitignore +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/components.json +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/dist/assets/Gallery-Cq84itDE.js +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/dist/assets/Terminal-DOXLcMue.js +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/dist/assets/index-DHn-RIJ8.js +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/dist/index.html +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/dist/sw.js +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/eslint.config.js +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/index.html +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/package-lock.json +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/package.json +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/playwright.config.ts +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/postcss.config.js +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/App.tsx +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/api/client.ts +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/api/generated.ts +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/index.css +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/main.tsx +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/test-setup.ts +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/tailwind.config.js +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/tsconfig.json +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/tsconfig.node.json +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dashboard/webapp/vite.config.ts +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/db.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/deps.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/drive.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/events.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/filelock.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/freshness.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/gates.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/goal.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/health/context.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/health/models.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/health/render.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/health/units.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/hooks.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/interactive.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/models.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/network.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/notify.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/openapi.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/parentage.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/plans.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/progress.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/release_window.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/reports.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/review.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/smoke.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/split_work.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/state.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/test_author.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/test_report.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/usage.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/install-agent.sh +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/pyproject.toml +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/setup.cfg +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/__init__.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/acceptance/ms-33/audit_1039.rs +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/acceptance/ms-33/contract.md +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/acceptance/ms-33/manifest.yml +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/acceptance/ms-38/contract.md +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/acceptance/ms-38/manifest.yml +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/conftest.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_db.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_events.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_init.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_models.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_network.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_no_direct_gh_calls.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_review.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_session.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_split.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_state.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/Cargo.lock +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/Cargo.toml +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/cargo-config-local-quadraui.toml.example +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/src/app/audit.rs +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/src/app/chat.rs +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/src/app/data.rs +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/src/app/dialogs.rs +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/src/app/drive.rs +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/src/app/drive_queue.rs +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/src/app/escalation.rs +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/src/app/events.rs +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/src/app/fixtures.rs +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/src/app/fleet_health.rs +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/src/app/fleet_sessions.rs +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/src/app/fleet_terminals.rs +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/src/app/format.rs +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/src/app/milestone_dag.rs +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/src/app/mod.rs +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/src/app/msv.rs +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/src/app/pipeline.rs +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/src/app/plans.rs +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/src/app/render.rs +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/src/app/reports.rs +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/src/app/sessions.rs +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/src/app/settings_ui.rs +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/src/app/sidebar.rs +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/src/app/terminal.rs +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/src/app/tests.rs +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/src/app/types.rs +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/src/app/workspace.rs +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/src/bin/gtk.rs +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/src/commands.rs +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/src/lib.rs +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/src/main.rs +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/src/settings.rs +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/tests/acceptance.rs +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/tests/cli.rs +0 -0
- {code_coordinator-0.5.93 → code_coordinator-0.5.95}/tui/tests/fixtures/board_sample.json +0 -0
|
@@ -529,6 +529,7 @@ tests/test_config.py
|
|
|
529
529
|
tests/test_config_acceptance.py
|
|
530
530
|
tests/test_config_audit.py
|
|
531
531
|
tests/test_config_pricing.py
|
|
532
|
+
tests/test_config_snapshot_noncanonical_2208.py
|
|
532
533
|
tests/test_config_usage_gate.py
|
|
533
534
|
tests/test_conflict_fix.py
|
|
534
535
|
tests/test_conflict_fix_semantic.py
|
{code_coordinator-0.5.93 → code_coordinator-0.5.95}/code_coordinator.egg-info/scm_file_list.json
RENAMED
|
@@ -559,6 +559,7 @@
|
|
|
559
559
|
"tests/test_config_acceptance.py",
|
|
560
560
|
"tests/test_config_audit.py",
|
|
561
561
|
"tests/test_config_pricing.py",
|
|
562
|
+
"tests/test_config_snapshot_noncanonical_2208.py",
|
|
562
563
|
"tests/test_config_usage_gate.py",
|
|
563
564
|
"tests/test_conflict_fix.py",
|
|
564
565
|
"tests/test_conflict_fix_semantic.py",
|
|
@@ -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"
|
|
@@ -27,7 +27,13 @@ from typing import TYPE_CHECKING
|
|
|
27
27
|
|
|
28
28
|
import click
|
|
29
29
|
|
|
30
|
-
from coord.config import
|
|
30
|
+
from coord.config import (
|
|
31
|
+
Config,
|
|
32
|
+
ConfigError,
|
|
33
|
+
is_canonical_config_path,
|
|
34
|
+
load,
|
|
35
|
+
resolve_config_path,
|
|
36
|
+
)
|
|
31
37
|
|
|
32
38
|
if TYPE_CHECKING: # pragma: no cover — typing only
|
|
33
39
|
from collections.abc import Iterator
|
|
@@ -100,7 +106,55 @@ _CONFIG_OPTION = click.option(
|
|
|
100
106
|
)
|
|
101
107
|
|
|
102
108
|
|
|
103
|
-
def
|
|
109
|
+
def _note_withheld_snapshot(config: Config, config_path: Path) -> None:
|
|
110
|
+
"""Tell the operator that the #2208 guard just withheld a snapshot — but
|
|
111
|
+
only when withholding it actually changed the outcome.
|
|
112
|
+
|
|
113
|
+
Silence is what turned the original incident into an hour of
|
|
114
|
+
misdiagnosis: the fleet's ``machines`` table said ``ci-runner`` and
|
|
115
|
+
nothing anywhere said why. So when a non-canonical ``--config`` would
|
|
116
|
+
have *replaced a populated table with a different fleet* — the exact
|
|
117
|
+
shape of that incident — say so on stderr.
|
|
118
|
+
|
|
119
|
+
Everything else stays quiet, and that restraint is load-bearing rather
|
|
120
|
+
than cosmetic. ``--config <tmpfile>`` is the normal way to run coord
|
|
121
|
+
against a scratch config: CI stubs, the config *validator* in
|
|
122
|
+
``scripts/azure-workers/coordinator-machine.py``, and every one of this
|
|
123
|
+
repo's ~110 CLI test modules. Emitting a note on each of those would
|
|
124
|
+
have made the guard a per-invocation nag, and — because Click's
|
|
125
|
+
``CliRunner`` folds stderr into ``result.output`` — would have corrupted
|
|
126
|
+
the machine-readable stdout of commands like ``coord plans --json`` and
|
|
127
|
+
``coord scorecard --json`` for anyone parsing combined output.
|
|
128
|
+
|
|
129
|
+
A skip with nothing to clobber (empty table, or a table that already
|
|
130
|
+
matches) withheld nothing observable, so it warrants no words.
|
|
131
|
+
"""
|
|
132
|
+
try:
|
|
133
|
+
from coord.db import get_connection
|
|
134
|
+
conn = get_connection()
|
|
135
|
+
existing = [
|
|
136
|
+
str(row[0])
|
|
137
|
+
for row in conn.execute("SELECT name FROM machines ORDER BY name")
|
|
138
|
+
]
|
|
139
|
+
except Exception: # noqa: BLE001 — advisory only; never break the command
|
|
140
|
+
return
|
|
141
|
+
if not existing:
|
|
142
|
+
# Nothing to protect: no snapshot has ever landed here (a fresh
|
|
143
|
+
# host, or a CI runner whose DB only exists for this one command).
|
|
144
|
+
return
|
|
145
|
+
if existing == sorted(m.name for m in config.machines):
|
|
146
|
+
# The override names the same fleet — the write would have been a
|
|
147
|
+
# no-op, so the skip cost the operator nothing.
|
|
148
|
+
return
|
|
149
|
+
click.echo(
|
|
150
|
+
f"note: --config points at a non-canonical path ({config_path}); "
|
|
151
|
+
f"leaving the shared machines/pipeline snapshot untouched (#2208). "
|
|
152
|
+
f"Fleet machines on record: {', '.join(existing)}.",
|
|
153
|
+
err=True,
|
|
154
|
+
)
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
def _save_config_snapshot(config: Config, config_path: Path | None = None) -> None:
|
|
104
158
|
"""Persist machine + pipeline metadata to the DB so dashboards can read it.
|
|
105
159
|
|
|
106
160
|
Writes:
|
|
@@ -111,6 +165,13 @@ def _save_config_snapshot(config: Config) -> None:
|
|
|
111
165
|
|
|
112
166
|
The pipeline keys let the TUI Pipeline panel pick up coordinator.yml
|
|
113
167
|
settings without having to parse YAML itself.
|
|
168
|
+
|
|
169
|
+
*config_path* is the file *config* was actually loaded from. When given
|
|
170
|
+
and it is not the canonical resolution (see
|
|
171
|
+
``coord.config.is_canonical_config_path``), the write is skipped
|
|
172
|
+
entirely — see the #2208 guard below. Callers that omit it (mainly
|
|
173
|
+
direct unit tests exercising the write itself) get the pre-#2208
|
|
174
|
+
behavior: always write.
|
|
114
175
|
"""
|
|
115
176
|
# #584: a thin client (board_service configured) must not create/write a
|
|
116
177
|
# local DB — the daemon/host owns the config snapshot. On the host
|
|
@@ -118,6 +179,14 @@ def _save_config_snapshot(config: Config) -> None:
|
|
|
118
179
|
from coord.client import resolve_board_service
|
|
119
180
|
if resolve_board_service() is not None:
|
|
120
181
|
return
|
|
182
|
+
# #2208: an explicit `--config <file>` pointed away from the fleet's real
|
|
183
|
+
# config (a scratch fixture, a CI-only stub) must not be treated as a
|
|
184
|
+
# request to redefine the shared `machines` table — that table is global
|
|
185
|
+
# state every client's `/board` and the TUI read, not something a single
|
|
186
|
+
# throwaway invocation should own.
|
|
187
|
+
if config_path is not None and not is_canonical_config_path(config_path):
|
|
188
|
+
_note_withheld_snapshot(config, config_path)
|
|
189
|
+
return
|
|
121
190
|
conn = None
|
|
122
191
|
try:
|
|
123
192
|
from coord.db import get_connection
|
|
@@ -270,7 +339,7 @@ def _load_config(path: Path | None) -> Config:
|
|
|
270
339
|
except ConfigError as e:
|
|
271
340
|
click.echo(f"error: {e}", err=True)
|
|
272
341
|
sys.exit(2)
|
|
273
|
-
_save_config_snapshot(cfg)
|
|
342
|
+
_save_config_snapshot(cfg, path)
|
|
274
343
|
return cfg
|
|
275
344
|
|
|
276
345
|
|
|
@@ -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,
|
|
@@ -51,6 +51,27 @@ def resolve_config_path() -> Path:
|
|
|
51
51
|
return candidate
|
|
52
52
|
return USER_CONFIG_PATH
|
|
53
53
|
|
|
54
|
+
|
|
55
|
+
def is_canonical_config_path(path: Path) -> bool:
|
|
56
|
+
"""Whether *path* is what :func:`resolve_config_path` resolves to *right now*.
|
|
57
|
+
|
|
58
|
+
#2208: a coord command run with an explicit ``--config <file>`` pointed
|
|
59
|
+
somewhere other than the fleet's real config — a scratch fixture, a
|
|
60
|
+
CI-only stub someone wrote specifically so ``coord.config.load()`` has
|
|
61
|
+
something to parse — is not a request to redefine the fleet. This gates
|
|
62
|
+
the shared machines/pipeline DB snapshot (``_save_config_snapshot`` in
|
|
63
|
+
``coord/commands/_common.py``): only a *path* that matches the ordinary
|
|
64
|
+
resolution order ($COORD_CONFIG → ``~/.coord/coordinator.yml`` →
|
|
65
|
+
``./coordinator.yml``) counts as canonical and is allowed to overwrite
|
|
66
|
+
that shared table. An explicit ``--config`` that happens to name the
|
|
67
|
+
same file the default resolution would have picked still counts as
|
|
68
|
+
canonical — this only catches a genuine *override*.
|
|
69
|
+
"""
|
|
70
|
+
candidate = Path(path).expanduser().resolve()
|
|
71
|
+
canonical = resolve_config_path().expanduser().resolve()
|
|
72
|
+
return candidate == canonical
|
|
73
|
+
|
|
74
|
+
|
|
54
75
|
# Safety-by-default: repos without explicit worker_permissions get this deny-list.
|
|
55
76
|
DEFAULT_DENY_COMMANDS: list[str] = [
|
|
56
77
|
"Bash(gh *)",
|
|
@@ -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(
|