code-coordinator 0.5.167__tar.gz → 0.5.169__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.167 → code_coordinator-0.5.169}/PKG-INFO +1 -1
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/drive.py +73 -1
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_drive.py +145 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tui/src/app/events.rs +108 -36
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tui/src/app/fixtures.rs +4 -2
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tui/src/app/mod.rs +24 -55
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tui/src/app/pipeline.rs +972 -278
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tui/src/app/render.rs +35 -5
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tui/src/app/reports.rs +12 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tui/src/app/tests.rs +534 -1242
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tui/src/app/types.rs +80 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/.github/workflows/acceptance-web.yml +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/.github/workflows/release-tui.yml +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/.gitignore +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/CLAUDE.md +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/GOAL.md +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/LICENSE +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/MANIFEST.in +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/README.md +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/__init__.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/agent.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/audit.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/block_log.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/board_bool_guard.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/board_service.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/brain.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/claim.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/cli.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/client.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/comments.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/config.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dao.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/.gitignore +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/components.json +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/dist/assets/Gallery-BoKs3mpY.js +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/dist/assets/Terminal-CEsP08iX.js +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/dist/assets/index-CDHPlB6k.js +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/dist/index.html +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/dist/sw.js +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/eslint.config.js +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/index.html +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/package-lock.json +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/package.json +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/playwright.config.ts +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/postcss.config.js +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/src/App.tsx +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/src/api/client.ts +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/src/api/generated.ts +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/src/index.css +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/src/main.tsx +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/src/test-setup.ts +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/tailwind.config.js +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/tsconfig.json +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/tsconfig.node.json +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dashboard/webapp/vite.config.ts +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/db.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/deps.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/events.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/filelock.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/freshness.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/gates.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/goal.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/health/context.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/health/models.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/health/render.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/health/units.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/hooks.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/interactive.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/models.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/network.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/notify.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/openapi.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/parentage.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/plans.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/progress.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/release_window.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/reports.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/review.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/smoke.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/split_work.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/state.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/test_author.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/test_report.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/usage.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/install-agent.sh +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/pyproject.toml +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/setup.cfg +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/__init__.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/acceptance/ms-33/audit_1039.rs +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/acceptance/ms-33/contract.md +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/acceptance/ms-33/manifest.yml +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/acceptance/ms-38/contract.md +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/acceptance/ms-38/manifest.yml +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/acceptance/ms-65/contract.md +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/acceptance/ms-65/manifest.yml +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/conftest.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_config.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_db.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_events.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_init.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_models.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_network.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_no_direct_gh_calls.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_review.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_session.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_split.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_state.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tui/Cargo.lock +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tui/Cargo.toml +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tui/cargo-config-local-quadraui.toml.example +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tui/src/app/audit.rs +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tui/src/app/chat.rs +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tui/src/app/data.rs +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tui/src/app/dialogs.rs +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tui/src/app/doc_tabs.rs +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tui/src/app/drive.rs +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tui/src/app/drive_queue.rs +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tui/src/app/escalation.rs +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tui/src/app/fleet_health.rs +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tui/src/app/fleet_sessions.rs +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tui/src/app/fleet_terminals.rs +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tui/src/app/format.rs +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tui/src/app/milestone_dag.rs +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tui/src/app/msv.rs +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tui/src/app/plans.rs +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tui/src/app/sessions.rs +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tui/src/app/settings_ui.rs +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tui/src/app/sidebar.rs +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tui/src/app/terminal.rs +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tui/src/app/workspace.rs +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tui/src/bin/gtk.rs +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tui/src/commands.rs +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tui/src/lib.rs +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tui/src/main.rs +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tui/src/settings.rs +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tui/tests/acceptance.rs +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tui/tests/cli.rs +0 -0
- {code_coordinator-0.5.167 → code_coordinator-0.5.169}/tui/tests/fixtures/board_sample.json +0 -0
|
@@ -1254,6 +1254,30 @@ class MergeVerifier(Protocol):
|
|
|
1254
1254
|
def branch_head_sha(self, state: IssueState) -> str | None: ...
|
|
1255
1255
|
|
|
1256
1256
|
|
|
1257
|
+
def _remote_matches_repo(remote_url: str, repo_github: str) -> bool:
|
|
1258
|
+
"""Loosely compare a ``git remote get-url origin`` URL against the
|
|
1259
|
+
``owner/repo`` GitHub identifier it should point at (#2437).
|
|
1260
|
+
|
|
1261
|
+
Tolerant of the URL shapes git actually produces: ``https://github.com/
|
|
1262
|
+
owner/repo(.git)``, ``git@github.com:owner/repo(.git)``, and
|
|
1263
|
+
``ssh://git@github.com/owner/repo(.git)``. Anything else (a bare path, a
|
|
1264
|
+
non-GitHub host) simply won't match — which is the correct, fail-closed
|
|
1265
|
+
outcome: this is a sanity check that the checkout points at the expected
|
|
1266
|
+
project, not a general-purpose git URL parser.
|
|
1267
|
+
"""
|
|
1268
|
+
url = remote_url.strip()
|
|
1269
|
+
if url.endswith(".git"):
|
|
1270
|
+
url = url[:-4]
|
|
1271
|
+
if "://" in url:
|
|
1272
|
+
_scheme, _, rest = url.partition("://")
|
|
1273
|
+
_host, _, path = rest.partition("/")
|
|
1274
|
+
url = path
|
|
1275
|
+
elif "@" in url and ":" in url:
|
|
1276
|
+
_user_host, _, path = url.partition(":")
|
|
1277
|
+
url = path
|
|
1278
|
+
return url.strip("/").lower() == repo_github.strip("/").lower()
|
|
1279
|
+
|
|
1280
|
+
|
|
1257
1281
|
@dataclass
|
|
1258
1282
|
class GitMergeVerifier:
|
|
1259
1283
|
"""Real implementation: ``git`` for commits, ``gh`` for merge state.
|
|
@@ -1264,12 +1288,60 @@ class GitMergeVerifier:
|
|
|
1264
1288
|
|
|
1265
1289
|
repo_path: str = ""
|
|
1266
1290
|
warn: Callable[[str], None] = lambda msg: None
|
|
1291
|
+
# #2437: memoizes which (base, reason) pairs have already been warned
|
|
1292
|
+
# about, so a checkout that stays broken across many drive-loop polls
|
|
1293
|
+
# gets exactly one loud warning instead of one per poll. Keyed on the
|
|
1294
|
+
# reason text too, so a checkout that later fails a *different* check
|
|
1295
|
+
# (e.g. it grows a valid `.git` but the wrong `origin`) still warns once
|
|
1296
|
+
# for the new problem.
|
|
1297
|
+
_warned: set[tuple[str, str]] = field(default_factory=set, init=False, repr=False)
|
|
1267
1298
|
|
|
1268
1299
|
def _base(self, state: IssueState) -> Path | None:
|
|
1269
1300
|
base = Path(self.repo_path).expanduser() if self.repo_path else (
|
|
1270
1301
|
Path.home() / "src" / state.repo
|
|
1271
1302
|
)
|
|
1272
|
-
|
|
1303
|
+
if not (base / ".git").exists():
|
|
1304
|
+
return None
|
|
1305
|
+
reason = self._unusable_reason(base, state)
|
|
1306
|
+
if reason is None:
|
|
1307
|
+
return base
|
|
1308
|
+
key = (str(base), reason)
|
|
1309
|
+
if key not in self._warned:
|
|
1310
|
+
self._warned.add(key)
|
|
1311
|
+
self.warn(
|
|
1312
|
+
f"local checkout {base} cannot be used for merge "
|
|
1313
|
+
f"verification of {state.repo} — {reason} (#2437). Merge "
|
|
1314
|
+
"verification will keep returning \"could not verify\" "
|
|
1315
|
+
"(never a false empty-branch) until this is fixed: replace "
|
|
1316
|
+
"it with a real clone of the repo, or point `coord drive` "
|
|
1317
|
+
"at one via --repo-path."
|
|
1318
|
+
)
|
|
1319
|
+
return None
|
|
1320
|
+
|
|
1321
|
+
def _unusable_reason(self, base: Path, state: IssueState) -> str | None:
|
|
1322
|
+
"""Why *base* can't be trusted for merge verification, or ``None`` if
|
|
1323
|
+
it can.
|
|
1324
|
+
|
|
1325
|
+
A ``.git`` directory existing is necessary but not sufficient
|
|
1326
|
+
(claude-coordinator#2437): an interrupted/stub `git init` leaves a
|
|
1327
|
+
`.git` directory with no `HEAD`/`objects`/`refs`, and a checkout of
|
|
1328
|
+
the wrong project entirely leaves a perfectly valid `.git` that
|
|
1329
|
+
still can't answer questions about *this* repo. Both must be caught
|
|
1330
|
+
here rather than surfacing as an unexplained, indefinitely-retried
|
|
1331
|
+
``None`` from :meth:`branch_has_commits`.
|
|
1332
|
+
"""
|
|
1333
|
+
if self._git(base, "rev-parse", "--is-inside-work-tree").returncode != 0:
|
|
1334
|
+
return "not a usable git working tree (`git rev-parse --is-inside-work-tree` failed)"
|
|
1335
|
+
remote = self._git(base, "remote", "get-url", "origin")
|
|
1336
|
+
url = (remote.stdout or "").strip()
|
|
1337
|
+
if remote.returncode != 0 or not url:
|
|
1338
|
+
return "has no 'origin' remote configured"
|
|
1339
|
+
if state.repo_github and not _remote_matches_repo(url, state.repo_github):
|
|
1340
|
+
return (
|
|
1341
|
+
f"'origin' remote ({url!r}) does not match the expected "
|
|
1342
|
+
f"repo {state.repo_github!r}"
|
|
1343
|
+
)
|
|
1344
|
+
return None
|
|
1273
1345
|
|
|
1274
1346
|
@staticmethod
|
|
1275
1347
|
def _git(base: Path, *args: str) -> subprocess.CompletedProcess[str]:
|
|
@@ -53,6 +53,7 @@ from coord.drive import (
|
|
|
53
53
|
GitMergeVerifier,
|
|
54
54
|
LockBusy,
|
|
55
55
|
OracleDecision,
|
|
56
|
+
_remote_matches_repo,
|
|
56
57
|
coord_argv,
|
|
57
58
|
decide,
|
|
58
59
|
preflight,
|
|
@@ -4268,6 +4269,12 @@ def recorded_git(monkeypatch):
|
|
|
4268
4269
|
``subprocess.run`` attribute — patching it once via ``coord.drive.
|
|
4269
4270
|
subprocess.run`` patches it for both call sites, and a single
|
|
4270
4271
|
``scripted`` dict drives both the git and gh sides of a scenario.
|
|
4272
|
+
|
|
4273
|
+
#2437's ``_base()`` checkout-validation probes (``rev-parse
|
|
4274
|
+
--is-inside-work-tree`` and ``remote get-url origin``) default here to
|
|
4275
|
+
"yes, a real checkout of john/claude-coordinator" — the shape almost
|
|
4276
|
+
every test in this file wants — so only the handful of tests that
|
|
4277
|
+
exercise the validation itself need to override them.
|
|
4271
4278
|
"""
|
|
4272
4279
|
calls: list[list[str]] = []
|
|
4273
4280
|
scripted: dict[tuple[str, ...], tuple[int, str]] = {}
|
|
@@ -4277,6 +4284,12 @@ def recorded_git(monkeypatch):
|
|
|
4277
4284
|
for needle, (rc, out) in scripted.items():
|
|
4278
4285
|
if all(token in argv for token in needle):
|
|
4279
4286
|
return subprocess.CompletedProcess(argv, rc, out, "")
|
|
4287
|
+
if "rev-parse" in argv and "--is-inside-work-tree" in argv:
|
|
4288
|
+
return subprocess.CompletedProcess(argv, 0, "true\n", "")
|
|
4289
|
+
if "remote" in argv and "get-url" in argv:
|
|
4290
|
+
return subprocess.CompletedProcess(
|
|
4291
|
+
argv, 0, "https://github.com/john/claude-coordinator.git\n", ""
|
|
4292
|
+
)
|
|
4280
4293
|
return subprocess.CompletedProcess(argv, 0, "", "")
|
|
4281
4294
|
|
|
4282
4295
|
monkeypatch.setattr("coord.drive.subprocess.run", fake_run)
|
|
@@ -4337,6 +4350,7 @@ def test_verify_merged_falls_back_to_cherry_when_gh_finds_no_pr(
|
|
|
4337
4350
|
(tmp_path / ".git").mkdir()
|
|
4338
4351
|
scripted[("pr", "view")] = (1, "")
|
|
4339
4352
|
scripted[("cherry",)] = (0, "- abc\n")
|
|
4353
|
+
scripted[("remote", "get-url", "origin")] = (0, "git@github.com:john/x.git\n")
|
|
4340
4354
|
s = state(work_branch="b", repo_github="john/x")
|
|
4341
4355
|
assert GitMergeVerifier(repo_path=str(tmp_path)).verify_merged(s) is True
|
|
4342
4356
|
assert any("cherry" in " ".join(c) for c in calls)
|
|
@@ -4431,6 +4445,137 @@ def test_branch_has_commits_is_false_with_no_branch(tmp_path):
|
|
|
4431
4445
|
assert GitMergeVerifier(repo_path=str(tmp_path)).branch_has_commits(state()) is False
|
|
4432
4446
|
|
|
4433
4447
|
|
|
4448
|
+
# ═══════════════════════════════════════════════════════════════════════════
|
|
4449
|
+
# GitMergeVerifier._base — checkout validation (#2437)
|
|
4450
|
+
#
|
|
4451
|
+
# A `.git` directory existing is necessary but not sufficient: an
|
|
4452
|
+
# interrupted/stub `git init` (bare `.git/info/exclude`, no `HEAD`/
|
|
4453
|
+
# `objects`/`refs`/`config` — the exact claude-coordinator#2286 incident)
|
|
4454
|
+
# satisfies `(base / ".git").exists()` while being completely unusable for
|
|
4455
|
+
# `git fetch`. `_base()` must actually probe the checkout and warn loudly
|
|
4456
|
+
# (not just silently return `None`) the first time it finds one unusable.
|
|
4457
|
+
# ═══════════════════════════════════════════════════════════════════════════
|
|
4458
|
+
|
|
4459
|
+
|
|
4460
|
+
def test_base_rejects_a_stub_git_dir_that_is_not_a_real_work_tree(
|
|
4461
|
+
recorded_git, tmp_path
|
|
4462
|
+
):
|
|
4463
|
+
"""The exact #2437 incident: `.git` exists (so the old check passed) but
|
|
4464
|
+
it's not an actual git repository — `rev-parse --is-inside-work-tree`
|
|
4465
|
+
fails. Must be treated the same as no checkout at all: `None`, plus a
|
|
4466
|
+
loud warning naming the reason, not a silent retry-forever."""
|
|
4467
|
+
_calls, scripted = recorded_git
|
|
4468
|
+
(tmp_path / ".git").mkdir()
|
|
4469
|
+
scripted[("rev-parse", "--is-inside-work-tree")] = (128, "")
|
|
4470
|
+
warned: list[str] = []
|
|
4471
|
+
verifier = GitMergeVerifier(repo_path=str(tmp_path), warn=warned.append)
|
|
4472
|
+
s = state(work_branch="b", repo_default_branch="main")
|
|
4473
|
+
assert verifier.branch_has_commits(s) is None
|
|
4474
|
+
assert any("not a usable git working tree" in w for w in warned), warned
|
|
4475
|
+
|
|
4476
|
+
|
|
4477
|
+
def test_base_rejects_a_checkout_with_no_origin_remote(recorded_git, tmp_path):
|
|
4478
|
+
_calls, scripted = recorded_git
|
|
4479
|
+
(tmp_path / ".git").mkdir()
|
|
4480
|
+
scripted[("remote", "get-url", "origin")] = (2, "")
|
|
4481
|
+
warned: list[str] = []
|
|
4482
|
+
verifier = GitMergeVerifier(repo_path=str(tmp_path), warn=warned.append)
|
|
4483
|
+
s = state(work_branch="b", repo_default_branch="main")
|
|
4484
|
+
assert verifier.branch_has_commits(s) is None
|
|
4485
|
+
assert any("no 'origin' remote configured" in w for w in warned), warned
|
|
4486
|
+
|
|
4487
|
+
|
|
4488
|
+
def test_base_rejects_a_checkout_of_the_wrong_repo(recorded_git, tmp_path):
|
|
4489
|
+
"""A perfectly valid checkout — just of the wrong project. Must not be
|
|
4490
|
+
trusted to answer merge-verification questions about *this* repo."""
|
|
4491
|
+
_calls, scripted = recorded_git
|
|
4492
|
+
(tmp_path / ".git").mkdir()
|
|
4493
|
+
scripted[("remote", "get-url", "origin")] = (
|
|
4494
|
+
0,
|
|
4495
|
+
"https://github.com/john/some-other-repo.git\n",
|
|
4496
|
+
)
|
|
4497
|
+
warned: list[str] = []
|
|
4498
|
+
verifier = GitMergeVerifier(repo_path=str(tmp_path), warn=warned.append)
|
|
4499
|
+
s = state(work_branch="b", repo_default_branch="main")
|
|
4500
|
+
assert verifier.branch_has_commits(s) is None
|
|
4501
|
+
assert any(
|
|
4502
|
+
"does not match the expected repo" in w and "john/claude-coordinator" in w
|
|
4503
|
+
for w in warned
|
|
4504
|
+
), warned
|
|
4505
|
+
|
|
4506
|
+
|
|
4507
|
+
def test_base_skips_the_repo_match_check_when_repo_github_is_unset(
|
|
4508
|
+
recorded_git, tmp_path
|
|
4509
|
+
):
|
|
4510
|
+
"""Some callers (the ``verify_merged`` tests above) legitimately don't
|
|
4511
|
+
know the GitHub identifier yet — the match check must not fire and turn
|
|
4512
|
+
an otherwise-valid checkout into a false ``None``."""
|
|
4513
|
+
_calls, scripted = recorded_git
|
|
4514
|
+
(tmp_path / ".git").mkdir()
|
|
4515
|
+
scripted[("remote", "get-url", "origin")] = (
|
|
4516
|
+
0,
|
|
4517
|
+
"https://github.com/someone/unrelated.git\n",
|
|
4518
|
+
)
|
|
4519
|
+
scripted[("rev-list",)] = (0, "2\n")
|
|
4520
|
+
s = state(work_branch="b", repo_github="", repo_default_branch="main")
|
|
4521
|
+
assert GitMergeVerifier(repo_path=str(tmp_path)).branch_has_commits(s) is True
|
|
4522
|
+
|
|
4523
|
+
|
|
4524
|
+
def test_base_warns_only_once_for_the_same_broken_checkout(recorded_git, tmp_path):
|
|
4525
|
+
"""A checkout that's been broken for days (the #2437 incident: 3 days, 6
|
|
4526
|
+
drive-queue attempts) must warn once, not once per poll — the whole
|
|
4527
|
+
point is a signal an operator can act on, not log spam that gets
|
|
4528
|
+
filtered out."""
|
|
4529
|
+
_calls, scripted = recorded_git
|
|
4530
|
+
(tmp_path / ".git").mkdir()
|
|
4531
|
+
scripted[("rev-parse", "--is-inside-work-tree")] = (128, "")
|
|
4532
|
+
warned: list[str] = []
|
|
4533
|
+
verifier = GitMergeVerifier(repo_path=str(tmp_path), warn=warned.append)
|
|
4534
|
+
s = state(work_branch="b", repo_default_branch="main")
|
|
4535
|
+
for _ in range(6):
|
|
4536
|
+
assert verifier.branch_has_commits(s) is None
|
|
4537
|
+
assert len(warned) == 1, warned
|
|
4538
|
+
|
|
4539
|
+
|
|
4540
|
+
def test_base_accepts_a_genuinely_valid_checkout(recorded_git, tmp_path):
|
|
4541
|
+
"""The happy path: a real work tree, an `origin` matching the expected
|
|
4542
|
+
repo — no warning, and verification proceeds as normal."""
|
|
4543
|
+
_calls, scripted = recorded_git
|
|
4544
|
+
(tmp_path / ".git").mkdir()
|
|
4545
|
+
scripted[("rev-list",)] = (0, "1\n")
|
|
4546
|
+
warned: list[str] = []
|
|
4547
|
+
verifier = GitMergeVerifier(repo_path=str(tmp_path), warn=warned.append)
|
|
4548
|
+
s = state(work_branch="b", repo_default_branch="main")
|
|
4549
|
+
assert verifier.branch_has_commits(s) is True
|
|
4550
|
+
assert warned == []
|
|
4551
|
+
|
|
4552
|
+
|
|
4553
|
+
@pytest.mark.parametrize(
|
|
4554
|
+
"remote_url",
|
|
4555
|
+
[
|
|
4556
|
+
"https://github.com/john/claude-coordinator.git",
|
|
4557
|
+
"https://github.com/john/claude-coordinator",
|
|
4558
|
+
"git@github.com:john/claude-coordinator.git",
|
|
4559
|
+
"git@github.com:john/claude-coordinator",
|
|
4560
|
+
"ssh://git@github.com/john/claude-coordinator.git",
|
|
4561
|
+
],
|
|
4562
|
+
)
|
|
4563
|
+
def test_remote_matches_repo_accepts_every_url_shape_git_produces(remote_url):
|
|
4564
|
+
assert _remote_matches_repo(remote_url, "john/claude-coordinator") is True
|
|
4565
|
+
|
|
4566
|
+
|
|
4567
|
+
@pytest.mark.parametrize(
|
|
4568
|
+
"remote_url",
|
|
4569
|
+
[
|
|
4570
|
+
"https://github.com/john/some-other-repo.git",
|
|
4571
|
+
"git@github.com:someone-else/claude-coordinator.git",
|
|
4572
|
+
"",
|
|
4573
|
+
],
|
|
4574
|
+
)
|
|
4575
|
+
def test_remote_matches_repo_rejects_a_mismatch(remote_url):
|
|
4576
|
+
assert _remote_matches_repo(remote_url, "john/claude-coordinator") is False
|
|
4577
|
+
|
|
4578
|
+
|
|
4434
4579
|
# ═══════════════════════════════════════════════════════════════════════════
|
|
4435
4580
|
# locking
|
|
4436
4581
|
# ═══════════════════════════════════════════════════════════════════════════
|
|
@@ -2240,6 +2240,70 @@ impl CoordApp {
|
|
|
2240
2240
|
needs_redraw = true;
|
|
2241
2241
|
}
|
|
2242
2242
|
|
|
2243
|
+
// ── #2405: the Pipeline Completed grid's keymap ──────
|
|
2244
|
+
// Placed here, beside the Reports typing block and
|
|
2245
|
+
// ahead of the global `q`/Esc catch-all, for the same
|
|
2246
|
+
// reason: while the free-text `Window end` control has
|
|
2247
|
+
// focus every printable character (including `q`)
|
|
2248
|
+
// belongs to the value being typed. Every arm is guarded
|
|
2249
|
+
// on the Completed tab being active, so the rest of the
|
|
2250
|
+
// Pipeline keymap is untouched on all five other tabs.
|
|
2251
|
+
//
|
|
2252
|
+
// ←/→ step the focused choice control rather than
|
|
2253
|
+
// cycling tabs, matching the Reports panel; `h`/`l`
|
|
2254
|
+
// still cycle tabs, so nothing becomes unreachable.
|
|
2255
|
+
Key::Named(NamedKey::Escape)
|
|
2256
|
+
if self.active_view == SidebarView::Pipeline
|
|
2257
|
+
&& self.pipeline_detail_tab == PipelineDetailTab::Completed
|
|
2258
|
+
&& self.completed_grid.detail.is_some() =>
|
|
2259
|
+
{
|
|
2260
|
+
self.completed_close_detail();
|
|
2261
|
+
needs_redraw = true;
|
|
2262
|
+
}
|
|
2263
|
+
Key::Named(NamedKey::Tab)
|
|
2264
|
+
if self.active_view == SidebarView::Pipeline
|
|
2265
|
+
&& self.pipeline_detail_tab == PipelineDetailTab::Completed
|
|
2266
|
+
&& !self.pipeline_search.focused =>
|
|
2267
|
+
{
|
|
2268
|
+
self.completed_grid.field_sel = (self.completed_grid.field_sel + 1)
|
|
2269
|
+
% CoordApp::COMPLETED_FIELD_COUNT;
|
|
2270
|
+
needs_redraw = true;
|
|
2271
|
+
}
|
|
2272
|
+
Key::Named(NamedKey::Right)
|
|
2273
|
+
if self.active_view == SidebarView::Pipeline
|
|
2274
|
+
&& self.pipeline_detail_tab == PipelineDetailTab::Completed
|
|
2275
|
+
&& !self.pipeline_search.focused =>
|
|
2276
|
+
{
|
|
2277
|
+
self.completed_step_choice(true);
|
|
2278
|
+
needs_redraw = true;
|
|
2279
|
+
}
|
|
2280
|
+
Key::Named(NamedKey::Left)
|
|
2281
|
+
if self.active_view == SidebarView::Pipeline
|
|
2282
|
+
&& self.pipeline_detail_tab == PipelineDetailTab::Completed
|
|
2283
|
+
&& !self.pipeline_search.focused =>
|
|
2284
|
+
{
|
|
2285
|
+
self.completed_step_choice(false);
|
|
2286
|
+
needs_redraw = true;
|
|
2287
|
+
}
|
|
2288
|
+
Key::Named(NamedKey::Backspace)
|
|
2289
|
+
if self.active_view == SidebarView::Pipeline
|
|
2290
|
+
&& self.pipeline_detail_tab == PipelineDetailTab::Completed
|
|
2291
|
+
&& self.completed_focus_is_text()
|
|
2292
|
+
&& !self.pipeline_search.focused =>
|
|
2293
|
+
{
|
|
2294
|
+
self.completed_text_backspace();
|
|
2295
|
+
needs_redraw = true;
|
|
2296
|
+
}
|
|
2297
|
+
Key::Char(ch)
|
|
2298
|
+
if self.active_view == SidebarView::Pipeline
|
|
2299
|
+
&& self.pipeline_detail_tab == PipelineDetailTab::Completed
|
|
2300
|
+
&& self.completed_focus_is_text()
|
|
2301
|
+
&& !self.pipeline_search.focused =>
|
|
2302
|
+
{
|
|
2303
|
+
self.completed_text_insert(*ch);
|
|
2304
|
+
needs_redraw = true;
|
|
2305
|
+
}
|
|
2306
|
+
|
|
2243
2307
|
// ── Watch overlay: control keys ─────────────────────
|
|
2244
2308
|
// 'b' opens the ChatController guidance overlay. When the
|
|
2245
2309
|
// overlay is open, ALL events are intercepted earlier in
|
|
@@ -2797,37 +2861,6 @@ impl CoordApp {
|
|
|
2797
2861
|
needs_redraw = true;
|
|
2798
2862
|
}
|
|
2799
2863
|
|
|
2800
|
-
// ── #728: Done section extend-range (→) ─────────────
|
|
2801
|
-
// `→` while the Pipeline Done section is focused cycles
|
|
2802
|
-
// the time window: H2 → H24 → D7 → All → H2.
|
|
2803
|
-
Key::Named(NamedKey::Right)
|
|
2804
|
-
if self.active_view == SidebarView::Pipeline
|
|
2805
|
-
&& self.is_done_section_active()
|
|
2806
|
-
&& !self.pipeline_search.focused =>
|
|
2807
|
-
{
|
|
2808
|
-
self.done_window = self.done_window.next();
|
|
2809
|
-
self.rebuild_pipeline_sidebar(None);
|
|
2810
|
-
// After rebuild the SidebarSystem starts with
|
|
2811
|
-
// active_section() == None, so the default_select block
|
|
2812
|
-
// in rebuild_pipeline_sidebar selects the FIRST section
|
|
2813
|
-
// (usually in-progress) and the restore loop only re-
|
|
2814
|
-
// focuses Done if pipeline_sel pointed at a Done row.
|
|
2815
|
-
// When the user is on the Done section HEADER (no issue
|
|
2816
|
-
// row selected) pipeline_sel is None, so the restore is
|
|
2817
|
-
// skipped and Done loses focus. Re-assert Done focus
|
|
2818
|
-
// unconditionally here so subsequent → presses still
|
|
2819
|
-
// fire the extend-range handler.
|
|
2820
|
-
if let Some(done_idx) = self
|
|
2821
|
-
.pipeline_state_section_names
|
|
2822
|
-
.iter()
|
|
2823
|
-
.position(|&k| k == "done")
|
|
2824
|
-
.map(|i| i + 1)
|
|
2825
|
-
{
|
|
2826
|
-
self.pipeline_sidebar.set_active_section(Some(done_idx));
|
|
2827
|
-
}
|
|
2828
|
-
needs_redraw = true;
|
|
2829
|
-
}
|
|
2830
|
-
|
|
2831
2864
|
// ── Kanban keyboard nav (#638) ───────────────────────
|
|
2832
2865
|
Key::Char('j') | Key::Named(NamedKey::Down)
|
|
2833
2866
|
if self.active_view == SidebarView::Kanban =>
|
|
@@ -3388,16 +3421,19 @@ impl CoordApp {
|
|
|
3388
3421
|
}
|
|
3389
3422
|
|
|
3390
3423
|
// ── h/l — cycle Pipeline detail tabs ─────────────────
|
|
3391
|
-
// #818 order
|
|
3424
|
+
// #818 order, plus #2405's Completed grid last:
|
|
3425
|
+
// Overview → Issue → Log → Summary → Terminal →
|
|
3426
|
+
// Completed → Overview …
|
|
3392
3427
|
Key::Char('h') | Key::Named(NamedKey::Left)
|
|
3393
3428
|
if self.active_view == SidebarView::Pipeline =>
|
|
3394
3429
|
{
|
|
3395
3430
|
let next = match self.pipeline_detail_tab {
|
|
3396
|
-
PipelineDetailTab::Overview => PipelineDetailTab::
|
|
3431
|
+
PipelineDetailTab::Overview => PipelineDetailTab::Completed,
|
|
3397
3432
|
PipelineDetailTab::Issue => PipelineDetailTab::Overview,
|
|
3398
3433
|
PipelineDetailTab::Log => PipelineDetailTab::Issue,
|
|
3399
3434
|
PipelineDetailTab::Summary => PipelineDetailTab::Log,
|
|
3400
3435
|
PipelineDetailTab::Terminal => PipelineDetailTab::Summary,
|
|
3436
|
+
PipelineDetailTab::Completed => PipelineDetailTab::Terminal,
|
|
3401
3437
|
};
|
|
3402
3438
|
// Release PTY focus whenever the user navigates away
|
|
3403
3439
|
// from the Terminal tab.
|
|
@@ -3432,7 +3468,8 @@ impl CoordApp {
|
|
|
3432
3468
|
PipelineDetailTab::Issue => PipelineDetailTab::Log,
|
|
3433
3469
|
PipelineDetailTab::Log => PipelineDetailTab::Summary,
|
|
3434
3470
|
PipelineDetailTab::Summary => PipelineDetailTab::Terminal,
|
|
3435
|
-
PipelineDetailTab::Terminal => PipelineDetailTab::
|
|
3471
|
+
PipelineDetailTab::Terminal => PipelineDetailTab::Completed,
|
|
3472
|
+
PipelineDetailTab::Completed => PipelineDetailTab::Overview,
|
|
3436
3473
|
};
|
|
3437
3474
|
// Release PTY focus whenever the user navigates away
|
|
3438
3475
|
// from the Terminal tab.
|
|
@@ -6053,13 +6090,15 @@ impl CoordApp {
|
|
|
6053
6090
|
if let Some(idx) =
|
|
6054
6091
|
hit_tab_index_from_labels(&labels, main_b.x, pos.x, tab_scroll)
|
|
6055
6092
|
{
|
|
6056
|
-
// #818: Overview / Issue / Log / Summary / Terminal
|
|
6093
|
+
// #818: Overview / Issue / Log / Summary / Terminal,
|
|
6094
|
+
// plus #2405's Completed grid at index 5.
|
|
6057
6095
|
let new_tab = match idx {
|
|
6058
6096
|
0 => PipelineDetailTab::Overview,
|
|
6059
6097
|
1 => PipelineDetailTab::Issue,
|
|
6060
6098
|
2 => PipelineDetailTab::Log,
|
|
6061
6099
|
3 => PipelineDetailTab::Summary,
|
|
6062
|
-
|
|
6100
|
+
4 => PipelineDetailTab::Terminal,
|
|
6101
|
+
_ => PipelineDetailTab::Completed,
|
|
6063
6102
|
};
|
|
6064
6103
|
if new_tab != self.pipeline_detail_tab {
|
|
6065
6104
|
if new_tab != PipelineDetailTab::Terminal {
|
|
@@ -6084,6 +6123,15 @@ impl CoordApp {
|
|
|
6084
6123
|
// is rendered into the content area (main_b minus tab row), so
|
|
6085
6124
|
// we must hit-test against that rect — not main_b directly, or
|
|
6086
6125
|
// the y-coordinates are off by tab_h.
|
|
6126
|
+
if self.pipeline_detail_tab == PipelineDetailTab::Completed {
|
|
6127
|
+
let content_rect = Rect::new(
|
|
6128
|
+
main_b.x,
|
|
6129
|
+
main_b.y + tab_h,
|
|
6130
|
+
main_b.width,
|
|
6131
|
+
(main_b.height - tab_h).max(0.0),
|
|
6132
|
+
);
|
|
6133
|
+
return self.completed_main_click(pos, content_rect, lh);
|
|
6134
|
+
}
|
|
6087
6135
|
if self.pipeline_detail_tab == PipelineDetailTab::Overview {
|
|
6088
6136
|
if let Some(view) = self.build_pipeline_widget() {
|
|
6089
6137
|
let content_rect = Rect::new(
|
|
@@ -6774,6 +6822,30 @@ impl CoordApp {
|
|
|
6774
6822
|
(self.pipeline_detail_scroll + 1).min(max);
|
|
6775
6823
|
}
|
|
6776
6824
|
}
|
|
6825
|
+
PipelineDetailTab::Completed => {
|
|
6826
|
+
// #2405: the grid scrolls against its own painted
|
|
6827
|
+
// viewport, not the whole main panel's row count —
|
|
6828
|
+
// the control row sits above it (the exact gap #1910
|
|
6829
|
+
// fixed for the Reports table).
|
|
6830
|
+
if self.completed_grid.detail.is_some() {
|
|
6831
|
+
let items = self
|
|
6832
|
+
.completed_detail_index()
|
|
6833
|
+
.map(|i| self.pipeline_tab_body_list_for(Some(i)).items.len())
|
|
6834
|
+
.unwrap_or(0);
|
|
6835
|
+
let max = items.saturating_sub(visible.saturating_sub(1));
|
|
6836
|
+
if delta.y > 0.0 {
|
|
6837
|
+
self.pipeline_stage_content_scroll =
|
|
6838
|
+
self.pipeline_stage_content_scroll.saturating_sub(1);
|
|
6839
|
+
} else if delta.y < 0.0 {
|
|
6840
|
+
self.pipeline_stage_content_scroll =
|
|
6841
|
+
(self.pipeline_stage_content_scroll + 1).min(max);
|
|
6842
|
+
}
|
|
6843
|
+
} else if delta.y > 0.0 {
|
|
6844
|
+
self.completed_scroll_by(-1);
|
|
6845
|
+
} else if delta.y < 0.0 {
|
|
6846
|
+
self.completed_scroll_by(1);
|
|
6847
|
+
}
|
|
6848
|
+
}
|
|
6777
6849
|
PipelineDetailTab::Overview => {
|
|
6778
6850
|
// #818: The body list (meta + stage content) scrolls on
|
|
6779
6851
|
// the Overview tab.
|
|
@@ -375,8 +375,10 @@ pub fn make_test_app(data: BoardData) -> CoordApp {
|
|
|
375
375
|
reports_export_rx: None,
|
|
376
376
|
// #217: use the default dark palette for test helpers.
|
|
377
377
|
active_theme: crate::settings::Theme::Dark.to_quadraui_theme(),
|
|
378
|
-
// #
|
|
379
|
-
|
|
378
|
+
// #2405: completed-issues grid defaults (24h / all repos).
|
|
379
|
+
completed_grid: CompletedGrid::default(),
|
|
380
|
+
completed_form_layout: std::cell::RefCell::new(None),
|
|
381
|
+
completed_table_layout: std::cell::RefCell::new(None),
|
|
380
382
|
// #816: no pending PTY-panic dialog in test helpers.
|
|
381
383
|
pty_panic_dialog: None,
|
|
382
384
|
// #1059: no pending Gate A dispatch-failure dialog in test helpers.
|
|
@@ -3330,7 +3330,7 @@ pub struct CoordApp {
|
|
|
3330
3330
|
audit_no_service: bool,
|
|
3331
3331
|
/// #1040: current time-range filter (contract §8), cycled by `t`.
|
|
3332
3332
|
/// Persists across panel navigation (contract §11); resets to `All` on
|
|
3333
|
-
/// TUI restart (in-memory only
|
|
3333
|
+
/// TUI restart (in-memory only).
|
|
3334
3334
|
audit_time_range: AuditTimeRange,
|
|
3335
3335
|
/// #1040: current category filter (contract §9), cycled by `Tab`.
|
|
3336
3336
|
/// Persists across panel navigation; resets to `All` on restart.
|
|
@@ -3524,10 +3524,25 @@ pub struct CoordApp {
|
|
|
3524
3524
|
/// `Assignment::status_color_themed` and `stage_badge`.
|
|
3525
3525
|
active_theme: quadraui::Theme,
|
|
3526
3526
|
|
|
3527
|
-
// ── #
|
|
3528
|
-
/// Controls
|
|
3529
|
-
///
|
|
3530
|
-
|
|
3527
|
+
// ── #2405: completed-issues grid ─────────────────────────────────────────
|
|
3528
|
+
/// Controls + selection behind the Pipeline panel's `Completed` tab —
|
|
3529
|
+
/// the report-style grid that replaced #728's fixed-window Done section.
|
|
3530
|
+
/// In-memory only; resets to its 24h default on restart.
|
|
3531
|
+
pub(crate) completed_grid: CompletedGrid,
|
|
3532
|
+
/// The completed grid's last-painted control-row geometry, with the rect
|
|
3533
|
+
/// it was painted into. Same render-then-hit-test contract as
|
|
3534
|
+
/// `msv::MsvLayoutCache` — and for the same reason: `FormController`'s
|
|
3535
|
+
/// backend-free `handle_cached` re-derives char width as `lh * 0.6`,
|
|
3536
|
+
/// which is wrong on a cell-granular TUI surface and mis-routes clicks
|
|
3537
|
+
/// inside a segmented control. `FormLayout` bounds are **form-local**
|
|
3538
|
+
/// (origin `(0, 0)`), so hit-testing subtracts the stored rect.
|
|
3539
|
+
pub(crate) completed_form_layout: std::cell::RefCell<Option<(Rect, FormLayout)>>,
|
|
3540
|
+
/// The completed grid's last-painted `DataTable` geometry, with the rect
|
|
3541
|
+
/// it was painted into. Same render-then-hit-test pattern (and same
|
|
3542
|
+
/// reason for carrying the rect) as `reports_table_layout`: the table does
|
|
3543
|
+
/// not start at the main panel's origin, so a bare `pos - main_b` would
|
|
3544
|
+
/// mis-hit-test by the control row's height.
|
|
3545
|
+
pub(crate) completed_table_layout: std::cell::RefCell<Option<(Rect, DataTableLayout)>>,
|
|
3531
3546
|
|
|
3532
3547
|
// ── #816: PTY-panic modal ─────────────────────────────────────────────────
|
|
3533
3548
|
/// When `Some`, a dismissible modal dialog is shown explaining that a vt100
|
|
@@ -3579,54 +3594,6 @@ pub(crate) enum QueueScrollAxis {
|
|
|
3579
3594
|
Horizontal,
|
|
3580
3595
|
}
|
|
3581
3596
|
|
|
3582
|
-
/// #728: Time-window for the Done section in the Pipeline sidebar.
|
|
3583
|
-
///
|
|
3584
|
-
/// Cycled forward (H2 → H24 → D7 → All) by the `→` key while the Done
|
|
3585
|
-
/// section is focused. Resets to `H2` on TUI restart (in-memory only).
|
|
3586
|
-
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
|
3587
|
-
enum DoneWindow {
|
|
3588
|
-
/// Last 2 hours (default).
|
|
3589
|
-
H2,
|
|
3590
|
-
/// Last 24 hours.
|
|
3591
|
-
H24,
|
|
3592
|
-
/// Last 7 days.
|
|
3593
|
-
D7,
|
|
3594
|
-
/// All done issues regardless of age.
|
|
3595
|
-
All,
|
|
3596
|
-
}
|
|
3597
|
-
|
|
3598
|
-
impl DoneWindow {
|
|
3599
|
-
/// The maximum age in seconds for this window, or `None` for "All".
|
|
3600
|
-
fn secs(self) -> Option<f64> {
|
|
3601
|
-
match self {
|
|
3602
|
-
DoneWindow::H2 => Some(2.0 * 3600.0),
|
|
3603
|
-
DoneWindow::H24 => Some(24.0 * 3600.0),
|
|
3604
|
-
DoneWindow::D7 => Some(7.0 * 86_400.0),
|
|
3605
|
-
DoneWindow::All => None,
|
|
3606
|
-
}
|
|
3607
|
-
}
|
|
3608
|
-
|
|
3609
|
-
/// Cycle to the next wider window.
|
|
3610
|
-
fn next(self) -> Self {
|
|
3611
|
-
match self {
|
|
3612
|
-
DoneWindow::H2 => DoneWindow::H24,
|
|
3613
|
-
DoneWindow::H24 => DoneWindow::D7,
|
|
3614
|
-
DoneWindow::D7 => DoneWindow::All,
|
|
3615
|
-
DoneWindow::All => DoneWindow::H2,
|
|
3616
|
-
}
|
|
3617
|
-
}
|
|
3618
|
-
|
|
3619
|
-
/// Short label for use in the section header.
|
|
3620
|
-
fn label(self) -> &'static str {
|
|
3621
|
-
match self {
|
|
3622
|
-
DoneWindow::H2 => "last 2h",
|
|
3623
|
-
DoneWindow::H24 => "last 24h",
|
|
3624
|
-
DoneWindow::D7 => "last 7d",
|
|
3625
|
-
DoneWindow::All => "all",
|
|
3626
|
-
}
|
|
3627
|
-
}
|
|
3628
|
-
}
|
|
3629
|
-
|
|
3630
3597
|
impl Default for CoordApp {
|
|
3631
3598
|
fn default() -> Self {
|
|
3632
3599
|
Self::new()
|
|
@@ -4092,8 +4059,10 @@ impl CoordApp {
|
|
|
4092
4059
|
crate::settings::TuiSettings::load_custom_theme_file()
|
|
4093
4060
|
.unwrap_or_else(|| s.theme.to_quadraui_theme())
|
|
4094
4061
|
},
|
|
4095
|
-
// #
|
|
4096
|
-
|
|
4062
|
+
// #2405: completed-issues grid defaults (24h / all repos).
|
|
4063
|
+
completed_grid: CompletedGrid::default(),
|
|
4064
|
+
completed_form_layout: std::cell::RefCell::new(None),
|
|
4065
|
+
completed_table_layout: std::cell::RefCell::new(None),
|
|
4097
4066
|
// #816: no pending PTY-panic dialog on startup.
|
|
4098
4067
|
pty_panic_dialog: None,
|
|
4099
4068
|
// #1059: no pending Gate A dispatch-failure dialog on startup.
|