code-coordinator 0.5.87__tar.gz → 0.5.89__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.87 → code_coordinator-0.5.89}/CLAUDE.md +1 -1
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/PKG-INFO +1 -1
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/code_coordinator.egg-info/SOURCES.txt +2 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/code_coordinator.egg-info/scm_file_list.json +2 -0
- code_coordinator-0.5.89/code_coordinator.egg-info/scm_version.json +8 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/ci_github.py +35 -1
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/ci_store.py +30 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/commands/drive_queue.py +357 -1
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/db.py +12 -1
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/drive.py +30 -5
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/drive_queue.py +39 -6
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/drive_state.py +16 -1
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/github_ops.py +26 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/merge_queue.py +184 -2
- code_coordinator-0.5.89/coord/overlap_predict.py +627 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/docs/ARCHITECTURE.md +31 -3
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_ci_store.py +117 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_cli_drive_queue.py +204 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_db.py +81 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_drive.py +69 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_drive_queue.py +59 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_drive_state.py +37 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_github_ops.py +41 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_merge_queue.py +227 -0
- code_coordinator-0.5.89/tests/test_overlap_predict.py +339 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tui/tests/fixtures/board_sample.json +2 -0
- code_coordinator-0.5.87/code_coordinator.egg-info/scm_version.json +0 -8
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/.github/workflows/release-tui.yml +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/.gitignore +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/GOAL.md +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/LICENSE +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/MANIFEST.in +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/README.md +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/__init__.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/agent.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/audit.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/board_bool_guard.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/board_service.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/brain.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/claim.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/cli.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/client.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/comments.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/config.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dao.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/.gitignore +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/components.json +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/dist/assets/Gallery-Cq84itDE.js +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/dist/assets/Terminal-DOXLcMue.js +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/dist/assets/index-DHn-RIJ8.js +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/dist/index.html +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/dist/sw.js +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/eslint.config.js +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/index.html +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/package-lock.json +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/package.json +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/playwright.config.ts +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/postcss.config.js +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/src/App.tsx +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/src/api/client.ts +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/src/api/generated.ts +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/src/index.css +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/src/main.tsx +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/src/test-setup.ts +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/tailwind.config.js +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/tsconfig.json +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/tsconfig.node.json +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dashboard/webapp/vite.config.ts +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/deps.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/events.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/filelock.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/freshness.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/gates.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/goal.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/health/context.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/health/models.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/health/render.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/health/units.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/hooks.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/interactive.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/models.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/network.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/notify.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/openapi.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/parentage.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/plans.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/progress.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/release_window.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/reports.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/review.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/smoke.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/split_work.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/state.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/test_author.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/test_report.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/usage.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/install-agent.sh +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/pyproject.toml +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/setup.cfg +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/__init__.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/acceptance/ms-33/audit_1039.rs +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/acceptance/ms-33/contract.md +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/acceptance/ms-33/manifest.yml +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/acceptance/ms-38/contract.md +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/acceptance/ms-38/manifest.yml +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/conftest.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_config.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_events.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_init.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_models.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_network.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_no_direct_gh_calls.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_review.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_session.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_split.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_state.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tui/Cargo.lock +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tui/Cargo.toml +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tui/cargo-config-local-quadraui.toml.example +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tui/src/app/audit.rs +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tui/src/app/chat.rs +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tui/src/app/data.rs +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tui/src/app/dialogs.rs +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tui/src/app/drive.rs +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tui/src/app/drive_queue.rs +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tui/src/app/escalation.rs +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tui/src/app/events.rs +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tui/src/app/fixtures.rs +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tui/src/app/fleet_health.rs +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tui/src/app/fleet_sessions.rs +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tui/src/app/fleet_terminals.rs +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tui/src/app/format.rs +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tui/src/app/milestone_dag.rs +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tui/src/app/mod.rs +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tui/src/app/msv.rs +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tui/src/app/pipeline.rs +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tui/src/app/plans.rs +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tui/src/app/render.rs +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tui/src/app/reports.rs +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tui/src/app/sessions.rs +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tui/src/app/settings_ui.rs +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tui/src/app/sidebar.rs +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tui/src/app/terminal.rs +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tui/src/app/tests.rs +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tui/src/app/types.rs +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tui/src/app/workspace.rs +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tui/src/bin/gtk.rs +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tui/src/commands.rs +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tui/src/lib.rs +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tui/src/main.rs +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tui/src/settings.rs +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tui/tests/acceptance.rs +0 -0
- {code_coordinator-0.5.87 → code_coordinator-0.5.89}/tui/tests/cli.rs +0 -0
|
@@ -171,7 +171,7 @@ One line each — the reasoning behind them is in
|
|
|
171
171
|
- **`coordinator.yml` is the single source of truth** for repo topology, machine capabilities, dependencies, concurrency limits, review settings, smoke-test rules, and the pipeline gate order (`pipeline.default_gates`). It lives in `~/.coord/`, **not** the repo checkout.
|
|
172
172
|
- **User approves everything.** `coord plan` proposes, the user reviews, `coord approve` dispatches. No autonomous dispatch.
|
|
173
173
|
- **Claim detection prevents duplicate work.** Before dispatching, the coordinator checks the board for active assignments and the remote for `issue-{N}-*` branches.
|
|
174
|
-
- **Conflict rules are inferred, not configured
|
|
174
|
+
- **Conflict rules are inferred, not configured.** There is no `file_groups`/`exclusive_files` config and never will be. The `coord plan` path infers overlap via a line in the planning brain's *prompt* (a prompt instruction, not a mechanism). The drive queue bypasses the brain, so it has its own inference: `coord drive-queue add` compares the issue's own `## Files` declaration against the **real diffs** of in-flight branches in that repo (`coord/overlap_predict.py`, #2247) and, on an overlap, chains the newcomer `--after` the incumbent. **It ORDERS, never refuses** — a false positive costs latency, a refusal costs work — and an issue that declares nothing gets exactly the pre-#2247 behaviour. Accuracy is measured, not assumed: `coord drive-queue overlap-report` scores each prediction against what the branches actually touched.
|
|
175
175
|
- **Adversarial reviews are rule-enforcing, not rubber-stamping.** On worker completion a fresh `claude -p` session on a *different* machine reviews the PR diff against this file and the review checklist, with zero shared context with the worker — that's the whole point.
|
|
176
176
|
- **The pipeline order is `Work → Test → Review → Merge`.** Test precedes Review; the headless auto-loop holds review dispatch until there is a `passed`/`skipped` test verdict.
|
|
177
177
|
- **Merge is gated on CI checks (#240).** `coord merge` refuses when a check failed or is still running — and a PR with *zero* reported checks is not automatically clear either (#1904).
|
|
@@ -95,6 +95,7 @@ coord/new_issue_chat.py
|
|
|
95
95
|
coord/notify.py
|
|
96
96
|
coord/openapi.py
|
|
97
97
|
coord/overlap_fence.py
|
|
98
|
+
coord/overlap_predict.py
|
|
98
99
|
coord/parentage.py
|
|
99
100
|
coord/parentage_github.py
|
|
100
101
|
coord/pipeline.py
|
|
@@ -640,6 +641,7 @@ tests/test_notify_drain.py
|
|
|
640
641
|
tests/test_openapi.py
|
|
641
642
|
tests/test_operational_defaults.py
|
|
642
643
|
tests/test_overlap_fence.py
|
|
644
|
+
tests/test_overlap_predict.py
|
|
643
645
|
tests/test_packaged_deploy_units.py
|
|
644
646
|
tests/test_parentage.py
|
|
645
647
|
tests/test_paste_landed.py
|
{code_coordinator-0.5.87 → code_coordinator-0.5.89}/code_coordinator.egg-info/scm_file_list.json
RENAMED
|
@@ -270,6 +270,7 @@
|
|
|
270
270
|
"coord/notify.py",
|
|
271
271
|
"coord/openapi.py",
|
|
272
272
|
"coord/overlap_fence.py",
|
|
273
|
+
"coord/overlap_predict.py",
|
|
273
274
|
"coord/parentage.py",
|
|
274
275
|
"coord/parentage_github.py",
|
|
275
276
|
"coord/pipeline.py",
|
|
@@ -670,6 +671,7 @@
|
|
|
670
671
|
"tests/test_openapi.py",
|
|
671
672
|
"tests/test_operational_defaults.py",
|
|
672
673
|
"tests/test_overlap_fence.py",
|
|
674
|
+
"tests/test_overlap_predict.py",
|
|
673
675
|
"tests/test_packaged_deploy_units.py",
|
|
674
676
|
"tests/test_parentage.py",
|
|
675
677
|
"tests/test_paste_landed.py",
|
|
@@ -18,7 +18,7 @@ from dataclasses import dataclass, field
|
|
|
18
18
|
from datetime import datetime
|
|
19
19
|
|
|
20
20
|
from coord import github_ops
|
|
21
|
-
from coord.ci_store import CheckRun, JobRun, JobStep
|
|
21
|
+
from coord.ci_store import CheckRun, JobRun, JobStep, failed_checks
|
|
22
22
|
|
|
23
23
|
|
|
24
24
|
def _parse_ts(raw: str | None) -> float | None:
|
|
@@ -236,6 +236,40 @@ class GitHubCi:
|
|
|
236
236
|
self._jobs_cache.pop((repo, str(run_id)), None)
|
|
237
237
|
return all_ok and any_ok
|
|
238
238
|
|
|
239
|
+
def rerun_failed_for_pr(self, repo: str, number: int) -> bool:
|
|
240
|
+
"""Re-run only the FAILING job(s) behind *repo*#*number*'s current
|
|
241
|
+
checks via ``gh run rerun <id> --failed`` (#2252).
|
|
242
|
+
|
|
243
|
+
Same shape as :meth:`rerun_for_pr` above, narrowed to the run ids
|
|
244
|
+
behind :func:`coord.ci_store.failed_checks` rather than every run id
|
|
245
|
+
among the PR's checks — a passing check's run is left untouched, so
|
|
246
|
+
the caller's #2252 flake re-check can't accidentally spend CI
|
|
247
|
+
minutes re-proving a check that already reported green, and the
|
|
248
|
+
green evidence itself (timestamps, logs) survives intact for the
|
|
249
|
+
board to keep showing.
|
|
250
|
+
|
|
251
|
+
Same best-effort / return-value / cache-invalidation contract as
|
|
252
|
+
`rerun_for_pr`: ``True`` only when at least one run id was found
|
|
253
|
+
among the currently-failing checks *and* every ``gh run rerun
|
|
254
|
+
--failed`` call issued exited zero.
|
|
255
|
+
"""
|
|
256
|
+
checks = self.list_checks_for_pr(repo, number)
|
|
257
|
+
run_ids = sorted({c.run_id for c in failed_checks(checks) if c.run_id})
|
|
258
|
+
if not run_ids:
|
|
259
|
+
return False
|
|
260
|
+
all_ok = True
|
|
261
|
+
any_ok = False
|
|
262
|
+
for run_id in run_ids:
|
|
263
|
+
if github_ops.rerun_workflow_run_failed(repo, run_id):
|
|
264
|
+
any_ok = True
|
|
265
|
+
else:
|
|
266
|
+
all_ok = False
|
|
267
|
+
if any_ok:
|
|
268
|
+
self.invalidate(repo, number)
|
|
269
|
+
for run_id in run_ids:
|
|
270
|
+
self._jobs_cache.pop((repo, str(run_id)), None)
|
|
271
|
+
return all_ok and any_ok
|
|
272
|
+
|
|
239
273
|
def list_jobs_for_run(self, repo: str, run_id: str) -> list["JobRun"]:
|
|
240
274
|
"""Job/step detail for Actions run *run_id* on *repo* via ``gh api``
|
|
241
275
|
(#1892) — backs :func:`coord.ci_store.is_verdictless_job`.
|
|
@@ -195,6 +195,31 @@ class CiStore(Protocol):
|
|
|
195
195
|
"""
|
|
196
196
|
...
|
|
197
197
|
|
|
198
|
+
def rerun_failed_for_pr(self, repo: str, number: int) -> bool:
|
|
199
|
+
"""Re-run ONLY the currently-failing job(s) behind *repo*#*number*'s
|
|
200
|
+
checks (#2252). Returns whether it worked.
|
|
201
|
+
|
|
202
|
+
Narrower than :meth:`rerun_for_pr`, which reruns every distinct
|
|
203
|
+
Actions run id behind ALL of a PR's checks — passing ones included.
|
|
204
|
+
Re-running the whole run would also re-trigger jobs that already
|
|
205
|
+
reported green, discarding that first-pass evidence for nothing:
|
|
206
|
+
#2252 asks "is the RED one flaky?", not "run the suite again", and
|
|
207
|
+
wants the answer without paying for (or risking a second read of)
|
|
208
|
+
checks that already settled.
|
|
209
|
+
|
|
210
|
+
This is the mechanism behind :mod:`coord.merge_queue`'s one-shot
|
|
211
|
+
flake re-check (``MAX_CI_FLAKY_RERUNS`` — deliberately ONE re-run,
|
|
212
|
+
not a retry loop: two independent observations is the whole ask).
|
|
213
|
+
Call sites duck-type via ``getattr(ci, "rerun_failed_for_pr",
|
|
214
|
+
None)`` so a `CiStore` stand-in that predates this capability (most
|
|
215
|
+
duck-typed test stubs, :class:`coord.gate_snapshot.GateSnapshot`)
|
|
216
|
+
simply doesn't offer it — read as "could not trigger a re-run",
|
|
217
|
+
the same fail-safe fallback an actual `gh` failure produces (#2252:
|
|
218
|
+
"if the re-run cannot be triggered, fall back to today's
|
|
219
|
+
behaviour").
|
|
220
|
+
"""
|
|
221
|
+
...
|
|
222
|
+
|
|
198
223
|
|
|
199
224
|
class NoOpCi:
|
|
200
225
|
"""Always-available fallback that returns no checks and reruns nothing.
|
|
@@ -226,6 +251,11 @@ class NoOpCi:
|
|
|
226
251
|
detail to fetch (#1892)."""
|
|
227
252
|
return []
|
|
228
253
|
|
|
254
|
+
def rerun_failed_for_pr(self, repo: str, number: int) -> bool:
|
|
255
|
+
"""No-op: CI gating is disabled entirely, so there is nothing to
|
|
256
|
+
re-run (#2252)."""
|
|
257
|
+
return False
|
|
258
|
+
|
|
229
259
|
|
|
230
260
|
# ── Classification helpers ──────────────────────────────────────────────────
|
|
231
261
|
|
|
@@ -39,6 +39,7 @@ from typing import Any, Mapping
|
|
|
39
39
|
import click
|
|
40
40
|
|
|
41
41
|
from coord.commands._common import _CONFIG_OPTION
|
|
42
|
+
from coord.drive_state import WORK_LIKE
|
|
42
43
|
from coord.drive_queue import (
|
|
43
44
|
DEFAULT_MAX_ATTEMPTS,
|
|
44
45
|
DEFAULT_MAX_PARALLEL_PER_REPO,
|
|
@@ -55,6 +56,7 @@ from coord.drive_queue import (
|
|
|
55
56
|
STATE_PARKED,
|
|
56
57
|
STATE_RUNNING,
|
|
57
58
|
STATE_WAITING,
|
|
59
|
+
TERMINAL_QUEUE_STATES,
|
|
58
60
|
BoardView,
|
|
59
61
|
ProbeResult,
|
|
60
62
|
QueueEntry,
|
|
@@ -74,6 +76,20 @@ from coord.drive_queue import (
|
|
|
74
76
|
render_plan,
|
|
75
77
|
validate_enqueue,
|
|
76
78
|
)
|
|
79
|
+
from coord.overlap_predict import (
|
|
80
|
+
AUDIT_CATEGORY,
|
|
81
|
+
EVENT_PREDICTED,
|
|
82
|
+
EVENT_SCORED,
|
|
83
|
+
OUTCOME_UNKNOWN,
|
|
84
|
+
Prediction,
|
|
85
|
+
classify_outcome,
|
|
86
|
+
collect_candidate_files,
|
|
87
|
+
declared_footprints,
|
|
88
|
+
inflight_footprints,
|
|
89
|
+
predict_overlap,
|
|
90
|
+
predictions_from_audit,
|
|
91
|
+
tally,
|
|
92
|
+
)
|
|
77
93
|
|
|
78
94
|
# Wall-clock ceiling for the `coord drive --tmux` launch subprocess. The
|
|
79
95
|
# launch itself only blocks for #1606's liveness verification (16 × 0.5s) plus
|
|
@@ -162,6 +178,16 @@ def drive_queue_group() -> None:
|
|
|
162
178
|
"treated as a failure. Requires --hold-after."
|
|
163
179
|
),
|
|
164
180
|
)
|
|
181
|
+
@click.option(
|
|
182
|
+
"--no-predict-overlap",
|
|
183
|
+
is_flag=True,
|
|
184
|
+
default=False,
|
|
185
|
+
help=(
|
|
186
|
+
"Skip #2247's predicted file-overlap ordering for this add — queue it "
|
|
187
|
+
"exactly where the flags say, even if its declared files collide with "
|
|
188
|
+
"work already in flight."
|
|
189
|
+
),
|
|
190
|
+
)
|
|
165
191
|
@click.option(
|
|
166
192
|
"--scope",
|
|
167
193
|
"hold_scope",
|
|
@@ -185,6 +211,7 @@ def drive_queue_add(
|
|
|
185
211
|
hold_after: bool,
|
|
186
212
|
hold_reason: str,
|
|
187
213
|
resume_when: str,
|
|
214
|
+
no_predict_overlap: bool,
|
|
188
215
|
hold_scope: str,
|
|
189
216
|
config_path: Path,
|
|
190
217
|
) -> None:
|
|
@@ -193,6 +220,11 @@ def drive_queue_add(
|
|
|
193
220
|
Validation happens BEFORE the write, the same posture `coord milestone
|
|
194
221
|
write-order` takes for `## Work order`: a self-edge or a dependency cycle
|
|
195
222
|
exits non-zero and leaves the queue exactly as it was.
|
|
223
|
+
|
|
224
|
+
#2247: when this issue's DECLARED files (a `## Files` block in its body)
|
|
225
|
+
collide with work already in flight in the same repo, the entry is chained
|
|
226
|
+
`--after` that work automatically and the reason is recorded. That is an
|
|
227
|
+
ORDER change, never a refusal — see `coord.overlap_predict`.
|
|
196
228
|
"""
|
|
197
229
|
from coord.state import enqueue_drive_queue, list_drive_queue # noqa: PLC0415
|
|
198
230
|
|
|
@@ -226,6 +258,19 @@ def drive_queue_add(
|
|
|
226
258
|
"(entries-only). Pass --scope fleet again if the fleet-wide stop was still needed."
|
|
227
259
|
)
|
|
228
260
|
|
|
261
|
+
# #2247: predicted file overlap ORDERS, never refuses. Anything that goes
|
|
262
|
+
# wrong in here (unreadable body, unreachable board, a failed compare)
|
|
263
|
+
# yields an empty prediction and this add behaves exactly as it did before
|
|
264
|
+
# the feature existed.
|
|
265
|
+
prediction = Prediction()
|
|
266
|
+
auto_after: list[str] = []
|
|
267
|
+
if not no_predict_overlap:
|
|
268
|
+
prediction = _predict_overlap(config_path, repo, issue, existing_entries)
|
|
269
|
+
auto_after = _applicable_auto_after(
|
|
270
|
+
existing_entries, repo, issue, after, prediction
|
|
271
|
+
)
|
|
272
|
+
after = [*after, *auto_after]
|
|
273
|
+
|
|
229
274
|
enqueue_drive_queue(
|
|
230
275
|
repo,
|
|
231
276
|
issue,
|
|
@@ -237,6 +282,8 @@ def drive_queue_add(
|
|
|
237
282
|
resume_when=resume_when,
|
|
238
283
|
hold_scope=hold_scope,
|
|
239
284
|
)
|
|
285
|
+
if auto_after:
|
|
286
|
+
_record_overlap_prediction(repo, issue, prediction, auto_after)
|
|
240
287
|
suffix = f" after {', '.join(after)}" if after else ""
|
|
241
288
|
pinned = f" on {machine}" if machine else ""
|
|
242
289
|
gate = ""
|
|
@@ -246,7 +293,169 @@ def drive_queue_add(
|
|
|
246
293
|
gate += " (fleet-wide — nothing anywhere launches)"
|
|
247
294
|
if resume_when:
|
|
248
295
|
gate += f" (auto-resume when `{resume_when}` passes)"
|
|
249
|
-
|
|
296
|
+
overlap_note = f"\n{prediction.reason}" if auto_after else ""
|
|
297
|
+
click.echo(
|
|
298
|
+
f"queued {entry_key(repo, issue)}{pinned}{suffix}{gate}"
|
|
299
|
+
f"{scope_downgrade_warning}{overlap_note}"
|
|
300
|
+
)
|
|
301
|
+
|
|
302
|
+
|
|
303
|
+
# ── #2247: predicted file-overlap ordering ───────────────────────────────────
|
|
304
|
+
|
|
305
|
+
|
|
306
|
+
def _issue_body(repo_name: str, issue_number: int) -> str:
|
|
307
|
+
"""This issue's body from the coordinator's OWN issue store, or ``""``.
|
|
308
|
+
|
|
309
|
+
Daemon (a thin client's canonical copy) first, then the local ``issues``
|
|
310
|
+
cache. Deliberately NO GitHub leg: `add` is an interactive command, the
|
|
311
|
+
overwhelmingly common case is an issue with no `## Files` block at all,
|
|
312
|
+
and putting a live `gh` round-trip on every one of those to learn nothing
|
|
313
|
+
is a bad trade against a feature whose whole design premise is that no
|
|
314
|
+
prediction is a fine answer. An issue the board has never synced simply
|
|
315
|
+
gets today's behaviour — and #2246's post-merge sweep is what catches the
|
|
316
|
+
collisions prediction misses.
|
|
317
|
+
|
|
318
|
+
Fail-open at every layer — a body we cannot read means no prediction.
|
|
319
|
+
"""
|
|
320
|
+
try:
|
|
321
|
+
from coord.client import fetch_issue, resolve_board_service # noqa: PLC0415
|
|
322
|
+
|
|
323
|
+
svc = resolve_board_service()
|
|
324
|
+
if svc is not None:
|
|
325
|
+
row = fetch_issue(svc, repo_name, int(issue_number))
|
|
326
|
+
if row is not None:
|
|
327
|
+
return str(row.get("body") or "")
|
|
328
|
+
except Exception: # noqa: BLE001 — see docstring
|
|
329
|
+
pass
|
|
330
|
+
try:
|
|
331
|
+
from coord.db import get_connection # noqa: PLC0415
|
|
332
|
+
|
|
333
|
+
row = get_connection().execute(
|
|
334
|
+
"SELECT body FROM issues WHERE repo_name = ? AND number = ?",
|
|
335
|
+
(repo_name, int(issue_number)),
|
|
336
|
+
).fetchone()
|
|
337
|
+
return "" if row is None else str(row["body"] or "")
|
|
338
|
+
except Exception: # noqa: BLE001 — see docstring
|
|
339
|
+
return ""
|
|
340
|
+
|
|
341
|
+
|
|
342
|
+
def _repo_coordinates(config_path: Path, repo: str) -> tuple[str, str] | None:
|
|
343
|
+
"""``(github slug, default branch)`` for *repo*, or ``None``."""
|
|
344
|
+
try:
|
|
345
|
+
from coord.commands._common import _load_config # noqa: PLC0415
|
|
346
|
+
|
|
347
|
+
repo_cfg = _load_config(config_path).repo(repo)
|
|
348
|
+
except Exception: # noqa: BLE001 — a config that won't load means no prediction
|
|
349
|
+
return None
|
|
350
|
+
if repo_cfg is None:
|
|
351
|
+
return None
|
|
352
|
+
return str(repo_cfg.github or ""), str(getattr(repo_cfg, "default_branch", "") or "main")
|
|
353
|
+
|
|
354
|
+
|
|
355
|
+
def _predict_overlap(
|
|
356
|
+
config_path: Path, repo: str, issue: int, existing_entries: list[QueueEntry],
|
|
357
|
+
) -> Prediction:
|
|
358
|
+
"""Compare this issue's declared files against work already in flight.
|
|
359
|
+
|
|
360
|
+
Same-repo only: two repos' paths cannot collide, and comparing them would
|
|
361
|
+
manufacture overlaps out of a shared filename. In-flight branches are
|
|
362
|
+
checked first (ground truth); a queued entry with no branch yet is
|
|
363
|
+
compared declaration-to-declaration, and only when it has one.
|
|
364
|
+
"""
|
|
365
|
+
coordinates = _repo_coordinates(config_path, repo)
|
|
366
|
+
if coordinates is None:
|
|
367
|
+
return Prediction()
|
|
368
|
+
repo_github, base_branch = coordinates
|
|
369
|
+
|
|
370
|
+
def body_fetcher(repo_name: str, number: int) -> str:
|
|
371
|
+
return _issue_body(repo_name, number)
|
|
372
|
+
|
|
373
|
+
candidate = collect_candidate_files(repo, issue, body_fetcher)
|
|
374
|
+
if not candidate:
|
|
375
|
+
# Rule 3: no prediction is a valid answer. Nothing is fetched, nothing
|
|
376
|
+
# is compared, and the add is byte-identical to the pre-#2247 one.
|
|
377
|
+
return Prediction()
|
|
378
|
+
|
|
379
|
+
key = entry_key(repo, issue)
|
|
380
|
+
footprints = inflight_footprints(
|
|
381
|
+
repo, repo_github, base_branch, exclude_issue_number=issue,
|
|
382
|
+
)
|
|
383
|
+
covered = {key, *(f.key for f in footprints)}
|
|
384
|
+
queued = [
|
|
385
|
+
(e.repo, e.issue)
|
|
386
|
+
for e in existing_entries
|
|
387
|
+
if e.repo == repo
|
|
388
|
+
and e.key not in covered
|
|
389
|
+
and e.state not in TERMINAL_QUEUE_STATES
|
|
390
|
+
]
|
|
391
|
+
footprints.extend(declared_footprints(queued, body_fetcher, exclude_keys=covered))
|
|
392
|
+
return predict_overlap(candidate, footprints, exclude_keys={key})
|
|
393
|
+
|
|
394
|
+
|
|
395
|
+
def _applicable_auto_after(
|
|
396
|
+
existing_entries: list[QueueEntry],
|
|
397
|
+
repo: str,
|
|
398
|
+
issue: int,
|
|
399
|
+
after: list[str],
|
|
400
|
+
prediction: Prediction,
|
|
401
|
+
) -> list[str]:
|
|
402
|
+
"""The predicted pre-reqs that are actually safe to add.
|
|
403
|
+
|
|
404
|
+
An INFERRED edge must never be able to fail an add the operator's own
|
|
405
|
+
flags would have allowed, so each one is validated on its own and simply
|
|
406
|
+
dropped if it would self-edge or close a cycle — the opposite posture to
|
|
407
|
+
`validate_enqueue`'s treatment of an operator-declared `--after`, which is
|
|
408
|
+
a typo worth reporting.
|
|
409
|
+
"""
|
|
410
|
+
applied: list[str] = []
|
|
411
|
+
for candidate_key in prediction.after_keys:
|
|
412
|
+
if candidate_key in after or candidate_key in applied:
|
|
413
|
+
continue
|
|
414
|
+
try:
|
|
415
|
+
validate_enqueue(
|
|
416
|
+
existing_entries, repo, issue, [*after, *applied, candidate_key]
|
|
417
|
+
)
|
|
418
|
+
except QueueError:
|
|
419
|
+
continue
|
|
420
|
+
applied.append(candidate_key)
|
|
421
|
+
return applied
|
|
422
|
+
|
|
423
|
+
|
|
424
|
+
def _record_overlap_prediction(
|
|
425
|
+
repo: str, issue: int, prediction: Prediction, applied: list[str],
|
|
426
|
+
) -> None:
|
|
427
|
+
"""Persist WHY this entry was ordered — on the row and in the audit log.
|
|
428
|
+
|
|
429
|
+
Two sinks, deliberately. `last_reason` is what an operator reading `coord
|
|
430
|
+
drive-queue list` sees immediately, but the tick owns that column and will
|
|
431
|
+
overwrite it on the entry's first attempt. The audit row is the durable
|
|
432
|
+
one, and it carries both sides' file lists so the claim can be scored
|
|
433
|
+
later (`coord drive-queue overlap-report`) — without that, nobody can tell
|
|
434
|
+
a working predictor from a lucky one.
|
|
435
|
+
"""
|
|
436
|
+
details = prediction.audit_details()
|
|
437
|
+
details["applied_after"] = list(applied)
|
|
438
|
+
try:
|
|
439
|
+
from coord.audit import record_audit # noqa: PLC0415
|
|
440
|
+
|
|
441
|
+
record_audit(
|
|
442
|
+
tier="business",
|
|
443
|
+
category=AUDIT_CATEGORY,
|
|
444
|
+
event_type=EVENT_PREDICTED,
|
|
445
|
+
actor="drive-queue",
|
|
446
|
+
summary=prediction.reason,
|
|
447
|
+
repo=repo,
|
|
448
|
+
issue=issue,
|
|
449
|
+
details=details,
|
|
450
|
+
)
|
|
451
|
+
except Exception: # noqa: BLE001 — recording must never fail the enqueue
|
|
452
|
+
pass
|
|
453
|
+
try:
|
|
454
|
+
from coord.state import update_drive_queue_entry # noqa: PLC0415
|
|
455
|
+
|
|
456
|
+
update_drive_queue_entry(repo, issue, last_reason=prediction.reason)
|
|
457
|
+
except Exception: # noqa: BLE001 — same
|
|
458
|
+
pass
|
|
250
459
|
|
|
251
460
|
|
|
252
461
|
def validate_hold_flags(
|
|
@@ -641,6 +850,153 @@ def drive_queue_status(output_json: bool, config_path: Path) -> None:
|
|
|
641
850
|
click.echo("alert: (none)")
|
|
642
851
|
|
|
643
852
|
|
|
853
|
+
# ── overlap-report (#2247) ───────────────────────────────────────────────────
|
|
854
|
+
|
|
855
|
+
|
|
856
|
+
def _branch_index(board: Any, repo: str) -> dict[int, str]:
|
|
857
|
+
"""``issue number -> branch`` for every work-like assignment in *repo*.
|
|
858
|
+
|
|
859
|
+
Reads ``completed`` as well as ``active``: scoring happens AFTER the work
|
|
860
|
+
landed, which is precisely when its assignment is no longer active.
|
|
861
|
+
"""
|
|
862
|
+
index: dict[int, str] = {}
|
|
863
|
+
for bucket in ("active", "completed"):
|
|
864
|
+
for a in list(getattr(board, bucket, ()) or []):
|
|
865
|
+
if getattr(a, "type", "") not in WORK_LIKE:
|
|
866
|
+
continue
|
|
867
|
+
if getattr(a, "repo_name", "") != repo or not getattr(a, "branch", ""):
|
|
868
|
+
continue
|
|
869
|
+
index.setdefault(int(a.issue_number), str(a.branch))
|
|
870
|
+
return index
|
|
871
|
+
|
|
872
|
+
|
|
873
|
+
@drive_queue_group.command("overlap-report")
|
|
874
|
+
@click.option("--repo", "repo", default=None, help="Restrict to one repo (default: every repo).")
|
|
875
|
+
@click.option("--limit", type=int, default=200, show_default=True, help="How many prediction rows to read back.")
|
|
876
|
+
@click.option("--json", "output_json", is_flag=True, default=False, help="Emit the scored rows as JSON.")
|
|
877
|
+
@_CONFIG_OPTION
|
|
878
|
+
def drive_queue_overlap_report(
|
|
879
|
+
repo: str | None, limit: int, output_json: bool, config_path: Path,
|
|
880
|
+
) -> None:
|
|
881
|
+
"""Score #2247's file-overlap predictions against what the branches DID touch.
|
|
882
|
+
|
|
883
|
+
Every auto-`--after` this feature applied is a checkable claim ("these two
|
|
884
|
+
file sets will intersect"). This reads those claims back out of the audit
|
|
885
|
+
log and compares them to the real diffs, recording each verdict so a
|
|
886
|
+
FALSE POSITIVE — an entry serialized for nothing — is a number rather than
|
|
887
|
+
an anecdote. A prediction whose branches cannot be diffed yet is left
|
|
888
|
+
unscored, not counted against the predictor.
|
|
889
|
+
"""
|
|
890
|
+
from coord.audit import query_audit_log, record_audit # noqa: PLC0415
|
|
891
|
+
|
|
892
|
+
try:
|
|
893
|
+
predicted = query_audit_log(
|
|
894
|
+
event_type=EVENT_PREDICTED, category=AUDIT_CATEGORY, repo=repo, limit=limit,
|
|
895
|
+
)
|
|
896
|
+
already = query_audit_log(
|
|
897
|
+
event_type=EVENT_SCORED, category=AUDIT_CATEGORY, repo=repo, limit=limit,
|
|
898
|
+
)
|
|
899
|
+
except Exception as exc: # noqa: BLE001 — a read-only report never crashes
|
|
900
|
+
raise click.ClickException(f"could not read the audit log: {exc}") from None
|
|
901
|
+
|
|
902
|
+
scored_before = {
|
|
903
|
+
(str((e.get("details") or {}).get("key") or ""),
|
|
904
|
+
str((e.get("details") or {}).get("other_key") or ""))
|
|
905
|
+
for e in already.get("entries") or []
|
|
906
|
+
}
|
|
907
|
+
records = predictions_from_audit(predicted.get("entries") or [])
|
|
908
|
+
if not records:
|
|
909
|
+
click.echo("overlap predictions: (none recorded)")
|
|
910
|
+
return
|
|
911
|
+
|
|
912
|
+
boards: dict[str, Any] = {}
|
|
913
|
+
diffs: dict[tuple[str, str], list[str] | None] = {}
|
|
914
|
+
|
|
915
|
+
def actual_files(repo_name: str, issue_number: int) -> list[str] | None:
|
|
916
|
+
coordinates = _repo_coordinates(config_path, repo_name)
|
|
917
|
+
if coordinates is None:
|
|
918
|
+
return None
|
|
919
|
+
repo_github, base_branch = coordinates
|
|
920
|
+
if repo_name not in boards:
|
|
921
|
+
try:
|
|
922
|
+
from coord.board_service import read_board # noqa: PLC0415
|
|
923
|
+
|
|
924
|
+
boards[repo_name] = read_board()
|
|
925
|
+
except Exception: # noqa: BLE001 — unknown, never "no overlap"
|
|
926
|
+
boards[repo_name] = None
|
|
927
|
+
board = boards[repo_name]
|
|
928
|
+
if board is None:
|
|
929
|
+
return None
|
|
930
|
+
branch = _branch_index(board, repo_name).get(int(issue_number))
|
|
931
|
+
if not branch:
|
|
932
|
+
return None
|
|
933
|
+
cache_key = (repo_github, branch)
|
|
934
|
+
if cache_key not in diffs:
|
|
935
|
+
try:
|
|
936
|
+
from coord import github_ops # noqa: PLC0415
|
|
937
|
+
|
|
938
|
+
diffs[cache_key] = github_ops.get_compare_files(
|
|
939
|
+
repo_github, base_branch, branch
|
|
940
|
+
)
|
|
941
|
+
except Exception: # noqa: BLE001 — unknown, never "no overlap"
|
|
942
|
+
diffs[cache_key] = None
|
|
943
|
+
return diffs[cache_key]
|
|
944
|
+
|
|
945
|
+
rows: list[dict[str, Any]] = []
|
|
946
|
+
for record in records:
|
|
947
|
+
other = parse_key(record["other_key"])
|
|
948
|
+
outcome = OUTCOME_UNKNOWN
|
|
949
|
+
if other is not None:
|
|
950
|
+
outcome = classify_outcome(
|
|
951
|
+
record["files"],
|
|
952
|
+
actual_files(record["repo"], record["issue"]),
|
|
953
|
+
actual_files(other[0], other[1]),
|
|
954
|
+
)
|
|
955
|
+
rows.append({**record, "outcome": outcome})
|
|
956
|
+
if outcome == OUTCOME_UNKNOWN:
|
|
957
|
+
continue
|
|
958
|
+
if (record["key"], record["other_key"]) in scored_before:
|
|
959
|
+
continue
|
|
960
|
+
record_audit(
|
|
961
|
+
tier="business",
|
|
962
|
+
category=AUDIT_CATEGORY,
|
|
963
|
+
event_type=EVENT_SCORED,
|
|
964
|
+
actor="drive-queue",
|
|
965
|
+
summary=f"{record['key']} ordered after {record['other_key']}: {outcome}",
|
|
966
|
+
repo=record["repo"],
|
|
967
|
+
issue=record["issue"],
|
|
968
|
+
details={
|
|
969
|
+
"key": record["key"],
|
|
970
|
+
"other_key": record["other_key"],
|
|
971
|
+
"outcome": outcome,
|
|
972
|
+
"predicted_files": record["files"],
|
|
973
|
+
"source": record["source"],
|
|
974
|
+
},
|
|
975
|
+
)
|
|
976
|
+
|
|
977
|
+
accuracy = tally(r["outcome"] for r in rows)
|
|
978
|
+
if output_json:
|
|
979
|
+
click.echo(
|
|
980
|
+
_json.dumps(
|
|
981
|
+
{
|
|
982
|
+
"rows": rows,
|
|
983
|
+
"confirmed": accuracy.confirmed,
|
|
984
|
+
"false_positive": accuracy.false_positive,
|
|
985
|
+
"unknown": accuracy.unknown,
|
|
986
|
+
"precision": accuracy.precision,
|
|
987
|
+
}
|
|
988
|
+
)
|
|
989
|
+
)
|
|
990
|
+
return
|
|
991
|
+
click.echo(f"overlap predictions: {accuracy.render()}")
|
|
992
|
+
for row in rows:
|
|
993
|
+
files = ", ".join(row["files"][:3]) or "(none)"
|
|
994
|
+
click.echo(
|
|
995
|
+
f" {row['key']} after {row['other_key']} [{row['source']}] "
|
|
996
|
+
f"{row['outcome']} — {files}"
|
|
997
|
+
)
|
|
998
|
+
|
|
999
|
+
|
|
644
1000
|
# ── resume (#1757) ───────────────────────────────────────────────────────────
|
|
645
1001
|
|
|
646
1002
|
|
|
@@ -189,7 +189,9 @@ def _ensure_schema(conn: sqlite3.Connection) -> None:
|
|
|
189
189
|
assignment_type TEXT DEFAULT 'work',
|
|
190
190
|
required_gates TEXT,
|
|
191
191
|
ci_infra_reruns INTEGER NOT NULL DEFAULT 0,
|
|
192
|
-
ci_stale_reruns INTEGER NOT NULL DEFAULT 0
|
|
192
|
+
ci_stale_reruns INTEGER NOT NULL DEFAULT 0,
|
|
193
|
+
ci_flaky_reruns INTEGER NOT NULL DEFAULT 0,
|
|
194
|
+
ci_flaky_pending TEXT NOT NULL DEFAULT ''
|
|
193
195
|
);
|
|
194
196
|
|
|
195
197
|
CREATE TABLE IF NOT EXISTS plans (
|
|
@@ -857,6 +859,15 @@ def _migrate_add_columns(conn: sqlite3.Connection) -> None:
|
|
|
857
859
|
# 0 for every row predating this migration, same as the column's own
|
|
858
860
|
# default for a freshly-enqueued entry.
|
|
859
861
|
"ALTER TABLE drive_queue ADD COLUMN resumes INTEGER NOT NULL DEFAULT 0",
|
|
862
|
+
# #2252: the flake-recheck auto-rerun's OWN counter/pending-state —
|
|
863
|
+
# see `coord.merge_queue.MAX_CI_FLAKY_RERUNS` and
|
|
864
|
+
# `QueuedMerge.ci_flaky_reruns`/`ci_flaky_pending`'s docstrings for
|
|
865
|
+
# why they're kept separate from `ci_infra_reruns`/`ci_stale_reruns`
|
|
866
|
+
# above rather than sharing either. 0/'' for every row predating
|
|
867
|
+
# this migration — no flake re-run ever spent/pending — same as the
|
|
868
|
+
# columns' own defaults for a freshly-enqueued entry.
|
|
869
|
+
"ALTER TABLE merge_queue ADD COLUMN ci_flaky_reruns INTEGER NOT NULL DEFAULT 0",
|
|
870
|
+
"ALTER TABLE merge_queue ADD COLUMN ci_flaky_pending TEXT NOT NULL DEFAULT ''",
|
|
860
871
|
]
|
|
861
872
|
for sql in migrations:
|
|
862
873
|
try:
|