code-coordinator 0.5.124__tar.gz → 0.5.126__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.124 → code_coordinator-0.5.126}/PKG-INFO +1 -1
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/block_log.py +104 -1
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/ci_store.py +27 -4
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/commands/drive_queue.py +291 -13
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/db.py +10 -1
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/drive.py +22 -2
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/drive_queue.py +168 -2
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/drive_state.py +8 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/merge_queue.py +215 -8
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/scripts/coord-test-runner.sh +13 -2
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_block_log.py +50 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_ci_store.py +12 -2
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_cli_drive_queue.py +197 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_drive.py +93 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_drive_queue.py +242 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_merge_queue.py +281 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_thin_client_board_audit.py +14 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tui/tests/fixtures/board_sample.json +1 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/.github/workflows/release-tui.yml +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/.gitignore +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/CLAUDE.md +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/GOAL.md +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/LICENSE +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/MANIFEST.in +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/README.md +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/__init__.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/agent.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/audit.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/board_bool_guard.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/board_service.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/brain.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/claim.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/cli.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/client.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/comments.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/config.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dao.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/.gitignore +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/components.json +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/dist/assets/Gallery-BoKs3mpY.js +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/dist/assets/Terminal-CEsP08iX.js +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/dist/assets/index-CDHPlB6k.js +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/dist/index.html +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/dist/sw.js +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/eslint.config.js +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/index.html +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/package-lock.json +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/package.json +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/playwright.config.ts +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/postcss.config.js +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/src/App.tsx +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/src/api/client.ts +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/src/api/generated.ts +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/src/index.css +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/src/main.tsx +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/src/test-setup.ts +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/tailwind.config.js +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/tsconfig.json +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/tsconfig.node.json +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dashboard/webapp/vite.config.ts +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/deps.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/events.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/filelock.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/freshness.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/gates.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/goal.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/health/context.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/health/models.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/health/render.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/health/units.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/hooks.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/interactive.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/models.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/network.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/notify.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/openapi.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/parentage.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/plans.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/progress.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/release_window.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/reports.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/review.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/smoke.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/split_work.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/state.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/test_author.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/test_report.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/usage.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/install-agent.sh +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/pyproject.toml +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/setup.cfg +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/__init__.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/acceptance/ms-33/audit_1039.rs +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/acceptance/ms-33/contract.md +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/acceptance/ms-33/manifest.yml +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/acceptance/ms-38/contract.md +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/acceptance/ms-38/manifest.yml +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/acceptance/ms-65/contract.md +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/acceptance/ms-65/manifest.yml +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/conftest.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_config.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_db.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_events.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_init.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_models.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_network.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_no_direct_gh_calls.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_review.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_session.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_split.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_state.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tui/Cargo.lock +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tui/Cargo.toml +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tui/cargo-config-local-quadraui.toml.example +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tui/src/app/audit.rs +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tui/src/app/chat.rs +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tui/src/app/data.rs +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tui/src/app/dialogs.rs +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tui/src/app/drive.rs +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tui/src/app/drive_queue.rs +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tui/src/app/escalation.rs +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tui/src/app/events.rs +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tui/src/app/fixtures.rs +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tui/src/app/fleet_health.rs +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tui/src/app/fleet_sessions.rs +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tui/src/app/fleet_terminals.rs +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tui/src/app/format.rs +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tui/src/app/milestone_dag.rs +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tui/src/app/mod.rs +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tui/src/app/msv.rs +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tui/src/app/pipeline.rs +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tui/src/app/plans.rs +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tui/src/app/render.rs +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tui/src/app/reports.rs +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tui/src/app/sessions.rs +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tui/src/app/settings_ui.rs +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tui/src/app/sidebar.rs +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tui/src/app/terminal.rs +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tui/src/app/tests.rs +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tui/src/app/types.rs +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tui/src/app/workspace.rs +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tui/src/bin/gtk.rs +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tui/src/commands.rs +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tui/src/lib.rs +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tui/src/main.rs +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tui/src/settings.rs +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tui/tests/acceptance.rs +0 -0
- {code_coordinator-0.5.124 → code_coordinator-0.5.126}/tui/tests/cli.rs +0 -0
|
@@ -70,7 +70,9 @@ from typing import Any
|
|
|
70
70
|
|
|
71
71
|
from coord.drive_queue import (
|
|
72
72
|
STATE_BLOCKED,
|
|
73
|
+
STATE_DONE,
|
|
73
74
|
STATE_PARKED,
|
|
75
|
+
STATE_WAITING,
|
|
74
76
|
QueueEntry,
|
|
75
77
|
TickPlan,
|
|
76
78
|
)
|
|
@@ -107,6 +109,8 @@ __all__ = [
|
|
|
107
109
|
"episodes",
|
|
108
110
|
"is_by_design",
|
|
109
111
|
"log_location",
|
|
112
|
+
"merge_only_event",
|
|
113
|
+
"merge_only_fallback_event",
|
|
110
114
|
"operator_resolution_event",
|
|
111
115
|
"plan_events",
|
|
112
116
|
"read_events",
|
|
@@ -221,6 +225,20 @@ _LANDED_CAUSE = (
|
|
|
221
225
|
"already-landed — the work merged or closed while the entry sat in this "
|
|
222
226
|
"state, so the stated reason had outlived the thing it described"
|
|
223
227
|
)
|
|
228
|
+
#: #2350: distinct from `_LANDED_CAUSE` on purpose — that one means "the entry
|
|
229
|
+
#: sat here and something ELSE finished it while nobody was looking" (a human,
|
|
230
|
+
#: an unrelated branch merge, `coord reconcile-merges`); this one means the
|
|
231
|
+
#: QUEUE ITSELF, this same tick, ran `coord merge --only` and landed it —
|
|
232
|
+
#: see `coord.commands.drive_queue._run_merge_only_candidates`'s success
|
|
233
|
+
#: branch, the ONLY writer of the `outcome == "merged"` `_resolve_record`
|
|
234
|
+
#: reads to pick this cause. Conflating the two into one `auto-released`-style
|
|
235
|
+
#: bucket is exactly what #2350 was written to stop: #2235's corpus needs to
|
|
236
|
+
#: tell "the mechanism did this" apart from "the state flipped and something
|
|
237
|
+
#: unrelated did it".
|
|
238
|
+
_AUTO_MERGED_CAUSE = (
|
|
239
|
+
"auto-merged — the queue completed the merge directly from the tick "
|
|
240
|
+
"(#2350), Test/Review already satisfied; Merge was the only gate left"
|
|
241
|
+
)
|
|
224
242
|
_OPERATOR_CAUSE = (
|
|
225
243
|
"operator-intervened — no automatic release fired; a human cleared it by "
|
|
226
244
|
"hand, and what they actually fixed is NOT recorded here"
|
|
@@ -405,7 +423,17 @@ def _resolve_record(
|
|
|
405
423
|
now: float,
|
|
406
424
|
outcome: str,
|
|
407
425
|
) -> dict[str, Any]:
|
|
408
|
-
if outcome == "
|
|
426
|
+
if outcome == "merged":
|
|
427
|
+
# #2350: checked BEFORE the "done" branch below — a successful
|
|
428
|
+
# Merge-only fast-path attempt also lands `new_state == "done"` (it
|
|
429
|
+
# skips the `waiting`/relaunch cycle entirely), so without this
|
|
430
|
+
# ordering the generic landed check would win the match and this
|
|
431
|
+
# episode would be indistinguishable from "something else merged it
|
|
432
|
+
# while it sat here" — exactly the conflation #2350 exists to split
|
|
433
|
+
# out of #2230's `auto-released`/#2055's `already-landed`.
|
|
434
|
+
true_cause, human = _AUTO_MERGED_CAUSE, False
|
|
435
|
+
resolution = "auto_merged"
|
|
436
|
+
elif outcome == "done" or new_state == "done":
|
|
409
437
|
true_cause, human = _LANDED_CAUSE, False
|
|
410
438
|
resolution = "landed"
|
|
411
439
|
elif outcome == "resumed":
|
|
@@ -471,6 +499,81 @@ def enter_event(
|
|
|
471
499
|
return record
|
|
472
500
|
|
|
473
501
|
|
|
502
|
+
def merge_only_event(
|
|
503
|
+
entry: QueueEntry,
|
|
504
|
+
*,
|
|
505
|
+
host: str = "",
|
|
506
|
+
now: float | None = None,
|
|
507
|
+
) -> dict[str, Any]:
|
|
508
|
+
"""The ``resolve`` record for #2350's Merge-only fast path.
|
|
509
|
+
|
|
510
|
+
The other caller-constructed record besides :func:`enter_event`, and for
|
|
511
|
+
the identical structural reason: the transition happens OUTSIDE
|
|
512
|
+
:func:`plan_events`'s view. A `merge_only` :class:`~coord.drive_queue.
|
|
513
|
+
Reconcile` deliberately writes no `state` (see its docstring), so
|
|
514
|
+
`plan.writes()` never carries the `parked`/`blocked` → `done` move this
|
|
515
|
+
function records — it only happens once the shell's own live
|
|
516
|
+
``coord merge --only`` attempt reports success, strictly after
|
|
517
|
+
``_apply_writes`` has already run for the rest of the tick. *entry* is
|
|
518
|
+
the PRE-tick snapshot (its ``state`` is still `parked`/`blocked`); the
|
|
519
|
+
entry has already landed by the time this is called, so `new_state` is
|
|
520
|
+
unconditionally :data:`~coord.drive_queue.STATE_DONE`.
|
|
521
|
+
"""
|
|
522
|
+
stamp = time.time() if now is None else now
|
|
523
|
+
record = _resolve_record(
|
|
524
|
+
entry.key,
|
|
525
|
+
entry.state,
|
|
526
|
+
STATE_DONE,
|
|
527
|
+
"",
|
|
528
|
+
entry,
|
|
529
|
+
host=host,
|
|
530
|
+
now=stamp,
|
|
531
|
+
outcome="merged",
|
|
532
|
+
)
|
|
533
|
+
record["source"] = "tick"
|
|
534
|
+
return record
|
|
535
|
+
|
|
536
|
+
|
|
537
|
+
def merge_only_fallback_event(
|
|
538
|
+
entry: QueueEntry,
|
|
539
|
+
*,
|
|
540
|
+
reason: str,
|
|
541
|
+
host: str = "",
|
|
542
|
+
now: float | None = None,
|
|
543
|
+
) -> dict[str, Any]:
|
|
544
|
+
"""The ``resolve`` record for #2350's Merge-only fast path RACE case:
|
|
545
|
+
the live gate read clear enough to attempt a direct merge, but the
|
|
546
|
+
attempt itself did not confirm a landed merge, so
|
|
547
|
+
``coord.commands.drive_queue._run_merge_only_candidates`` falls back to
|
|
548
|
+
exactly the pre-#2350 ``resumed`` shape (``STATE_WAITING``) — OUTSIDE
|
|
549
|
+
``plan.writes()``, the same reason :func:`merge_only_event` exists for
|
|
550
|
+
the success case: without this, the episode :func:`plan_events` already
|
|
551
|
+
opened for *entry* would never see a matching close, and
|
|
552
|
+
``coord drive-queue block-log`` would show it stuck ``(unresolved)``
|
|
553
|
+
forever even though the entry plainly left `parked`/`blocked` this tick.
|
|
554
|
+
|
|
555
|
+
Classified as an ordinary ``resumed`` outcome — not a new #2350 cause —
|
|
556
|
+
on purpose: unlike the success case, this genuinely IS "state flipped,
|
|
557
|
+
cause a plain gate re-clear" (:func:`_resume_cause`'s fallback,
|
|
558
|
+
``auto-released``), the same honest non-answer a bare board-signal
|
|
559
|
+
resume already gets. #2350's distinct cause is reserved for the tick
|
|
560
|
+
actually landing the merge itself.
|
|
561
|
+
"""
|
|
562
|
+
stamp = time.time() if now is None else now
|
|
563
|
+
record = _resolve_record(
|
|
564
|
+
entry.key,
|
|
565
|
+
entry.state,
|
|
566
|
+
STATE_WAITING,
|
|
567
|
+
reason,
|
|
568
|
+
entry,
|
|
569
|
+
host=host,
|
|
570
|
+
now=stamp,
|
|
571
|
+
outcome="resumed",
|
|
572
|
+
)
|
|
573
|
+
record["source"] = "tick"
|
|
574
|
+
return record
|
|
575
|
+
|
|
576
|
+
|
|
474
577
|
def operator_resolution_event(
|
|
475
578
|
entry: QueueEntry,
|
|
476
579
|
*,
|
|
@@ -324,7 +324,7 @@ CI_RERUN_POLL_INTERVAL_SECONDS = 10.0
|
|
|
324
324
|
CI_RERUN_MAX_WAIT_SECONDS = 360.0
|
|
325
325
|
|
|
326
326
|
|
|
327
|
-
def
|
|
327
|
+
def is_unreadable_check(check) -> bool:
|
|
328
328
|
"""True for the #1525 synthetic "could not read CI status" / "gh too
|
|
329
329
|
old" stand-ins (``coord.ci_github._unreadable_check`` /
|
|
330
330
|
``_gh_too_old_check``) — the read itself failed, so this says nothing
|
|
@@ -332,10 +332,33 @@ def _is_unreadable_check(check) -> bool:
|
|
|
332
332
|
importing ``coord.ci_github`` — this module must stay backend-agnostic,
|
|
333
333
|
and every stub/fake ``CheckRun``-alike in the test suite already has
|
|
334
334
|
both attributes.
|
|
335
|
+
|
|
336
|
+
Public (#2347) — :mod:`coord.merge_queue` reuses this directly to
|
|
337
|
+
classify a ``checks_failed`` block whose failures are ALL this stand-in
|
|
338
|
+
as a bare check-list *fetch* failure (``CI_UNREADABLE_PREFIX``), distinct
|
|
339
|
+
from both a real "still running" and a real "ran and failed" verdict; see
|
|
340
|
+
that module's docstring for the classification this feeds.
|
|
341
|
+
|
|
342
|
+
Deliberately narrower than "any ``coord: ``-named synthetic check with
|
|
343
|
+
``conclusion == "unknown"``": :class:`coord.gate_snapshot.GateSnapshot`
|
|
344
|
+
(the board *read* path's ``CiStore`` — :mod:`coord.merge_queue`'s
|
|
345
|
+
``_entry_gate_status`` can be, and in production is, called with one —
|
|
346
|
+
see ``coord.serve_app``'s ``/board`` handler) emits its OWN such
|
|
347
|
+
stand-in, ``_stale_check`` (``"coord: gate snapshot stale (...)"``), for
|
|
348
|
+
a completely different local condition — the daemon's own refresh loop
|
|
349
|
+
fell behind, not a GitHub read failure — and #2347's classification must
|
|
350
|
+
not relabel that as "GitHub unreachable". Both `coord.ci_github` stand-ins
|
|
351
|
+
share the phrase "read CI status" in their name; `_stale_check` does not,
|
|
352
|
+
so requiring it is what keeps the two apart without this module having
|
|
353
|
+
to import `coord.gate_snapshot` (which itself imports `coord.ci_store` —
|
|
354
|
+
the reverse import would cycle) or duck-type on anything less stable
|
|
355
|
+
than the prose these three call sites already commit to.
|
|
335
356
|
"""
|
|
357
|
+
name = str(getattr(check, "name", ""))
|
|
336
358
|
return (
|
|
337
359
|
getattr(check, "conclusion", None) == "unknown"
|
|
338
|
-
and
|
|
360
|
+
and name.startswith("coord: ")
|
|
361
|
+
and "read CI status" in name
|
|
339
362
|
)
|
|
340
363
|
|
|
341
364
|
|
|
@@ -381,7 +404,7 @@ def wait_for_ci_settle(
|
|
|
381
404
|
|
|
382
405
|
A "registering" read — no checks at all yet, or every check present is
|
|
383
406
|
one of the #1525 synthetic unreadable stand-ins (see
|
|
384
|
-
:func:`
|
|
407
|
+
:func:`is_unreadable_check`) — never counts as settled, however many
|
|
385
408
|
times it's observed; only real, resolved checks do. Genuinely in-flight
|
|
386
409
|
real checks (a run that registered and is now actually executing) also
|
|
387
410
|
keep polling — that's the ordinary "wait for CI to finish" case this
|
|
@@ -409,7 +432,7 @@ def wait_for_ci_settle(
|
|
|
409
432
|
except Exception: # noqa: BLE001 — best-effort cache-bust only
|
|
410
433
|
pass
|
|
411
434
|
checks = ci_store.list_checks_for_pr(repo, number)
|
|
412
|
-
registering = not checks or all(
|
|
435
|
+
registering = not checks or all(is_unreadable_check(c) for c in checks)
|
|
413
436
|
if not registering and not in_flight_checks(checks):
|
|
414
437
|
return CiSettleResult(
|
|
415
438
|
settled=True, checks=checks, waited_seconds=clock() - start,
|
|
@@ -53,6 +53,7 @@ from coord.drive_queue import (
|
|
|
53
53
|
QUEUE_ALERT_STAGE,
|
|
54
54
|
RESUME_PROBE_TIMEOUT_SECONDS,
|
|
55
55
|
STATE_BLOCKED,
|
|
56
|
+
STATE_DONE,
|
|
56
57
|
STATE_FAILED,
|
|
57
58
|
STATE_PARKED,
|
|
58
59
|
STATE_RUNNING,
|
|
@@ -98,6 +99,33 @@ from coord.overlap_predict import (
|
|
|
98
99
|
# budget.
|
|
99
100
|
_LAUNCH_TIMEOUT_SECONDS = 120.0
|
|
100
101
|
|
|
102
|
+
# Wall-clock ceiling for the tick's own `coord merge --only` attempt
|
|
103
|
+
# (#2350's fast path, `_run_merge_only_candidates`). Deliberately its OWN
|
|
104
|
+
# constant, not a reuse of `_LAUNCH_TIMEOUT_SECONDS` above: that one is
|
|
105
|
+
# scoped to a `coord drive --tmux` launch, which only ever blocks on #1606's
|
|
106
|
+
# bounded liveness check, so 120s is already generous there. `coord merge
|
|
107
|
+
# --only` is a different animal — elsewhere in the codebase
|
|
108
|
+
# (`Driver._spawn` in `coord/drive.py`) the SAME subcommand runs under NO
|
|
109
|
+
# subprocess timeout at all, nested inside up to a 1800s merge-lock
|
|
110
|
+
# acquisition, i.e. the existing precedent treats its runtime as
|
|
111
|
+
# unbounded/long, not launch-fast. This call site does still want a
|
|
112
|
+
# backstop — unlike `_spawn`'s fire-and-forget, this one runs synchronously
|
|
113
|
+
# inside `drive_queue_tick`, in a loop over every `merge_only` candidate
|
|
114
|
+
# this tick found (typically 0-2, see `_fetch_merge_only_ready`, but not
|
|
115
|
+
# hard-capped), and a wedge here stalls the whole tick — so it gets a wider
|
|
116
|
+
# ceiling than the launch check instead of no ceiling at all, without going
|
|
117
|
+
# fully unbounded: `coord-drive-queue.service` (the deployed timer unit)
|
|
118
|
+
# gives the ENTIRE `coord drive-queue tick` invocation only 300s
|
|
119
|
+
# (`TimeoutStartSec`) before systemd kills it outright, which is a harder
|
|
120
|
+
# and less graceful stop than this subprocess's own SIGKILL. 240s leaves
|
|
121
|
+
# room for one slow `gh pr merge`/git round trip on a bad network day
|
|
122
|
+
# without letting a single candidate alone consume the whole tick's outer
|
|
123
|
+
# budget (this PR's invocation never passes `--revalidate`, so
|
|
124
|
+
# `wait_for_ci_settle`'s up to 360s doesn't even apply today, but the argv
|
|
125
|
+
# could grow that flag later — revisit this ceiling together with
|
|
126
|
+
# `coord-drive-queue.service`'s `TimeoutStartSec` if it does).
|
|
127
|
+
_MERGE_ONLY_TIMEOUT_SECONDS = 240.0
|
|
128
|
+
|
|
101
129
|
# Counts are rendered in pipeline order, not alphabetically, so
|
|
102
130
|
# `coord drive-queue status` reads as "1 running · 1 waiting". `parked`
|
|
103
131
|
# (#1891) sits between `waiting` and `blocked` — closer to "nothing wrong"
|
|
@@ -1837,11 +1865,21 @@ def _fetch_gate_a_pending(entries: list) -> dict[str, bool]:
|
|
|
1837
1865
|
|
|
1838
1866
|
def _fetch_live_ci_gate(
|
|
1839
1867
|
entries: list, config_path: Path | None
|
|
1840
|
-
) -> dict[str, bool]:
|
|
1841
|
-
"""``{entry_key: still_blocked}`` for every
|
|
1842
|
-
park reason is CI-shaped
|
|
1843
|
-
re-derivation of the SAME
|
|
1844
|
-
live, right now, this tick
|
|
1868
|
+
) -> tuple[dict[str, bool], dict[str, str]]:
|
|
1869
|
+
"""``({entry_key: still_blocked}, {entry_key: reason})`` for every
|
|
1870
|
+
``parked`` entry whose OWN park reason is CI-shaped
|
|
1871
|
+
(#1891/#1892/#2347) — a FRESH, single-entry re-derivation of the SAME
|
|
1872
|
+
gate ``coord merge --plan`` computes, taken live, right now, this tick
|
|
1873
|
+
(#2182).
|
|
1874
|
+
|
|
1875
|
+
The second dict (#2347) carries the reason text
|
|
1876
|
+
:func:`coord.merge_queue.entry_gate_status` returned alongside each
|
|
1877
|
+
still-blocked verdict — used ONLY to let :func:`coord.drive_queue.
|
|
1878
|
+
plan_tick` rewrite a still-``parked`` entry's ``last_reason`` when the
|
|
1879
|
+
fresh reading is specifically "GitHub unreachable"
|
|
1880
|
+
(``is_ci_unreadable_reason``) and differs from what is currently stored;
|
|
1881
|
+
see that function's ``live_ci_gate_reason`` parameter. Never consulted
|
|
1882
|
+
to decide whether to resume — that remains the first dict's job alone.
|
|
1845
1883
|
|
|
1846
1884
|
THE GAP THIS CLOSES. On the daemon host — the only machine that ever
|
|
1847
1885
|
runs this tick (``docs/AGENT_OPERATIONS.md``) — ``_fetch_board_view``
|
|
@@ -1887,7 +1925,11 @@ def _fetch_live_ci_gate(
|
|
|
1887
1925
|
have nothing to add — worse, ``coord.state.load_board()`` guards against
|
|
1888
1926
|
being called from a thin client at all (#615).
|
|
1889
1927
|
"""
|
|
1890
|
-
from coord.merge_queue import
|
|
1928
|
+
from coord.merge_queue import ( # noqa: PLC0415
|
|
1929
|
+
is_ci_infra_reason,
|
|
1930
|
+
is_ci_pending_reason,
|
|
1931
|
+
is_ci_unreadable_reason,
|
|
1932
|
+
)
|
|
1891
1933
|
|
|
1892
1934
|
targets = [
|
|
1893
1935
|
e for e in entries
|
|
@@ -1895,15 +1937,16 @@ def _fetch_live_ci_gate(
|
|
|
1895
1937
|
and (
|
|
1896
1938
|
is_ci_pending_reason(getattr(e, "last_reason", "") or "")
|
|
1897
1939
|
or is_ci_infra_reason(getattr(e, "last_reason", "") or "")
|
|
1940
|
+
or is_ci_unreadable_reason(getattr(e, "last_reason", "") or "")
|
|
1898
1941
|
)
|
|
1899
1942
|
]
|
|
1900
1943
|
if not targets:
|
|
1901
|
-
return {}
|
|
1944
|
+
return {}, {}
|
|
1902
1945
|
|
|
1903
1946
|
from coord.board_service import resolve as resolve_board_service # noqa: PLC0415
|
|
1904
1947
|
|
|
1905
1948
|
if resolve_board_service() is not None:
|
|
1906
|
-
return {}
|
|
1949
|
+
return {}, {}
|
|
1907
1950
|
|
|
1908
1951
|
try:
|
|
1909
1952
|
from coord import github_ops as _gh_ops # noqa: PLC0415
|
|
@@ -1919,19 +1962,22 @@ def _fetch_live_ci_gate(
|
|
|
1919
1962
|
entry_key(q.repo_name, q.issue_number): q for q in _mq.load_queue()
|
|
1920
1963
|
}
|
|
1921
1964
|
except Exception: # noqa: BLE001 — see the fail-soft note above
|
|
1922
|
-
return {}
|
|
1965
|
+
return {}, {}
|
|
1923
1966
|
|
|
1924
1967
|
overrides: dict[str, bool] = {}
|
|
1968
|
+
reasons: dict[str, str] = {}
|
|
1925
1969
|
for e in targets:
|
|
1926
1970
|
q = queue_by_key.get(e.key)
|
|
1927
1971
|
if q is None or not q.pr_number:
|
|
1928
1972
|
continue
|
|
1929
1973
|
try:
|
|
1930
|
-
status,
|
|
1974
|
+
status, reason = _mq.entry_gate_status(q, board, cfg, ci_store, _gh_ops)
|
|
1931
1975
|
except Exception: # noqa: BLE001 — leave this one entry to the ceiling
|
|
1932
1976
|
continue
|
|
1933
1977
|
overrides[e.key] = status != _mq.PLAN_READY
|
|
1934
|
-
|
|
1978
|
+
if reason:
|
|
1979
|
+
reasons[e.key] = reason
|
|
1980
|
+
return overrides, reasons
|
|
1935
1981
|
|
|
1936
1982
|
|
|
1937
1983
|
def _fetch_live_blocked_gate(
|
|
@@ -2019,6 +2065,82 @@ def _fetch_live_blocked_gate(
|
|
|
2019
2065
|
return overrides
|
|
2020
2066
|
|
|
2021
2067
|
|
|
2068
|
+
def _fetch_merge_only_ready(
|
|
2069
|
+
entries: list,
|
|
2070
|
+
live_ci_gate: Mapping[str, bool],
|
|
2071
|
+
live_blocked_gate: Mapping[str, bool],
|
|
2072
|
+
) -> dict[str, bool]:
|
|
2073
|
+
"""``{entry_key: True}`` for #2350's Merge-only fast path: every entry
|
|
2074
|
+
THIS tick's live gate re-check just found clear — a `parked` entry with
|
|
2075
|
+
``live_ci_gate[key] is False``, a `blocked` one with
|
|
2076
|
+
``live_blocked_gate[key] is False`` — whose board-recorded pipeline
|
|
2077
|
+
state ALSO shows Test already `passed` and Review already `approve`,
|
|
2078
|
+
meaning Merge was the only gate that was ever still shut.
|
|
2079
|
+
|
|
2080
|
+
Scoped to exactly the entries about to reconcile `resumed` this tick —
|
|
2081
|
+
typically 0-2, the same bound :func:`_fetch_live_ci_gate`/
|
|
2082
|
+
:func:`_fetch_live_blocked_gate` already keep — so this never re-derives
|
|
2083
|
+
a gate reading of its own (that authority stays with *live_ci_gate*/
|
|
2084
|
+
*live_blocked_gate*, computed moments earlier in the same tick): it only
|
|
2085
|
+
adds two board-only reads (:func:`coord.merge_queue.has_approved_review`,
|
|
2086
|
+
:func:`coord.merge_queue.has_passed_test`) against the SAME local board
|
|
2087
|
+
those callers already loaded. Almost always cheap and I/O-free — but not
|
|
2088
|
+
unconditionally: ``has_approved_review`` can fall through to
|
|
2089
|
+
``scan_approved_reviews``'s ``_backfill_branch_patch_id``, which does a
|
|
2090
|
+
live ``gh api compare`` round trip via *_gh_ops* when a stale-SHA review
|
|
2091
|
+
needs its patch-id computed on demand. That path is exception-guarded
|
|
2092
|
+
below and fails closed to the pre-#2350 `resumed` path like everything
|
|
2093
|
+
else here, so it is not unsafe — just not the zero-I/O read the rest of
|
|
2094
|
+
this docstring describes.
|
|
2095
|
+
|
|
2096
|
+
Takes no *config_path*, unlike both siblings: neither board-only read
|
|
2097
|
+
needs a :class:`~coord.config.Config` (no ``ci_store``, no live gate
|
|
2098
|
+
re-derivation), so there is nothing to load here.
|
|
2099
|
+
|
|
2100
|
+
Same fail-open-per-entry, fail-closed-overall contract as its siblings:
|
|
2101
|
+
a key ABSENT from the result (no queue row, an unreadable board or
|
|
2102
|
+
merge queue, any exception) simply takes the pre-#2350 `resumed` path —
|
|
2103
|
+
never a wrongly skipped relaunch.
|
|
2104
|
+
"""
|
|
2105
|
+
targets = [
|
|
2106
|
+
e for e in entries
|
|
2107
|
+
if (e.state == STATE_PARKED and live_ci_gate.get(e.key) is False)
|
|
2108
|
+
or (e.state == STATE_BLOCKED and live_blocked_gate.get(e.key) is False)
|
|
2109
|
+
]
|
|
2110
|
+
if not targets:
|
|
2111
|
+
return {}
|
|
2112
|
+
|
|
2113
|
+
from coord.board_service import resolve as resolve_board_service # noqa: PLC0415
|
|
2114
|
+
|
|
2115
|
+
if resolve_board_service() is not None:
|
|
2116
|
+
return {}
|
|
2117
|
+
|
|
2118
|
+
try:
|
|
2119
|
+
from coord import github_ops as _gh_ops # noqa: PLC0415
|
|
2120
|
+
from coord import merge_queue as _mq # noqa: PLC0415
|
|
2121
|
+
from coord.state import load_board as _load_board # noqa: PLC0415
|
|
2122
|
+
|
|
2123
|
+
board = _load_board()
|
|
2124
|
+
queue_by_key = {
|
|
2125
|
+
entry_key(q.repo_name, q.issue_number): q for q in _mq.load_queue()
|
|
2126
|
+
}
|
|
2127
|
+
except Exception: # noqa: BLE001 — see the fail-soft note above
|
|
2128
|
+
return {}
|
|
2129
|
+
|
|
2130
|
+
ready: dict[str, bool] = {}
|
|
2131
|
+
for e in targets:
|
|
2132
|
+
q = queue_by_key.get(e.key)
|
|
2133
|
+
if q is None:
|
|
2134
|
+
continue
|
|
2135
|
+
try:
|
|
2136
|
+
ready[e.key] = _mq.has_approved_review(
|
|
2137
|
+
q, board, _gh_ops
|
|
2138
|
+
) and _mq.has_passed_test(q, board)
|
|
2139
|
+
except Exception: # noqa: BLE001 — leave this one entry to the ordinary path
|
|
2140
|
+
continue
|
|
2141
|
+
return ready
|
|
2142
|
+
|
|
2143
|
+
|
|
2022
2144
|
def _launch_argv(entry: QueueEntry, config_path: Path | None) -> list[str]:
|
|
2023
2145
|
"""The ``coord drive --tmux`` argv for *entry*.
|
|
2024
2146
|
|
|
@@ -2050,6 +2172,136 @@ def _launch_argv(entry: QueueEntry, config_path: Path | None) -> list[str]:
|
|
|
2050
2172
|
return argv
|
|
2051
2173
|
|
|
2052
2174
|
|
|
2175
|
+
def _merge_only_argv(entry: QueueEntry, config_path: Path | None) -> list[str]:
|
|
2176
|
+
"""The ``coord merge --only <repo>#<issue>`` argv for *entry* (#2350).
|
|
2177
|
+
|
|
2178
|
+
Mirrors :func:`_launch_argv`'s exact shape — same ``coord_argv()`` base,
|
|
2179
|
+
same ``--config`` passthrough — for the direct-merge fast path instead
|
|
2180
|
+
of a fresh drive session. ``--only`` accepts the durable ``repo#issue``
|
|
2181
|
+
form (#1477), which is exactly ``entry.key``, so no assignment_id lookup
|
|
2182
|
+
is needed here.
|
|
2183
|
+
"""
|
|
2184
|
+
from coord.drive import coord_argv # noqa: PLC0415
|
|
2185
|
+
|
|
2186
|
+
argv = coord_argv() + ["merge", "--only", entry.key]
|
|
2187
|
+
if config_path:
|
|
2188
|
+
argv += ["--config", str(config_path)]
|
|
2189
|
+
return argv
|
|
2190
|
+
|
|
2191
|
+
|
|
2192
|
+
def _merge_only_landed(entry: QueueEntry) -> bool:
|
|
2193
|
+
"""Did *entry* actually MERGE, per the merge-queue's own row — the one
|
|
2194
|
+
ground truth ``coord merge --only``'s exit code alone cannot supply.
|
|
2195
|
+
|
|
2196
|
+
#2350: a ``--only`` run against an already-PENDING entry exits 0
|
|
2197
|
+
whether the attempt landed it, left it blocked on a gate, or routed it
|
|
2198
|
+
into a conflict-fix — see ``coord.commands.merge``'s ``--only`` handler,
|
|
2199
|
+
which prints a summary and returns unconditionally once ``process()``
|
|
2200
|
+
has run. Exit code alone is therefore not evidence of a landed merge;
|
|
2201
|
+
the queue row's own resulting state is.
|
|
2202
|
+
"""
|
|
2203
|
+
from coord import merge_queue as _mq # noqa: PLC0415
|
|
2204
|
+
|
|
2205
|
+
try:
|
|
2206
|
+
rows = _mq.load_queue()
|
|
2207
|
+
except Exception: # noqa: BLE001 — unreadable queue is not proof of a landed merge
|
|
2208
|
+
return False
|
|
2209
|
+
for q in rows:
|
|
2210
|
+
if entry_key(q.repo_name, q.issue_number) == entry.key:
|
|
2211
|
+
return q.state == _mq.MERGED
|
|
2212
|
+
return False
|
|
2213
|
+
|
|
2214
|
+
|
|
2215
|
+
def _run_merge_only_candidates(plan: TickPlan, config_path: Path | None) -> None:
|
|
2216
|
+
"""#2350: attempt ``coord merge --only`` directly, THIS tick, for every
|
|
2217
|
+
entry :func:`coord.drive_queue.plan_tick` marked ``merge_only`` — no
|
|
2218
|
+
relaunch, no capacity slot spent. Called AFTER ``_apply_writes(plan)``,
|
|
2219
|
+
same posture as the launch subprocess below it: the entry's real next
|
|
2220
|
+
state is decided from the live outcome of THIS attempt, not from
|
|
2221
|
+
anything ``plan_tick`` could have known when it returned — see
|
|
2222
|
+
:class:`~coord.drive_queue.Reconcile`'s ``merge_only`` outcome for why
|
|
2223
|
+
that Reconcile itself writes nothing.
|
|
2224
|
+
|
|
2225
|
+
On success (the queue's own row now reads ``MERGED`` — see
|
|
2226
|
+
:func:`_merge_only_landed`): writes ``STATE_DONE`` directly, skipping
|
|
2227
|
+
the ``waiting``/relaunch cycle a NEXT tick's ordinary ``landed``
|
|
2228
|
+
re-check would otherwise need, and records a distinct #2350 block-log
|
|
2229
|
+
``resolve`` (:func:`coord.block_log.merge_only_event`) so #2235's corpus
|
|
2230
|
+
can tell "the queue itself finished this" apart from "the state flipped
|
|
2231
|
+
and something else finished it" (``already-landed``/``auto-released``).
|
|
2232
|
+
|
|
2233
|
+
On failure (the gate flipped shut again between the read and the
|
|
2234
|
+
attempt — a genuine race, not the common case; or the attempt itself hit
|
|
2235
|
+
something a single bounded try cannot resolve): falls back to EXACTLY
|
|
2236
|
+
the pre-#2350 ``resumed`` shape — ``STATE_WAITING``, ``attempts`` reset
|
|
2237
|
+
to 0, ``resumes`` bumped for a ``blocked``-origin entry (mirroring
|
|
2238
|
+
``_reconcile_blocked``'s own formula, so the #2230 oscillation ceiling
|
|
2239
|
+
still sees every chance this entry got, fast-path or not) — never worse
|
|
2240
|
+
than the status quo, and never a `coord drive --tmux` launch attempt
|
|
2241
|
+
spent retrying a race this bounded attempt already ruled out.
|
|
2242
|
+
"""
|
|
2243
|
+
if not plan.merge_only:
|
|
2244
|
+
return
|
|
2245
|
+
|
|
2246
|
+
from coord.block_log import merge_only_event, merge_only_fallback_event # noqa: PLC0415
|
|
2247
|
+
from coord.state import update_drive_queue_entry # noqa: PLC0415
|
|
2248
|
+
|
|
2249
|
+
for target in plan.merge_only:
|
|
2250
|
+
argv = _merge_only_argv(target, config_path)
|
|
2251
|
+
try:
|
|
2252
|
+
result = subprocess.run( # noqa: S603 — argv built from coord_argv + typed row
|
|
2253
|
+
argv,
|
|
2254
|
+
capture_output=True,
|
|
2255
|
+
text=True,
|
|
2256
|
+
timeout=_MERGE_ONLY_TIMEOUT_SECONDS,
|
|
2257
|
+
)
|
|
2258
|
+
returncode = result.returncode
|
|
2259
|
+
detail = (result.stderr or result.stdout or "").strip().splitlines()
|
|
2260
|
+
message = detail[-1] if detail else ""
|
|
2261
|
+
except (subprocess.SubprocessError, OSError) as exc:
|
|
2262
|
+
returncode, message = 1, str(exc)
|
|
2263
|
+
|
|
2264
|
+
if returncode == 0 and _merge_only_landed(target):
|
|
2265
|
+
update_drive_queue_entry(
|
|
2266
|
+
target.repo,
|
|
2267
|
+
target.issue,
|
|
2268
|
+
state=STATE_DONE,
|
|
2269
|
+
last_reason=(
|
|
2270
|
+
"merged directly from the tick — Test/Review were "
|
|
2271
|
+
"already satisfied, Merge was the only gate left (#2350)"
|
|
2272
|
+
),
|
|
2273
|
+
session_name=None,
|
|
2274
|
+
)
|
|
2275
|
+
_record_block_log([merge_only_event(target, host=_local_host_id())])
|
|
2276
|
+
click.echo(f"merge-only: {target.key} merged directly from the tick")
|
|
2277
|
+
continue
|
|
2278
|
+
|
|
2279
|
+
# #2350: the race case — fall back to exactly today's `resumed`
|
|
2280
|
+
# shape, never a consumed drive-queue attempt (this was never a
|
|
2281
|
+
# `coord drive --tmux` launch).
|
|
2282
|
+
reason = f"merge-only attempt for {target.key} did not land it this tick"
|
|
2283
|
+
if message:
|
|
2284
|
+
reason += f" ({message})"
|
|
2285
|
+
reason += " — falling back to an ordinary relaunch (#2350)"
|
|
2286
|
+
updates: dict[str, Any] = {
|
|
2287
|
+
"state": STATE_WAITING,
|
|
2288
|
+
"attempts": 0,
|
|
2289
|
+
"last_reason": reason,
|
|
2290
|
+
}
|
|
2291
|
+
if target.state == STATE_BLOCKED:
|
|
2292
|
+
updates["resumes"] = target.resumes + 1
|
|
2293
|
+
update_drive_queue_entry(target.repo, target.issue, **updates)
|
|
2294
|
+
# #2350: this write bypassed `plan.writes()` entirely, so the
|
|
2295
|
+
# `plan_events` call below (keyed off the ORIGINAL plan) can never
|
|
2296
|
+
# see it — without recording it here, the episode `plan_events`
|
|
2297
|
+
# already opened for `target` when it first went `parked`/`blocked`
|
|
2298
|
+
# would never see a matching close.
|
|
2299
|
+
_record_block_log(
|
|
2300
|
+
[merge_only_fallback_event(target, reason=reason, host=_local_host_id())]
|
|
2301
|
+
)
|
|
2302
|
+
click.echo(f"merge-only: {reason}")
|
|
2303
|
+
|
|
2304
|
+
|
|
2053
2305
|
def _run_resume_probe(entry: QueueEntry) -> ProbeResult:
|
|
2054
2306
|
"""Run one entry's ``--resume-when`` probe with a hard timeout.
|
|
2055
2307
|
|
|
@@ -2201,7 +2453,8 @@ def _requeue_command(entry: QueueEntry | None, key: str) -> str:
|
|
|
2201
2453
|
"Update the queue's view of reality and launch nothing (#2110). "
|
|
2202
2454
|
"Every `running` entry is still checked against the board "
|
|
2203
2455
|
"(done/blocked/parked/retry, exactly as a normal tick would), but no "
|
|
2204
|
-
"new `coord drive` is ever started this run
|
|
2456
|
+
"new `coord drive` is ever started this run, and no `coord merge "
|
|
2457
|
+
"--only` fast-path attempt (#2350) runs either — equivalent to "
|
|
2205
2458
|
"`--max-parallel 0`. This is the missing primitive for the "
|
|
2206
2459
|
"stop-the-timer-to-roll-the-fleet sequence: with the timer stopped, "
|
|
2207
2460
|
"nothing reconciles a finished drive's `running` row, and that stale "
|
|
@@ -2337,7 +2590,11 @@ def drive_queue_tick(
|
|
|
2337
2590
|
# on the daemon-host tick could previously be released only by the
|
|
2338
2591
|
# #2158 45-minute ceiling, never by CI actually reporting, because
|
|
2339
2592
|
# this tick's board read never computes a live `merge_plan`).
|
|
2340
|
-
|
|
2593
|
+
# #2347: the reason half — lets a still-parked entry's `last_reason`
|
|
2594
|
+
# be rewritten when the real cause is "GitHub unreachable" rather
|
|
2595
|
+
# than whatever it originally parked on; see `plan_tick`'s
|
|
2596
|
+
# `live_ci_gate_reason` parameter.
|
|
2597
|
+
live_ci_gate, live_ci_gate_reason = _fetch_live_ci_gate(entries, config_path)
|
|
2341
2598
|
|
|
2342
2599
|
# #2230: the same live re-derivation, for RE-EVALUABLE `blocked`
|
|
2343
2600
|
# entries — see `_fetch_live_blocked_gate`'s docstring for the gap
|
|
@@ -2345,6 +2602,15 @@ def drive_queue_tick(
|
|
|
2345
2602
|
# landable for most of that window, and nothing ever looked again).
|
|
2346
2603
|
live_blocked_gate = _fetch_live_blocked_gate(entries, config_path)
|
|
2347
2604
|
|
|
2605
|
+
# #2350: for every entry the two live re-checks above just found
|
|
2606
|
+
# clear, also confirm — from the board's own recorded Test/Review
|
|
2607
|
+
# verdicts — that Merge was the only gate ever still shut, so
|
|
2608
|
+
# `plan_tick` can attempt it directly this tick instead of spending
|
|
2609
|
+
# a relaunch. See `_fetch_merge_only_ready`'s docstring.
|
|
2610
|
+
merge_only_ready = _fetch_merge_only_ready(
|
|
2611
|
+
entries, live_ci_gate, live_blocked_gate
|
|
2612
|
+
)
|
|
2613
|
+
|
|
2348
2614
|
# #2101: release cordons. THIS is the hole the issue names — the
|
|
2349
2615
|
# queue's launcher had zero pause awareness (`coord/drive.py` checks
|
|
2350
2616
|
# pause only when routing a *worker*), so a cordoned host kept getting
|
|
@@ -2384,8 +2650,10 @@ def drive_queue_tick(
|
|
|
2384
2650
|
gate_a_pending=gate_a_pending,
|
|
2385
2651
|
cordons=cordons,
|
|
2386
2652
|
live_ci_gate=live_ci_gate,
|
|
2653
|
+
live_ci_gate_reason=live_ci_gate_reason,
|
|
2387
2654
|
live_blocked_gate=live_blocked_gate,
|
|
2388
2655
|
editable_drift=editable_drift,
|
|
2656
|
+
merge_only_ready=merge_only_ready,
|
|
2389
2657
|
)
|
|
2390
2658
|
|
|
2391
2659
|
if reconcile_only:
|
|
@@ -2404,6 +2672,16 @@ def drive_queue_tick(
|
|
|
2404
2672
|
|
|
2405
2673
|
_apply_writes(plan)
|
|
2406
2674
|
|
|
2675
|
+
# #2350: attempt the direct merges `plan_tick` marked `merge_only`,
|
|
2676
|
+
# right after the rest of the plan's writes have landed. Skipped
|
|
2677
|
+
# under `--reconcile-only` (also forced by `--max-parallel 0`, see
|
|
2678
|
+
# `effective_capacity` above) — that mode's whole contract is
|
|
2679
|
+
# "update queue state, launch nothing", and a live `coord merge
|
|
2680
|
+
# --only` attempt is exactly the external action it promises not to
|
|
2681
|
+
# take, same posture as the launch subprocess further down.
|
|
2682
|
+
if not reconcile_only:
|
|
2683
|
+
_run_merge_only_candidates(plan, config_path)
|
|
2684
|
+
|
|
2407
2685
|
# #2235 Phase 0: record every entry this tick moved INTO or OUT OF
|
|
2408
2686
|
# `blocked`/`parked`, with the reason the queue stated and — for a
|
|
2409
2687
|
# release — what the release itself reveals about the true cause.
|
|
@@ -191,7 +191,8 @@ def _ensure_schema(conn: sqlite3.Connection) -> None:
|
|
|
191
191
|
ci_infra_reruns INTEGER NOT NULL DEFAULT 0,
|
|
192
192
|
ci_stale_reruns INTEGER NOT NULL DEFAULT 0,
|
|
193
193
|
ci_flaky_reruns INTEGER NOT NULL DEFAULT 0,
|
|
194
|
-
ci_flaky_pending TEXT NOT NULL DEFAULT ''
|
|
194
|
+
ci_flaky_pending TEXT NOT NULL DEFAULT '',
|
|
195
|
+
ci_unreadable_reruns INTEGER NOT NULL DEFAULT 0
|
|
195
196
|
);
|
|
196
197
|
|
|
197
198
|
CREATE TABLE IF NOT EXISTS plans (
|
|
@@ -909,6 +910,14 @@ def _migrate_add_columns(conn: sqlite3.Connection) -> None:
|
|
|
909
910
|
# row predating this migration and for a non-stream-json / PTY
|
|
910
911
|
# worker whose log carries no such field.
|
|
911
912
|
"ALTER TABLE assignments ADD COLUMN stop_reason TEXT",
|
|
913
|
+
# #2347: count of automatic checks `merge_queue.process()` has made
|
|
914
|
+
# against this entry's CURRENT streak of bare check-list FETCH
|
|
915
|
+
# failures (GitHub unreachable, not a real CI verdict) — see
|
|
916
|
+
# `coord.merge_queue.MAX_CI_UNREADABLE_RERUNS` and
|
|
917
|
+
# `QueuedMerge.ci_unreadable_reruns`'s docstring. 0 for every row
|
|
918
|
+
# predating this column, same as the column's own default for a
|
|
919
|
+
# freshly-enqueued entry.
|
|
920
|
+
"ALTER TABLE merge_queue ADD COLUMN ci_unreadable_reruns INTEGER NOT NULL DEFAULT 0",
|
|
912
921
|
]
|
|
913
922
|
for sql in migrations:
|
|
914
923
|
try:
|