code-coordinator 0.5.169__tar.gz → 0.5.171__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.169 → code_coordinator-0.5.171}/PKG-INFO +1 -1
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/code_coordinator.egg-info/SOURCES.txt +3 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/code_coordinator.egg-info/scm_file_list.json +3 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/commands/status.py +65 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/fixture.py +17 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/server.py +125 -2
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/src/api/generated.ts +37 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/drive_queue.py +124 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/openapi.py +2 -0
- code_coordinator-0.5.171/coord/self_health.py +270 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/docs/OPERATING_GOTCHAS.md +14 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/fixtures/board-pipeline-basic.json +52 -0
- code_coordinator-0.5.171/tests/test_cli_diagnose_self.py +115 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_dashboard.py +139 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_dashboard_fixture.py +50 -0
- code_coordinator-0.5.171/tests/test_self_health.py +204 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/.github/workflows/acceptance-web.yml +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/.github/workflows/release-tui.yml +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/.gitignore +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/CLAUDE.md +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/GOAL.md +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/LICENSE +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/MANIFEST.in +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/README.md +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/__init__.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/agent.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/audit.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/block_log.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/board_bool_guard.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/board_service.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/brain.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/claim.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/cli.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/client.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/comments.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/config.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dao.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/.gitignore +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/components.json +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/dist/assets/Gallery-BoKs3mpY.js +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/dist/assets/Terminal-CEsP08iX.js +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/dist/assets/index-CDHPlB6k.js +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/dist/index.html +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/dist/sw.js +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/eslint.config.js +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/index.html +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/package-lock.json +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/package.json +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/playwright.config.ts +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/postcss.config.js +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/src/App.tsx +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/src/api/client.ts +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/src/index.css +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/src/main.tsx +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/src/test-setup.ts +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/tailwind.config.js +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/tsconfig.json +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/tsconfig.node.json +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/vite.config.ts +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/db.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/deps.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/drive.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/events.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/filelock.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/freshness.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/gates.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/goal.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/health/context.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/health/models.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/health/render.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/health/units.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/hooks.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/interactive.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/models.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/network.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/notify.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/parentage.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/plans.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/progress.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/release_window.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/reports.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/review.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/smoke.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/split_work.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/state.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/test_author.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/test_report.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/usage.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/install-agent.sh +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/pyproject.toml +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/setup.cfg +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/__init__.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/acceptance/ms-33/audit_1039.rs +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/acceptance/ms-33/contract.md +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/acceptance/ms-33/manifest.yml +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/acceptance/ms-38/contract.md +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/acceptance/ms-38/manifest.yml +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/acceptance/ms-65/contract.md +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/acceptance/ms-65/manifest.yml +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/conftest.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_config.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_db.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_events.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_init.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_models.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_network.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_no_direct_gh_calls.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_review.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_session.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_split.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_state.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tui/Cargo.lock +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tui/Cargo.toml +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tui/cargo-config-local-quadraui.toml.example +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tui/src/app/audit.rs +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tui/src/app/chat.rs +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tui/src/app/data.rs +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tui/src/app/dialogs.rs +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tui/src/app/doc_tabs.rs +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tui/src/app/drive.rs +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tui/src/app/drive_queue.rs +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tui/src/app/escalation.rs +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tui/src/app/events.rs +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tui/src/app/fixtures.rs +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tui/src/app/fleet_health.rs +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tui/src/app/fleet_sessions.rs +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tui/src/app/fleet_terminals.rs +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tui/src/app/format.rs +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tui/src/app/milestone_dag.rs +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tui/src/app/mod.rs +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tui/src/app/msv.rs +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tui/src/app/pipeline.rs +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tui/src/app/plans.rs +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tui/src/app/render.rs +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tui/src/app/reports.rs +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tui/src/app/sessions.rs +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tui/src/app/settings_ui.rs +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tui/src/app/sidebar.rs +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tui/src/app/terminal.rs +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tui/src/app/tests.rs +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tui/src/app/types.rs +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tui/src/app/workspace.rs +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tui/src/bin/gtk.rs +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tui/src/commands.rs +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tui/src/lib.rs +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tui/src/main.rs +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tui/src/settings.rs +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tui/tests/acceptance.rs +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tui/tests/cli.rs +0 -0
- {code_coordinator-0.5.169 → code_coordinator-0.5.171}/tui/tests/fixtures/board_sample.json +0 -0
|
@@ -125,6 +125,7 @@ coord/reports.py
|
|
|
125
125
|
coord/revalidate.py
|
|
126
126
|
coord/review.py
|
|
127
127
|
coord/scorecard.py
|
|
128
|
+
coord/self_health.py
|
|
128
129
|
coord/serve_app.py
|
|
129
130
|
coord/smoke.py
|
|
130
131
|
coord/spend_ceiling.py
|
|
@@ -492,6 +493,7 @@ tests/test_cli_chat_continue.py
|
|
|
492
493
|
tests/test_cli_decide.py
|
|
493
494
|
tests/test_cli_diagnose_config_provenance.py
|
|
494
495
|
tests/test_cli_diagnose_graph.py
|
|
496
|
+
tests/test_cli_diagnose_self.py
|
|
495
497
|
tests/test_cli_doctor.py
|
|
496
498
|
tests/test_cli_doctor_config_free_1801.py
|
|
497
499
|
tests/test_cli_doctor_config_mismatch_1712.py
|
|
@@ -726,6 +728,7 @@ tests/test_review_verdict_relay.py
|
|
|
726
728
|
tests/test_review_zero_commits.py
|
|
727
729
|
tests/test_scoped_review_wiring.py
|
|
728
730
|
tests/test_scorecard.py
|
|
731
|
+
tests/test_self_health.py
|
|
729
732
|
tests/test_serve.py
|
|
730
733
|
tests/test_serve_app_board_trim.py
|
|
731
734
|
tests/test_session.py
|
{code_coordinator-0.5.169 → code_coordinator-0.5.171}/code_coordinator.egg-info/scm_file_list.json
RENAMED
|
@@ -306,6 +306,7 @@
|
|
|
306
306
|
"coord/revalidate.py",
|
|
307
307
|
"coord/review.py",
|
|
308
308
|
"coord/scorecard.py",
|
|
309
|
+
"coord/self_health.py",
|
|
309
310
|
"coord/serve_app.py",
|
|
310
311
|
"coord/skills/coord-dispatch-verbs/SKILL.md",
|
|
311
312
|
"coord/skills/drive-queue-preflight/SKILL.md",
|
|
@@ -538,6 +539,7 @@
|
|
|
538
539
|
"tests/test_cli_decide.py",
|
|
539
540
|
"tests/test_cli_diagnose_config_provenance.py",
|
|
540
541
|
"tests/test_cli_diagnose_graph.py",
|
|
542
|
+
"tests/test_cli_diagnose_self.py",
|
|
541
543
|
"tests/test_cli_doctor.py",
|
|
542
544
|
"tests/test_cli_doctor_config_free_1801.py",
|
|
543
545
|
"tests/test_cli_doctor_config_mismatch_1712.py",
|
|
@@ -772,6 +774,7 @@
|
|
|
772
774
|
"tests/test_review_zero_commits.py",
|
|
773
775
|
"tests/test_scoped_review_wiring.py",
|
|
774
776
|
"tests/test_scorecard.py",
|
|
777
|
+
"tests/test_self_health.py",
|
|
775
778
|
"tests/test_serve.py",
|
|
776
779
|
"tests/test_serve_app_board_trim.py",
|
|
777
780
|
"tests/test_session.py",
|
|
@@ -1561,6 +1561,30 @@ def _diagnose_via_daemon(svc, params: dict) -> None:
|
|
|
1561
1561
|
"daemon host / operator box. Read-only, no network required."
|
|
1562
1562
|
),
|
|
1563
1563
|
)
|
|
1564
|
+
@click.option(
|
|
1565
|
+
"--self",
|
|
1566
|
+
"self_check",
|
|
1567
|
+
is_flag=True,
|
|
1568
|
+
help=(
|
|
1569
|
+
"#2436: report whether THIS coordinator process's own editable "
|
|
1570
|
+
"`coord` install — wherever `coord.__file__` actually resolves, "
|
|
1571
|
+
"never an assumed ~/src/<name> path — is behind "
|
|
1572
|
+
"origin/<default_branch>. A merged coord/** fix (other than "
|
|
1573
|
+
"agent.py/serve_app.py) is silently inert here until this checkout "
|
|
1574
|
+
"is pulled (docs/OPERATING_GOTCHAS.md #1). Fetches from origin "
|
|
1575
|
+
"unless --no-fetch is passed."
|
|
1576
|
+
),
|
|
1577
|
+
)
|
|
1578
|
+
@click.option(
|
|
1579
|
+
"--no-fetch",
|
|
1580
|
+
"self_no_fetch",
|
|
1581
|
+
is_flag=True,
|
|
1582
|
+
help=(
|
|
1583
|
+
"With --self, skip the `git fetch` and compare HEAD against "
|
|
1584
|
+
"whatever origin/<default_branch> the last fetch already left "
|
|
1585
|
+
"behind."
|
|
1586
|
+
),
|
|
1587
|
+
)
|
|
1564
1588
|
|
|
1565
1589
|
|
|
1566
1590
|
@_CONFIG_OPTION
|
|
@@ -1575,6 +1599,8 @@ def diagnose(
|
|
|
1575
1599
|
orphan_worktrees: bool = False,
|
|
1576
1600
|
graph_health: bool = False,
|
|
1577
1601
|
config_provenance_check: bool = False,
|
|
1602
|
+
self_check: bool = False,
|
|
1603
|
+
self_no_fetch: bool = False,
|
|
1578
1604
|
) -> None:
|
|
1579
1605
|
"""Per-stage doctor — diagnose, best-effort recover, optional reset."""
|
|
1580
1606
|
# ── graphify graph freshness sweep (read-only) ───────────────────────────
|
|
@@ -1587,6 +1613,11 @@ def diagnose(
|
|
|
1587
1613
|
_diagnose_config_provenance()
|
|
1588
1614
|
return
|
|
1589
1615
|
|
|
1616
|
+
# ── #2436: THIS process's own editable coord install freshness ──────────
|
|
1617
|
+
if self_check:
|
|
1618
|
+
_diagnose_self(fetch=not self_no_fetch)
|
|
1619
|
+
return
|
|
1620
|
+
|
|
1590
1621
|
# ── #618: --orphan-worktrees fleet sweep ─────────────────────────────────
|
|
1591
1622
|
if orphan_worktrees:
|
|
1592
1623
|
_diagnose_orphan_worktrees(config_path, dry_run=dry_run)
|
|
@@ -1762,6 +1793,40 @@ def _diagnose_config_provenance() -> None:
|
|
|
1762
1793
|
click.echo(summary_line(prov))
|
|
1763
1794
|
|
|
1764
1795
|
|
|
1796
|
+
def _diagnose_self(*, fetch: bool) -> None:
|
|
1797
|
+
"""Report whether THIS process's own editable ``coord`` install is
|
|
1798
|
+
behind origin (#2436).
|
|
1799
|
+
|
|
1800
|
+
Read-only, local-machine only — same family as ``--graph``/
|
|
1801
|
+
``--config-provenance``/``--orphan-worktrees``. Answers the question
|
|
1802
|
+
``docs/OPERATING_GOTCHAS.md`` #1 names but nothing previously checked:
|
|
1803
|
+
"did the `git pull` this editable install depends on for `coord/**`
|
|
1804
|
+
fixes to go live actually happen?" A coordinator host running last
|
|
1805
|
+
week's code gives zero signal of it otherwise — every board row and
|
|
1806
|
+
escalation reads exactly as if a merged fix were still unfixed (the
|
|
1807
|
+
#2286/#2426 incident this closes).
|
|
1808
|
+
|
|
1809
|
+
Locates the install via ``coord.self_health.default_install_path()`` —
|
|
1810
|
+
``Path(coord.__file__).resolve().parents[1]``, never an assumed
|
|
1811
|
+
``~/src/<name>`` path (the doc's own assumption had drifted from reality
|
|
1812
|
+
on the host that hit this). Each coordinator/drive-queue host has its
|
|
1813
|
+
own independent editable checkout that can drift independently, so this
|
|
1814
|
+
is deliberately per-machine, run where it's invoked, exactly like
|
|
1815
|
+
``--graph``.
|
|
1816
|
+
"""
|
|
1817
|
+
from coord.self_health import ( # noqa: PLC0415
|
|
1818
|
+
default_install_path,
|
|
1819
|
+
format_status_lines,
|
|
1820
|
+
self_freshness,
|
|
1821
|
+
summary_line as self_summary_line,
|
|
1822
|
+
)
|
|
1823
|
+
|
|
1824
|
+
st = self_freshness(install_path=default_install_path(), fetch=fetch)
|
|
1825
|
+
for line in format_status_lines(st):
|
|
1826
|
+
click.echo(f" {line}")
|
|
1827
|
+
click.echo(self_summary_line(st))
|
|
1828
|
+
|
|
1829
|
+
|
|
1765
1830
|
def _diagnose_orphan_worktrees(config_path: Path, *, dry_run: bool) -> None:
|
|
1766
1831
|
"""#618: local fleet sweep — find and prune orphaned coordinator worktrees.
|
|
1767
1832
|
|
|
@@ -35,6 +35,7 @@ Fixture schema (every key optional except ``board``)::
|
|
|
35
35
|
"proposals": [ {...coord.models.Proposal fields...} ],
|
|
36
36
|
"machines": [ {...GET /api/machines entry...} ],
|
|
37
37
|
"sessions": [ {...GET /api/sessions entry...} ],
|
|
38
|
+
"drive_queue": [ {...coord.state._decode_drive_queue_row shape...} ],
|
|
38
39
|
"review_findings": {"rev-1": {"verdict": "approve", "body": "..."}},
|
|
39
40
|
"diffs": {"work-1": "diff --git ..."},
|
|
40
41
|
"chat_reply": "canned /api/chat response text",
|
|
@@ -154,6 +155,7 @@ class FixtureServer:
|
|
|
154
155
|
proposals_raw: list = field(default_factory=list)
|
|
155
156
|
machines_raw: list = field(default_factory=list)
|
|
156
157
|
sessions_raw: list = field(default_factory=list)
|
|
158
|
+
drive_queue_raw: list = field(default_factory=list)
|
|
157
159
|
review_findings_raw: dict = field(default_factory=dict)
|
|
158
160
|
diffs: dict = field(default_factory=dict)
|
|
159
161
|
chat_reply: str = "fixture mode: the coordinator assistant is not wired up."
|
|
@@ -194,6 +196,20 @@ class FixtureServer:
|
|
|
194
196
|
def sessions(self) -> list[dict]:
|
|
195
197
|
return copy.deepcopy(self.sessions_raw)
|
|
196
198
|
|
|
199
|
+
def drive_queue(self, repo_name: str | None = None) -> list[dict]:
|
|
200
|
+
"""The seeded `coord drive` queue rows (#2428 DQW-1).
|
|
201
|
+
|
|
202
|
+
Same raw-row shape ``GET /api/drive-queue`` serves off the real DB
|
|
203
|
+
(``coord.state._decode_drive_queue_row``) — no reshaping, so a
|
|
204
|
+
fixture captured from a live queue (or hand-written to that shape)
|
|
205
|
+
drops in unchanged. ``repo_name`` filters exactly like
|
|
206
|
+
``coord.state._list_drive_queue_local``'s ``WHERE repo_name = ?``.
|
|
207
|
+
"""
|
|
208
|
+
rows = copy.deepcopy(self.drive_queue_raw)
|
|
209
|
+
if repo_name:
|
|
210
|
+
rows = [r for r in rows if r.get("repo_name") == repo_name]
|
|
211
|
+
return rows
|
|
212
|
+
|
|
197
213
|
def review_findings(self, assignment_id: str) -> tuple[str, str] | None:
|
|
198
214
|
"""Stand-in for ``coord.state.load_assignment_review_findings``.
|
|
199
215
|
|
|
@@ -343,6 +359,7 @@ def parse_fixture(raw: Any, *, path: Path | None = None) -> FixtureServer:
|
|
|
343
359
|
proposals_raw=_as_list(raw.get("proposals"), "proposals"),
|
|
344
360
|
machines_raw=_as_list(raw.get("machines"), "machines"),
|
|
345
361
|
sessions_raw=_as_list(raw.get("sessions"), "sessions"),
|
|
362
|
+
drive_queue_raw=_as_list(raw.get("drive_queue"), "drive_queue"),
|
|
346
363
|
review_findings_raw=_as_dict(raw.get("review_findings"), "review_findings"),
|
|
347
364
|
diffs=diffs,
|
|
348
365
|
events=_parse_events(raw.get("events")),
|
|
@@ -4,6 +4,7 @@ from __future__ import annotations
|
|
|
4
4
|
|
|
5
5
|
import asyncio
|
|
6
6
|
import json
|
|
7
|
+
import sqlite3
|
|
7
8
|
import subprocess
|
|
8
9
|
import time
|
|
9
10
|
from concurrent.futures import ThreadPoolExecutor
|
|
@@ -34,11 +35,19 @@ from coord.events import (
|
|
|
34
35
|
build_events_route,
|
|
35
36
|
)
|
|
36
37
|
from coord.board_service import read_board, write_board
|
|
38
|
+
from coord.dao import _JSON_COLUMNS
|
|
39
|
+
from coord.db import _ensure_schema
|
|
40
|
+
from coord.drive_queue import DriveQueueSummary, entries_from_rows, summarize_drive_queue
|
|
37
41
|
from coord.models import Assignment
|
|
38
42
|
from coord.network import check_all, fetch_status
|
|
39
|
-
from coord.openapi import
|
|
43
|
+
from coord.openapi import (
|
|
44
|
+
build_spec,
|
|
45
|
+
dataclass_schema,
|
|
46
|
+
openapi_and_docs_routes,
|
|
47
|
+
sqlite_table_schema,
|
|
48
|
+
)
|
|
40
49
|
from coord.pipeline import PipelineView
|
|
41
|
-
from coord.state import load_proposals
|
|
50
|
+
from coord.state import list_drive_queue, load_proposals
|
|
42
51
|
|
|
43
52
|
DASHBOARD_DIR = Path(__file__).parent
|
|
44
53
|
# Built React webapp lives here after `npm run build` inside coord/dashboard/webapp/.
|
|
@@ -317,6 +326,35 @@ def openapi_spec() -> dict:
|
|
|
317
326
|
components: dict = {}
|
|
318
327
|
assignment_ref = dataclass_schema(Assignment, components)
|
|
319
328
|
pipeline_view_ref = dataclass_schema(PipelineView, components)
|
|
329
|
+
# #2428 DQW-1: the drive-queue entry schema comes straight from the
|
|
330
|
+
# SQLite DDL, the same way coord/serve_app.py's `_board_response_schema`
|
|
331
|
+
# builds `BoardDriveQueueEntry` for `/board` — the wire schema *is* the
|
|
332
|
+
# DDL (coord/db.py), not a hand-maintained field list that can drift from
|
|
333
|
+
# it. `after_json` is JSON-encoded TEXT in SQLite, decoded to an array on
|
|
334
|
+
# the wire — the JSON columns come from `coord.dao._JSON_COLUMNS` itself
|
|
335
|
+
# (the same source `coord/serve_app.py`'s `_board_response_schema` derives
|
|
336
|
+
# its own `frozenset(_JSON_COLUMNS.get(table, ()))` from) rather than a
|
|
337
|
+
# second hand-maintained literal, so a future JSON column on `drive_queue`
|
|
338
|
+
# only needs updating in one place (#2096).
|
|
339
|
+
_schema_conn = sqlite3.connect(":memory:")
|
|
340
|
+
try:
|
|
341
|
+
_ensure_schema(_schema_conn)
|
|
342
|
+
components["BoardDriveQueueEntry"] = sqlite_table_schema(
|
|
343
|
+
_schema_conn,
|
|
344
|
+
"drive_queue",
|
|
345
|
+
json_columns=frozenset(_JSON_COLUMNS.get("drive_queue", ())),
|
|
346
|
+
)
|
|
347
|
+
finally:
|
|
348
|
+
_schema_conn.close()
|
|
349
|
+
drive_queue_entry_ref = {"$ref": "#/components/schemas/BoardDriveQueueEntry"}
|
|
350
|
+
drive_queue_summary_ref = dataclass_schema(DriveQueueSummary, components)
|
|
351
|
+
drive_queue_response = {
|
|
352
|
+
"type": "object",
|
|
353
|
+
"properties": {
|
|
354
|
+
"entries": {"type": "array", "items": drive_queue_entry_ref},
|
|
355
|
+
"summary": drive_queue_summary_ref,
|
|
356
|
+
},
|
|
357
|
+
}
|
|
320
358
|
board_response = {
|
|
321
359
|
"type": "object",
|
|
322
360
|
"properties": {
|
|
@@ -372,6 +410,37 @@ def openapi_spec() -> dict:
|
|
|
372
410
|
"responses": {"200": {"description": "OK"}},
|
|
373
411
|
}
|
|
374
412
|
},
|
|
413
|
+
"/api/drive-queue": {
|
|
414
|
+
"get": {
|
|
415
|
+
"summary": (
|
|
416
|
+
"The `coord drive` work queue in run order, plus a "
|
|
417
|
+
"server-computed pending/running/waiting/eligible/"
|
|
418
|
+
"blocked/held summary (#2428 DQW-1)"
|
|
419
|
+
),
|
|
420
|
+
"parameters": [
|
|
421
|
+
{
|
|
422
|
+
"name": "repo",
|
|
423
|
+
"in": "query",
|
|
424
|
+
"required": False,
|
|
425
|
+
"schema": {"type": "string"},
|
|
426
|
+
"description": (
|
|
427
|
+
"Restrict `entries` to one repo. `summary` is always "
|
|
428
|
+
"computed over the FULL queue, whatever `repo` is set "
|
|
429
|
+
"to — `fleet_held`/`level` are fleet-wide facts (a "
|
|
430
|
+
"fleet-scoped fired deploy gate anywhere stops the "
|
|
431
|
+
"whole tick), so narrowing the summary to one repo "
|
|
432
|
+
"could misreport it as clear."
|
|
433
|
+
),
|
|
434
|
+
}
|
|
435
|
+
],
|
|
436
|
+
"responses": {
|
|
437
|
+
"200": {
|
|
438
|
+
"description": "OK",
|
|
439
|
+
"content": {"application/json": {"schema": drive_queue_response}},
|
|
440
|
+
}
|
|
441
|
+
},
|
|
442
|
+
}
|
|
443
|
+
},
|
|
375
444
|
"/api/approve": {
|
|
376
445
|
"post": {
|
|
377
446
|
"summary": "Dispatch one or more proposals by id",
|
|
@@ -624,6 +693,19 @@ def build_app(
|
|
|
624
693
|
return
|
|
625
694
|
write_board(board)
|
|
626
695
|
|
|
696
|
+
def _read_drive_queue() -> list[dict]:
|
|
697
|
+
"""Every drive-queue row — seeded fixture or the daemon/local DB (#2428).
|
|
698
|
+
|
|
699
|
+
ALWAYS the full, unfiltered queue, same as ``_read_board()`` for the
|
|
700
|
+
board: ``?repo=`` is applied by ``api_drive_queue`` itself, to the
|
|
701
|
+
response's ``entries`` list only, AFTER this. That is deliberate, not
|
|
702
|
+
an oversight — see ``api_drive_queue``'s docstring for why the
|
|
703
|
+
aggregate summary must never be computed over a repo-filtered subset.
|
|
704
|
+
"""
|
|
705
|
+
if _fixture is not None:
|
|
706
|
+
return _fixture.drive_queue()
|
|
707
|
+
return list_drive_queue()
|
|
708
|
+
|
|
627
709
|
# ── Real-time event bus ────────────────────────────────────────────────
|
|
628
710
|
event_source = EventSource()
|
|
629
711
|
|
|
@@ -902,6 +984,46 @@ def build_app(
|
|
|
902
984
|
from dataclasses import asdict
|
|
903
985
|
return JSONResponse([asdict(p) for p in proposals])
|
|
904
986
|
|
|
987
|
+
async def api_drive_queue(request: Request) -> JSONResponse:
|
|
988
|
+
"""GET /api/drive-queue?repo= — the operator-declared `coord drive`
|
|
989
|
+
work queue, plus a server-computed aggregate summary (#2428 DQW-1).
|
|
990
|
+
|
|
991
|
+
Mirrors ``api_board``'s shape via ``_read_drive_queue()`` (the fixture-
|
|
992
|
+
vs-live indirection every other handler in this file goes through —
|
|
993
|
+
see ``_read_board()``), which resolves daemon-vs-local exactly like
|
|
994
|
+
``coord drive-queue list`` itself does. ``entries`` is the raw row
|
|
995
|
+
list — optionally narrowed to ``?repo=`` — verbatim: same shape as the
|
|
996
|
+
daemon's own ``GET /drive-queue`` and ``/board``'s ``drive_queue``
|
|
997
|
+
field, no reshaping, no new fields.
|
|
998
|
+
|
|
999
|
+
``summary`` (:func:`coord.drive_queue.summarize_drive_queue`) is
|
|
1000
|
+
DELIBERATELY computed over the FULL, unfiltered queue, never the
|
|
1001
|
+
``?repo=``-narrowed one — even though only ``entries`` respects the
|
|
1002
|
+
filter. This mirrors the summary's one existing call site
|
|
1003
|
+
(``tui/src/app/mod.rs``'s ``summarize_drive_queue(&self.data.drive_queue)``,
|
|
1004
|
+
always the whole board queue) and is required for correctness, not
|
|
1005
|
+
just consistency: ``fleet_held``/``level == "held"`` is documented as
|
|
1006
|
+
"a non-zero fleet-scoped fired gate stops the tick from launching
|
|
1007
|
+
ANYTHING, whatever repo it's in", and ``summarize_drive_queue``'s
|
|
1008
|
+
``after=`` satisfaction check (``_after_satisfied``) treats a pre-req
|
|
1009
|
+
absent from the entries it's given as already satisfied ("it may have
|
|
1010
|
+
landed long ago"). Summarizing only the filtered subset would let
|
|
1011
|
+
``GET /api/drive-queue?repo=web`` report ``level: "normal"`` while a
|
|
1012
|
+
DIFFERENT repo's entry actually holds the whole fleet queue, and could
|
|
1013
|
+
count a cross-repo ``after=`` dependency as eligible when the real
|
|
1014
|
+
prerequisite is still pending, just filtered out of view. So the
|
|
1015
|
+
Queue panel sidebar's pending/running/waiting/eligible/blocked/held
|
|
1016
|
+
counts are always fleet-wide, exactly like the TUI's; only the visible
|
|
1017
|
+
row list narrows with ``?repo=``.
|
|
1018
|
+
"""
|
|
1019
|
+
from dataclasses import asdict
|
|
1020
|
+
|
|
1021
|
+
repo = request.query_params.get("repo") or None
|
|
1022
|
+
rows = _read_drive_queue()
|
|
1023
|
+
summary = summarize_drive_queue(entries_from_rows(rows))
|
|
1024
|
+
entries = [r for r in rows if r.get("repo_name") == repo] if repo else rows
|
|
1025
|
+
return JSONResponse({"entries": entries, "summary": asdict(summary)})
|
|
1026
|
+
|
|
905
1027
|
async def api_approve(request: Request) -> JSONResponse:
|
|
906
1028
|
from coord.dispatch import dispatch, post_briefing, compute_do_not_touch
|
|
907
1029
|
from coord.state import (
|
|
@@ -1821,6 +1943,7 @@ def build_app(
|
|
|
1821
1943
|
Route("/api/machines", api_machines, methods=["GET"]),
|
|
1822
1944
|
Route("/api/sessions", api_sessions, methods=["GET"]),
|
|
1823
1945
|
Route("/api/proposals", api_proposals, methods=["GET"]),
|
|
1946
|
+
Route("/api/drive-queue", api_drive_queue, methods=["GET"]),
|
|
1824
1947
|
Route("/api/approve", api_approve, methods=["POST"]),
|
|
1825
1948
|
Route("/api/reject", api_reject, methods=["POST"]),
|
|
1826
1949
|
Route("/api/diff/{id}", api_diff, methods=["GET"]),
|
{code_coordinator-0.5.169 → code_coordinator-0.5.171}/coord/dashboard/webapp/src/api/generated.ts
RENAMED
|
@@ -176,3 +176,40 @@ export interface Assignment {
|
|
|
176
176
|
stop_reason: string | null
|
|
177
177
|
dispatched_by_assignment_id: string | null
|
|
178
178
|
}
|
|
179
|
+
|
|
180
|
+
export interface BoardDriveQueueEntry {
|
|
181
|
+
id: number | null
|
|
182
|
+
repo_name: string
|
|
183
|
+
issue_number: number
|
|
184
|
+
position: number
|
|
185
|
+
machine: string | null
|
|
186
|
+
after_json: string[]
|
|
187
|
+
state: string
|
|
188
|
+
attempts: number
|
|
189
|
+
deferrals: number
|
|
190
|
+
last_reason: string
|
|
191
|
+
reason_at: number | null
|
|
192
|
+
session_name: string | null
|
|
193
|
+
launched_at: number | null
|
|
194
|
+
enqueued_at: number
|
|
195
|
+
hold_after: number
|
|
196
|
+
hold_reason: string
|
|
197
|
+
resume_when: string
|
|
198
|
+
hold_state: string
|
|
199
|
+
hold_probes: number
|
|
200
|
+
launch_host: string
|
|
201
|
+
hold_scope: string
|
|
202
|
+
resumes: number
|
|
203
|
+
retry_backoff_at: number | null
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
export interface DriveQueueSummary {
|
|
207
|
+
level: string
|
|
208
|
+
pending: number
|
|
209
|
+
running: number
|
|
210
|
+
waiting: number
|
|
211
|
+
blocked: number
|
|
212
|
+
eligible: number
|
|
213
|
+
held: number
|
|
214
|
+
fleet_held: number
|
|
215
|
+
}
|
|
@@ -722,6 +722,130 @@ def entries_from_rows(rows: Iterable[Mapping[str, Any]]) -> list[QueueEntry]:
|
|
|
722
722
|
)
|
|
723
723
|
|
|
724
724
|
|
|
725
|
+
# ── aggregate summary (#2428 DQW-1) ───────────────────────────────────────────
|
|
726
|
+
#
|
|
727
|
+
# Ported field-for-field from `tui/src/app/drive_queue.rs`'s
|
|
728
|
+
# `summarize_drive_queue`/`DriveQueueSummary` — see that module's own comments
|
|
729
|
+
# for the #2186 incident behind "blocked outranks a fleet-held gate, which
|
|
730
|
+
# outranks a stall" and for why `fleet_held` (not `held`) is what actually
|
|
731
|
+
# stops the queue. Kept here, next to `entries_from_rows`, rather than in
|
|
732
|
+
# `coord/dashboard/server.py`, so any future consumer (a CLI summary, another
|
|
733
|
+
# server) gets the exact same counts without re-deriving them.
|
|
734
|
+
|
|
735
|
+
|
|
736
|
+
def _entry_is_pending(entry: QueueEntry) -> bool:
|
|
737
|
+
"""Rows that still have work ahead — `done` entries are history."""
|
|
738
|
+
return entry.state != STATE_DONE
|
|
739
|
+
|
|
740
|
+
|
|
741
|
+
def _entry_is_holding(entry: QueueEntry) -> bool:
|
|
742
|
+
"""Is this row's OWN deploy gate currently fired? Scope-agnostic."""
|
|
743
|
+
return entry.hold_state == HOLD_FIRED
|
|
744
|
+
|
|
745
|
+
|
|
746
|
+
def _entry_stops_fleet(entry: QueueEntry) -> bool:
|
|
747
|
+
"""Does this row's fired gate stop the WHOLE queue (#2186)?"""
|
|
748
|
+
return _entry_is_holding(entry) and entry.hold_scope == HOLD_SCOPE_FLEET
|
|
749
|
+
|
|
750
|
+
|
|
751
|
+
def _after_satisfied(entry: QueueEntry, all_entries: Sequence[QueueEntry]) -> bool:
|
|
752
|
+
"""Is *entry*'s `after=` list satisfied by the queue it sits in?
|
|
753
|
+
|
|
754
|
+
Same conservative, local read as the Rust original: a pre-req not
|
|
755
|
+
present in *all_entries* at all is treated as satisfied (it may have
|
|
756
|
+
landed long ago); a pre-req whose OWN gate has fired is unsatisfied even
|
|
757
|
+
though its row has by then reconciled to `done`.
|
|
758
|
+
"""
|
|
759
|
+
for key in entry.after:
|
|
760
|
+
unsatisfied = any(
|
|
761
|
+
other.key == key
|
|
762
|
+
and (other.state != STATE_DONE or _entry_is_holding(other))
|
|
763
|
+
for other in all_entries
|
|
764
|
+
)
|
|
765
|
+
if unsatisfied:
|
|
766
|
+
return False
|
|
767
|
+
return True
|
|
768
|
+
|
|
769
|
+
|
|
770
|
+
@dataclass(frozen=True)
|
|
771
|
+
class DriveQueueSummary:
|
|
772
|
+
"""Aggregate reading over a whole (or `?repo=`-filtered) queue read.
|
|
773
|
+
|
|
774
|
+
``level`` is the same ascending-severity rank
|
|
775
|
+
`tui/src/app/drive_queue.rs::DriveQueueLevel` computes — `"empty"` <
|
|
776
|
+
`"normal"` < `"stalled"` < `"held"` < `"blocked"` — so a client can badge
|
|
777
|
+
the panel sidebar without re-deriving the ranking rule.
|
|
778
|
+
"""
|
|
779
|
+
|
|
780
|
+
level: str = "empty"
|
|
781
|
+
# #2428: total non-`done` rows — the Rust original never materializes
|
|
782
|
+
# this as a struct field (it's implicit in the loop's filter), but a web
|
|
783
|
+
# sidebar wants a single "N pending" headline as much as it wants the
|
|
784
|
+
# breakdown, so it is added here rather than left for the client to sum.
|
|
785
|
+
pending: int = 0
|
|
786
|
+
running: int = 0
|
|
787
|
+
waiting: int = 0
|
|
788
|
+
blocked: int = 0
|
|
789
|
+
# Waiting rows whose in-queue pre-reqs are all satisfied — rows a tick
|
|
790
|
+
# could plausibly pick up next. Zero-with-waiting-rows is the stall.
|
|
791
|
+
eligible: int = 0
|
|
792
|
+
# Rows whose OWN deploy gate has fired, any scope — purely informational.
|
|
793
|
+
held: int = 0
|
|
794
|
+
# Rows whose FLEET-scoped deploy gate has fired — non-zero means the tick
|
|
795
|
+
# will launch nothing at all, whatever `eligible` says.
|
|
796
|
+
fleet_held: int = 0
|
|
797
|
+
|
|
798
|
+
|
|
799
|
+
def summarize_drive_queue(entries: Sequence[QueueEntry]) -> DriveQueueSummary:
|
|
800
|
+
"""Summarise *entries* — pure, no clock, no DB. See :class:`DriveQueueSummary`."""
|
|
801
|
+
pending = sum(1 for e in entries if _entry_is_pending(e))
|
|
802
|
+
held = sum(1 for e in entries if _entry_is_holding(e))
|
|
803
|
+
fleet_held = sum(1 for e in entries if _entry_stops_fleet(e))
|
|
804
|
+
running = waiting = blocked = eligible = 0
|
|
805
|
+
for e in entries:
|
|
806
|
+
if not _entry_is_pending(e):
|
|
807
|
+
continue
|
|
808
|
+
if e.state == STATE_RUNNING:
|
|
809
|
+
running += 1
|
|
810
|
+
elif e.state == STATE_BLOCKED:
|
|
811
|
+
blocked += 1
|
|
812
|
+
elif e.state == STATE_WAITING:
|
|
813
|
+
waiting += 1
|
|
814
|
+
if _after_satisfied(e, entries):
|
|
815
|
+
eligible += 1
|
|
816
|
+
# An unrecognised state from a newer daemon: counted in `pending`
|
|
817
|
+
# above (it is not `done`) but never as waiting/eligible/running/
|
|
818
|
+
# blocked, so it can neither trigger nor mask a stall.
|
|
819
|
+
|
|
820
|
+
if blocked > 0:
|
|
821
|
+
# Blocked outranks stalled — a hard stop is worse news than a queue
|
|
822
|
+
# that is merely waiting for capacity.
|
|
823
|
+
level = "blocked"
|
|
824
|
+
elif fleet_held > 0:
|
|
825
|
+
# #1757/#2186: a FLEET-scoped fired gate outranks a stall, even a
|
|
826
|
+
# real one — "3 waiting, none eligible" is a symptom here, and "you
|
|
827
|
+
# have a deploy to do" is the cause.
|
|
828
|
+
level = "held"
|
|
829
|
+
elif waiting > 0 and eligible == 0 and running == 0:
|
|
830
|
+
# Nothing running AND nothing that could start.
|
|
831
|
+
level = "stalled"
|
|
832
|
+
elif running > 0 or waiting > 0:
|
|
833
|
+
level = "normal"
|
|
834
|
+
else:
|
|
835
|
+
level = "empty"
|
|
836
|
+
|
|
837
|
+
return DriveQueueSummary(
|
|
838
|
+
level=level,
|
|
839
|
+
pending=pending,
|
|
840
|
+
running=running,
|
|
841
|
+
waiting=waiting,
|
|
842
|
+
blocked=blocked,
|
|
843
|
+
eligible=eligible,
|
|
844
|
+
held=held,
|
|
845
|
+
fleet_held=fleet_held,
|
|
846
|
+
)
|
|
847
|
+
|
|
848
|
+
|
|
725
849
|
# ── the board projection ─────────────────────────────────────────────────────
|
|
726
850
|
|
|
727
851
|
|
|
@@ -165,6 +165,8 @@ _JSON_COLUMN_SHAPES: dict[tuple[str, str], dict[str, Any]] = {
|
|
|
165
165
|
("issues", "labels"): {"type": "array", "items": {"type": "string"}},
|
|
166
166
|
("machines", "capabilities"): {"type": "array", "items": {"type": "string"}},
|
|
167
167
|
("machines", "repos"): {"type": "array", "items": {"type": "string"}},
|
|
168
|
+
# #2428: the drive queue's pre-req list — ["repo#N", ...] on the wire.
|
|
169
|
+
("drive_queue", "after_json"): {"type": "array", "items": {"type": "string"}},
|
|
168
170
|
}
|
|
169
171
|
|
|
170
172
|
_SQLITE_AFFINITY_TO_SCHEMA: dict[str, dict[str, Any]] = {
|